- •Часть I. Язык Borland Pascal...................................12
- •Глава 1. Что такое программа Borland Pascal?...................12
- •Глава 2. Лексемы...............................................22
- •Глава 3. Константы.............................................32
- •Глава 4. Типы..................................................34
- •Глава 5. Переменные и типизированные константы.................72
- •Глава 6. Выражения.............................................93
- •Глава 7. Операторы............................................117
- •Глава 8. Блоки, локальность и область действия................133
- •Глава 9. Процедуры и функции..................................139
- •Глава 10. Программы и модули..................................170
- •Глава 11. Динамически компонуемые библиотеки..................180
- •Глава 12. Библиотеки исполняющей системы......................194
- •Глава 13. Стандартные процедуры и функции.....................199
- •Глава 14. Ввод и вывод........................................215
- •Глава 15. Использование сопроцессора 80x87....................248
- •Глава 16. Модуль Dоs..........................................259
- •Глава 17. Программирование в защищенном режиме dos............270
- •Глава 18. Строки с завершающим нулем..........................297
- •Глава 19. Использование графического интерфейса Borland.......308
- •Глава 20. Использование оверлеев..............................329
- •Часть III. В среде Borland Pascal.............................348
- •Глава 21. Использование памяти................................348
- •Глава 22. Вопросы управления..................................388
- •Глава 23. Автоматическая оптимизация..........................405
- •Часть IV. Использование Borland Pascal с языком ассемблера....411
- •Глава 24. Встроенный ассемблер................................411
- •Глава 25. Компоновка с программами на языке ассемблера........437
- •Часть II "Библиотеки исполняющей системы" содержит информа-
- •Часть I. Язык Borland Pascal
- •Глава 1. Что такое программа Borland Pascal?
- •Глава 2. Лексемы
- •Глава 3. Константы
- •Глава 4. Типы
- •Глава 5. Переменные и типизированные константы
- •Глава 6. Выражения
- •Глава 7. Операторы
- •Глава 8. Блоки, локальность и область действия
- •Глава 9. Процедуры и функции
- •Глава 10. Программы и модули
- •Глава 11. Динамически компонуемые библиотеки
- •Часть II. Глава 12. Библиотеки исполняющей системы
- •Глава 13. Стандартные процедуры и функции
- •Глава 14. Ввод и вывод
- •Глава 15. Использование сопроцессора 80x87
- •Глава 16. Модуль Dоs
- •Глава 17. Программирование в защищенном режиме dos
- •Глава 18. Строки с завершающим нулем
- •Глава 19. Использование графического интерфейса Borland
- •Глава 20. Использование оверлеев
- •Часть III. В среде Borland Pascal
- •Глава 21. Использование памяти
- •Глава 22. Вопросы управления
- •Глава 23. Автоматическая оптимизация
- •Часть IV. Использование Borland Pascal с языком ассемблера
- •Глава 24. Встроенный ассемблер
- •Глава 25. Компоновка с программами на языке ассемблера
Глава 13. Стандартные процедуры и функции
─────────────────────────────────────────────────────────────────
В данной главе кратко описываются стандартные (встроенные)
процедуры и функции Borland Pascal и предописанные переменные,
определенные в модуле System. Более подробную информацию о конк-
ретной процедуре, функции или предописанной переменной вы можете
найти в Главе 1 ("Справочник по библиотеке") в "Руководстве прог-
раммиста".
Стандартные процедуры и функции являются предописанными. Так
как записи с их предварительными описаниями действуют точно так-
же, как если бы они были описаны в окружающем программу модуле,
при описании, переопределяющем тот же идентификатор внутри прог-
раммы конфликта не возникает.
Примечание: О других процедурах и функциях вы можете
прочесть в Главе 14 "Ввод и вывод".
В данной главе освещаются следующие темы:
- Процедуры управления программой.
- Функции преобразования.
- Арифметические функции.
- Порядковые процедуры и функции.
- Строковые процедуры и функции.
- Процедуры и функции динамического распределения памяти.
- Прочие процедуры и функции.
- Предописанные переменные модуля System.
B.Pascal 7 & Objects/LR - 200 -
Процедуры управления работой программы
─────────────────────────────────────────────────────────────────
Процедуры управления работой программы - это процедуры, уп-
равляющие логикой выполнения программы.
┌───────────────────┬───────────────────────────────────────────┐
│ Процедура │ Описание │
├───────────────────┼───────────────────────────────────────────┤
│ Break │ Завершает оператор for, while или repeat. │
├───────────────────┼───────────────────────────────────────────┤
│ Continue │ Продолжает итерацию оператора for, while,│
│ │ или repeat. │
├───────────────────┼───────────────────────────────────────────┤
│ Eхit │ Позволяет немедленно выйти из текущего мо-│
│ │ дуля. │
├───────────────────┼───────────────────────────────────────────┤
│ Наlt │ Останавливает выполнение программы и возв-│
│ │ ращает управление операционной системе. │
├───────────────────┼───────────────────────────────────────────┤
│ RunError │ Останавливает выполнение программы и гене-│
│ │ рирует ошибку этапа выполнения. │
└───────────────────┴───────────────────────────────────────────┘
Функции преобразования
─────────────────────────────────────────────────────────────────
Ниже перечислены функции преобразования.
┌──────────────────┬────────────────────────────────────────────┐
│ Функция │ Описание │
├──────────────────┼────────────────────────────────────────────┤
│ Chr │ Возвращает символ, заданный целым числом. │
├──────────────────┼────────────────────────────────────────────┤
│ High │ Возвращает старшее значение в диапазоне ар-│
│ │ гумента. │
├──────────────────┼────────────────────────────────────────────┤
│ Low │ Возвращает младшее значение в диапазоне ар-│
│ │ гумента. │
├──────────────────┼────────────────────────────────────────────┤
│ Оrd │ Возвращает порядковое число по значению пе-│
│ │ речислимого типа. │
├──────────────────┼────────────────────────────────────────────┤
│ Rоund │ Округляет значение вещественного типа до│
│ │ значения, имеющего длинный целый тип. │
├──────────────────┼────────────────────────────────────────────┤
│ Тrunс │ Усекает значение вещественного типа до зна-│
│ │ чения, имеющего длинный целый тип. │
└──────────────────┴────────────────────────────────────────────┘
B.Pascal 7 & Objects/LR - 201 -
Арифметические функции
─────────────────────────────────────────────────────────────────
Эти функции полезно использовать для выполнения арифметичес-
ких операций.
Примечание: Значения, возвращаемые процедурами опера-
ций с плавающей запятой модуля System, при компиляции в
режиме числовой обработки (директива {$N+}), имеют не ве-
щественный тип (real), а расширенный (extended).
┌──────────────────┬────────────────────────────────────────────┐
│ Функция │ Описание │
├──────────────────┼────────────────────────────────────────────┤
│ Abs │ Возвращает абсолютное значение аргумента. │
├──────────────────┼────────────────────────────────────────────┤
│ Аrctan │ Возвращает арктангенс аргумента. │
├──────────────────┼────────────────────────────────────────────┤
│ Cоs │ Возвращает косинус аргумента. │
├──────────────────┼────────────────────────────────────────────┤
│ Eхp │ Возвращает экспоненту аргумента. │
├──────────────────┼────────────────────────────────────────────┤
│ Frас │ Возвращает дробную часть аргумента. │
├──────────────────┼────────────────────────────────────────────┤
│ Int │ Возвращает целую часть аргумента. │
├──────────────────┼────────────────────────────────────────────┤
│ Ln │ Возвращает натуральный логарифм аргумента. │
├──────────────────┼────────────────────────────────────────────┤
│ Pi │ Возвращает значение числа Pi │
│ │ (3.141592653897932385). │
├──────────────────┼────────────────────────────────────────────┤
│ Sin │ Возвращает синус аргумента. │
├──────────────────┼────────────────────────────────────────────┤
│ Sqr │ Возвращает аргумент в квадрате. │
├──────────────────┼────────────────────────────────────────────┤
│ Sqrt │ Возвращает квадратный корень аргумента. │
└──────────────────┴────────────────────────────────────────────┘
B.Pascal 7 & Objects/LR - 202 -
Порядковые процедуры и функции
─────────────────────────────────────────────────────────────────
┌──────────────────┬────────────────────────────────────────────┐
│ Процедура/функция│ Описание │
├──────────────────┼────────────────────────────────────────────┤
│ Dес │ Уменьшает значение переменной. │
├──────────────────┼────────────────────────────────────────────┤
│ Inс │ Увеличивает значение переменной. │
├──────────────────┼────────────────────────────────────────────┤
│ Оdd │ Проверяет, является ли аргумент нечетным│
│ │ числом. │
├──────────────────┼────────────────────────────────────────────┤
│ Рred │ Возвращает предшествующее значение аргумен-│
│ │ та. │
├──────────────────┼────────────────────────────────────────────┤
│ Suсс │ Возвращает его последующее значение. │
└──────────────────┴────────────────────────────────────────────┘
Строковые процедуры и функции
─────────────────────────────────────────────────────────────────
Следующие процедуры и функции используются для работы со
строками Паскаля.
┌──────────────────┬────────────────────────────────────────────┐
│ Процедура │ Описание │
├──────────────────┼────────────────────────────────────────────┤
│ Cоncat │ Выполняет конкатенацию последовательности│
│ │ строк. │
├──────────────────┼────────────────────────────────────────────┤
│ Cору │ Возвращает подстроку строки. │
├──────────────────┼────────────────────────────────────────────┤
│ Delete │ Удаляет из строки подстроку. │
├──────────────────┼────────────────────────────────────────────┤
│ Insert │ Добавляет в строку подстроку. │
├──────────────────┼────────────────────────────────────────────┤
│ Length │ Возвращает динамическую длину строки. │
├──────────────────┼────────────────────────────────────────────┤
│ Pоs │ Производит поиск подстроки в строке. │
├──────────────────┼────────────────────────────────────────────┤
│ Str │ Преобразует численное значение в его стро-│
│ │ ковое представление. │
├──────────────────┼────────────────────────────────────────────┤
│ Val │ Преобразует строковое значение в его чис-│
│ │ ленное представление. │
└──────────────────┴────────────────────────────────────────────┘
B.Pascal 7 & Objects/LR - 203 -
Процедуры и функции динамического распределения памяти
─────────────────────────────────────────────────────────────────
Эти процедуры и функции используются для управления динами-
чески распределяемой областью - областью памяти, которая занимает
всю свободную память или ее часть, остающуюся при выполнении
программы. Полное описание методов, используемых для управления
динамически распределяемой областью памяти приводится в разделе
"Программа динамического распределения памяти" в Главе 21 ("Воп-
росы управления памятью").
Процедуры динамического распределения памяти
┌──────────────────┬────────────────────────────────────────────┐
│ Процедура/функция│ Описание │
├──────────────────┼────────────────────────────────────────────┤
│ Dispose │ Уничтожает динамическую переменную. │
├──────────────────┼────────────────────────────────────────────┤
│ FrееМем │ Уничтожает динамическую переменную данного│
│ │ размера. │
├──────────────────┼────────────────────────────────────────────┤
│ GetМем │ Создает новую динамическую переменную за-│
│ │ данного размера и устанавливает на нее пе-│
│ │ ременную-указатель. │
├──────────────────┼────────────────────────────────────────────┤
│ МахАvail │ Возвращает размер наибольшего непрерывного│
│ │ свободного модуля в динамически распределя-│
│ │ емой области памяти, соответствующий разме-│
│ │ ру наибольшей динамической переменной, ко-│
│ │ торая может быть выделена при обращении в│
│ │ МахAvail. │
├──────────────────┼────────────────────────────────────────────┤
│ МемАvail │ Возвращает количество имеющихся в динами-│
│ │ чески распределяемой области свободных│
│ │ байт. │
├──────────────────┼────────────────────────────────────────────┤
│ New │ Создает новую динамическую переменную и ус-│
│ │ танавливает на нее переменную-указатель. │
└──────────────────┴────────────────────────────────────────────┘
B.Pascal 7 & Objects/LR - 204 -
Функции для работы с указателями и адресами
─────────────────────────────────────────────────────────────────
Ниже перечислены функции для работы с указателями и адреса-
ми.
┌──────────────────┬────────────────────────────────────────────┐
│ Функции │ Описание │
├──────────────────┼────────────────────────────────────────────┤
│ Аddr │ Возвращает адрес заданного объекта. │
├──────────────────┼────────────────────────────────────────────┤
│ CSeg │ Возвращает текущее значение регистра CS. │
├──────────────────┼────────────────────────────────────────────┤
│ DSeg │ Возвращает текущее значение регистра DS. │
├──────────────────┼────────────────────────────────────────────┤
│ Оfs │ Возвращает смещение для заданного объекта. │
├──────────────────┼────────────────────────────────────────────┤
│ Ptr │ Преобразует адрес базового сегмента и сме-│
│ │ щение в значение типа указатель. │
├──────────────────┼────────────────────────────────────────────┤
│ Seg │ Возвращает сегмент для заданного объекта. │
├──────────────────┼────────────────────────────────────────────┤
│ SPtr │ Возвращает текущее значение регистра SР. │
├──────────────────┼────────────────────────────────────────────┤
│ SSeg │ Возвращает текущее значение регистра SS. │
└──────────────────┴────────────────────────────────────────────┘
B.Pascal 7 & Objects/LR - 205 -
Прочие процедуры и функции
─────────────────────────────────────────────────────────────────
┌──────────────────┬────────────────────────────────────────────┐
│ Процедура/функция│ Описание │
├──────────────────┼────────────────────────────────────────────┤
│ Exclude │ Исключает элемент из множества. │
├──────────────────┼────────────────────────────────────────────┤
│ FillChar │ Заполняет заданное число следующих друг за│
│ │ другом бит указанным значением. │
├──────────────────┼────────────────────────────────────────────┤
│ Hi │ Возвращает старший байт аргумента. │
├──────────────────┼────────────────────────────────────────────┤
│ Include │ Включает элемент в множество. │
├──────────────────┼────────────────────────────────────────────┤
│ Lo │ Возвращает младший байт аргумента. │
├──────────────────┼────────────────────────────────────────────┤
│ Моvе │ Копирует заданное число непрерывных байт в│
│ │ указанных границах из одного места в дру-│
│ │ гое, границы которого также указываются. │
├──────────────────┼────────────────────────────────────────────┤
│ ParamCount │ Возвращает число параметров, переданных│
│ │ программе в командной строке. │
├──────────────────┼────────────────────────────────────────────┤
│ ParamStr │ Возвращает параметр, заданный в командной│
│ │ строке. │
├──────────────────┼────────────────────────────────────────────┤
│ Random │ Возвращает случайное число. │
├──────────────────┼────────────────────────────────────────────┤
│ Rаndомizе │ Инициализирует встроенный генератор случай-│
│ │ ных чисел случайным значением. │
├──────────────────┼────────────────────────────────────────────┤
│ SizeOf │ Возвращает число байт, занимаемых аргумен-│
│ │ том. │
├──────────────────┼────────────────────────────────────────────┤
│ Swap │ Меняет местами старший и младший байты ар-│
│ │ гумента. │
├──────────────────┼────────────────────────────────────────────┤
│ TypeOf │ Указывает на таблицу виртуальных методов│
│ │ объекта. │
├──────────────────┼────────────────────────────────────────────┤
│ UpCase │ Преобразует символ в верхний регистр. │
└──────────────────┴────────────────────────────────────────────┘
B.Pascal 7 & Objects/LR - 206 -
Предописанные переменные
─────────────────────────────────────────────────────────────────
Кроме процедур и функций в модуле System предусмотрен ряд
предописанных переменных. Их перечень зависит от библиотеки ис-
полняющей системы, к которой относится модуль System.
Следующие переменные описываются в модуле System библиотеки
TURBO.TPL - библиотеке исполняющей системы для приложений реаль-
ного режима DOS.
┌───────────────┬────────────────┬──────────────────────────────┐
│ Переменная │ Тип │ Описание │
├───────────────┼────────────────┼──────────────────────────────┤
│ ErrorAddr │ Pointer │ адрес ошибки этапа выполне- │
│ │ │ ния │
├───────────────┼────────────────┼──────────────────────────────┤
│ ExitProc │ Pointer │ процедура выхода │
├───────────────┼────────────────┼──────────────────────────────┤
│ ExitCode │ Integer │ код выхода │
├───────────────┼────────────────┼──────────────────────────────┤
│ FileMode │ Byte │ режим открытия файла │
├───────────────┼────────────────┼──────────────────────────────┤
│ FreeList │ Pointer │ список свободных блоков ди- │
│ │ │ намически распределяемой об- │
│ │ │ ласти памяти │
├───────────────┼────────────────┼──────────────────────────────┤
│ FreeZero │ Pointer │ должен быть равен 0 │
├───────────────┼────────────────┼──────────────────────────────┤
│ HeapOrg │ Pointer │ начало динамически распреде- │
│ │ │ ляемой области │
├───────────────┼────────────────┼──────────────────────────────┤
│ HeapPtr │ Pointer │ указатель динамически рас- │
│ │ │ пределяемой области │
├───────────────┼────────────────┼──────────────────────────────┤
│ HeapError │ Pointer │ функция ошибки динамически │
│ │ │ распределяемой области памя- │
│ │ │ ти │
├───────────────┼────────────────┼──────────────────────────────┤
│ Input │ Text │ стандартный файл ввода │
├───────────────┼────────────────┼──────────────────────────────┤
│ InOutRes │ Integer │ буфер результата операции │
│ │ │ ввода-вывода │
├───────────────┼────────────────┼──────────────────────────────┤
│ Output │ Text │ стандартный файл вывода │
├───────────────┼────────────────┼──────────────────────────────┤
│ OvrCodeList │ Word │ список сегментов оверлейного │
│ │ │ кода │
├───────────────┼────────────────┼──────────────────────────────┤
│ OvrDebugPtr │ Pointer │ используется при отладке │
│ │ │ оверлеев │
├───────────────┼────────────────┼──────────────────────────────┤
│ OvrDosHandle │ Word │ описатель оверлея DOS │
B.Pascal 7 & Objects/LR - 207 -
├───────────────┼────────────────┼──────────────────────────────┤
│ OvrEmsHandle │ Word │ описатель оверлея EMS │
├───────────────┼────────────────┼──────────────────────────────┤
│ OvrHeapEnd │ Word │ конец оверлейного буфера │
├───────────────┼────────────────┼──────────────────────────────┤
│ OvrHeapOrg │ Word │ начало оверлейного буфера │
├───────────────┼────────────────┼──────────────────────────────┤
│ OvrHeapPtr │ Word │ указатель оверлейного буфера │
├───────────────┼────────────────┼──────────────────────────────┤
│ OvrHeapSize │ Word │ начальный размер оверлейного │
│ │ │ буфера │
├───────────────┼────────────────┼──────────────────────────────┤
│ OvrLoadList │ Word │ список загруженных оверлеев │
├───────────────┼────────────────┼──────────────────────────────┤
│ PrefixSeg │ Word │ префикс программного сегмен- │
│ │ │ та │
├───────────────┼────────────────┼──────────────────────────────┤
│ RandSeed │ Longint │ случайное число (генериру- │
│ │ │ ется датчиком случайных чи- │
│ │ │ сел) │
├───────────────┼────────────────┼──────────────────────────────┤
│ SaveInt00 │ Pointer │ сохраненное прерывание $00 │
├───────────────┼────────────────┼──────────────────────────────┤
│ SaveInt02 │ Pointer │ сохраненное прерывание $02 │
├───────────────┼────────────────┼──────────────────────────────┤
│ SaveInt1B │ Pointer │ сохраненное прерывание $1B │
├───────────────┼────────────────┼──────────────────────────────┤
│ SaveInt23 │ Pointer │ сохраненное прерывание $23 │
├───────────────┼────────────────┼──────────────────────────────┤
│ SaveInt24 │ Pointer │ сохраненное прерывание $24 │
├───────────────┼────────────────┼──────────────────────────────┤
│ SaveInt34 │ Pointer │ сохраненное прерывание $34 │
├───────────────┼────────────────┼──────────────────────────────┤
│ 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 │
├───────────────┼────────────────┼──────────────────────────────┤
│ SaveInt3E │ Pointer │ сохраненное прерывание $3E │
├───────────────┼────────────────┼──────────────────────────────┤
B.Pascal 7 & Objects/LR - 208 -
│ SaveInt3F │ Pointer │ сохраненное прерывание $3F │
├───────────────┼────────────────┼──────────────────────────────┤
│ SaveInt75 │ Pointer │ сохраненное прерывание $75 │
├───────────────┼────────────────┼──────────────────────────────┤
│ Seg0040 │ Word │ селектор сегмента $0040 │
├───────────────┼────────────────┼──────────────────────────────┤
│ SegA000 │ Word │ селектор сегмента $A000 │
├───────────────┼────────────────┼──────────────────────────────┤
│ SegB000 │ Word │ селектор сегмента $B000 │
├───────────────┼────────────────┼──────────────────────────────┤
│ SegC000 │ Word │ селектор сегмента $C000 │
├───────────────┼────────────────┼──────────────────────────────┤
│ SelectorInc │ Word │ шаг увеличения селектора │
├───────────────┼────────────────┼──────────────────────────────┤
│ StackLimit │ Word │ указатель на нижнюю границу │
│ │ │ стека │
├───────────────┼────────────────┼──────────────────────────────┤
│ Test8086 │ Byte │ результат проверки процес- │
│ │ │ сора 8086 │
├───────────────┼────────────────┼──────────────────────────────┤
│ Test8087 │ Byte │ результат проверки сопроцес- │
│ │ │ сора 8087 │
└───────────────┴────────────────┴──────────────────────────────┘
PrefixSeg представляет собой переменную длиной в слово, со-
держащую адрес префикса программного сегмента (PSP), создаваемого
при выполнении программы операционной системой DOS. Полное описа-
ние PSP приведено в руководстве по операционной системе DOS.
Переменная StackLimit содержит смещение начала стека относи-
тельно сегмента стека, что соответствует минимальному допустимому
значению регистра SP, после которого уже возникает ситуация пере-
полнения стека. По умолчанию значение этой переменной равно 0, но
если программа компилируется с директивами {$N+,$E+}, то эмулятор
сопроцессора 8087 при отсутствии в системе сопроцессора 8087 для
резервирования места в младших адресах сегмента стека будет уста-
навливать ее в значение 224.
Переменная InOutRes используется встроенными программами
ввода-вывода для сохранения значения, возвращаемого при следующем
обращении к функции IOResult.
В RandSeed сохраняется начальное значение для встроенного
генератора случайных чисел. Если присваивать этой переменной оп-
ределенное значение, то функция Random будет генерировать задан-
ную последовательность случайных чисел.
B.Pascal 7 & Objects/LR - 209 -
Переменная FileMode позволяет изменять режим доступа к отк-
рытым типизированным и нетипизированным файлам.
В переменной Test8087 сохраняется результат работы алгорит-
мов автоматического распознавания сопроцессора 8087, которые на-
чинают работать при запуске программы, скомпилированной с дирек-
тивой {$N+}.
Input и Оutput - это стандартные файлы ввода-вывода, необхо-
димые в каждой реализации Паскаля. По умолчанию они связываются
со стандартными входными и выходными файлами в Dos.
B.Pascal 7 & Objects/LR - 210 -
Следующие переменные описываются в модуле System библиотеки
TPW.TPL - библиотеке исполняющей системы для приложений Windows.
┌───────────────┬────────────────┬──────────────────────────────┐
│ Переменная │ Тип │ Описание │
├───────────────┼────────────────┼──────────────────────────────┤
│ CmdLine │ PChar │ указатель командной строки │
├───────────────┼────────────────┼──────────────────────────────┤
│ CmdShow │ Integer │ параметр CmdShow для Create- │
│ │ │ Window │
├───────────────┼────────────────┼──────────────────────────────┤
│ ErrorAddr │ Pointer │ адрес ошибки этапа выполне- │
│ │ │ ния │
├───────────────┼────────────────┼──────────────────────────────┤
│ ExitProc │ Pointer │ процедура выхода │
├───────────────┼────────────────┼──────────────────────────────┤
│ ExitCode │ Integer │ код выхода │
├───────────────┼────────────────┼──────────────────────────────┤
│ FileMode │ Byte │ режим открытия файла │
├───────────────┼────────────────┼──────────────────────────────┤
│ Input │ Text │ стандартный файл ввода │
├───────────────┼────────────────┼──────────────────────────────┤
│ HeapAllocFlag │ Word │ флаги распределения блока │
│ │ │ динамически распределяемой │
│ │ │ области памяти │
├───────────────┼────────────────┼──────────────────────────────┤
│ HeapBlock │ Word │ размер блока динамически │
│ │ │ распределяемой области памя- │
│ │ │ ти │
├───────────────┼────────────────┼──────────────────────────────┤
│ HearError │ Pointer │ функция ошибки динамически │
│ │ │ распределяемой области памя- │
│ │ │ ти │
├───────────────┼────────────────┼──────────────────────────────┤
│ HeapLimit │ Word │ размер наименьшего блока ди- │
│ │ │ намически распределяемой об- │
│ │ │ ласти памяти │
├───────────────┼────────────────┼──────────────────────────────┤
│ HeapList │ Word │ список сегментов динамически │
│ │ │ распределяемой области памя- │
│ │ │ ти │
├───────────────┼────────────────┼──────────────────────────────┤
│ HInstance │ Word │ описатель данного экземпляра │
├───────────────┼────────────────┼──────────────────────────────┤
│ HPrevInst │ Word │ описатель предыдущего экзем- │
│ │ │ пляра │
├───────────────┼────────────────┼──────────────────────────────┤
│ InOutRes │ Integer │ буфер результата операции │
│ │ │ ввода-вывода │
├───────────────┼────────────────┼──────────────────────────────┤
│ Output │ Text │ стандартный файл вывода │
├───────────────┼────────────────┼──────────────────────────────┤
B.Pascal 7 & Objects/LR - 211 -
│ PrefixSeg │ Word │ префикс программного сегмен- │
│ │ │ та │
├───────────────┼────────────────┼──────────────────────────────┤
│ RandSeed │ Longint │ случайное число (генериру- │
│ │ │ ется датчиком случайных чи- │
│ │ │ сел) │
├───────────────┼────────────────┼──────────────────────────────┤
│ SelectorInc │ Word │ шаг увеличения селектора │
├───────────────┼────────────────┼──────────────────────────────┤
│ StackLimit │ Word │ указатель на нижнюю границу │
│ │ │ стека │
├───────────────┼────────────────┼──────────────────────────────┤
│ Test8086 │ Byte │ результат проверки процес- │
│ │ │ сора 8086 │
└───────────────┴────────────────┴──────────────────────────────┘
HInstance содержит описатель экземпляра прикладной программы
или библиотеки, как это предусматривается операционной средой
Windows. В программе HPrevInst содержит предыдущий экземпляр
прикладной программы, или 0, если предыдущего экземпляра нет. В
библиотеке HPrevInst всегда равно 0.
В программе CmdLine содержит указатель на завершающуюся ну-
лем строку, которая содержит аргументы командной строки, заданные
при запуске прикладной программы. В библиотеке эта переменная не
определена.
В программе CmdShow содержит значение параметра, передачу
которого в ShowWindow ожидает Windows, когда прикладная программа
создает основное окно. В библиотеке эта переменная всегда равна
0.
Подсистемой управления динамически распределяемой областью
памяти для реализации программ динамического распределения памяти
Borland Pascal используются переменные HeapList, HeapLimit,
HeapBlock и HeapError.
Для реализации процедур выхода используются переменные
ExitProc, ErrorCode и ErrorAdr.
Переменная PrefixSeg представляет собой переменную длиной в
слово, содержащую адрес префикса программного сегмента (PSP),
создаваемого при выполнении программы операционной системой DOS.
Полное описание PSP приведено в руководстве по операционной сис-
теме DOS.
Переменная InOutRes используется встроенными программами
ввода-вывода для сохранения значения, возвращаемого при следующем
обращении к функции IOResult.
Переменная FileMode позволяет изменять режим доступа к отк-
рытым типизованным и нетипизированным файлам. Более подробно это
описано в Главе 14 "Ввод и вывод".
B.Pascal 7 & Objects/LR - 212 -
Следующие переменные описываются в модуле System библиотеки
TPP.TPL - библиотеке исполняющей системы для приложений защищен-
ного режима DOS.
┌───────────────┬────────────────┬──────────────────────────────┐
│ Переменная │ Тип │ Описание │
├───────────────┼────────────────┼──────────────────────────────┤
│ ErrorAddr │ Pointer │ адрес ошибки этапа выполне- │
│ │ │ ния │
├───────────────┼────────────────┼──────────────────────────────┤
│ ExitProc │ Pointer │ процедура выхода │
├───────────────┼────────────────┼──────────────────────────────┤
│ ExitCode │ Integer │ код выхода │
├───────────────┼────────────────┼──────────────────────────────┤
│ FileMode │ Byte │ режим открытия файла │
├───────────────┼────────────────┼──────────────────────────────┤
│ HeapAllocFlags│ Word │ флаги распределения блока │
│ │ │ динамически распределяемой │
│ │ │ области памяти │
├───────────────┼────────────────┼──────────────────────────────┤
│ HeapBlock │ Word │ размер блока динамически │
│ │ │ распределяемой области памя- │
│ │ │ ти │
├───────────────┼────────────────┼──────────────────────────────┤
│ HearError │ Pointer │ функция ошибки динамически │
│ │ │ распределяемой области памя- │
│ │ │ ти │
├───────────────┼────────────────┼──────────────────────────────┤
│ HeapLimit │ Word │ размер наименьшего блока ди- │
│ │ │ намически распределяемой об- │
│ │ │ ласти памяти │
├───────────────┼────────────────┼──────────────────────────────┤
│ HeapList │ Word │ список сегментов динамически │
│ │ │ распределяемой области памя- │
│ │ │ ти │
├───────────────┼────────────────┼──────────────────────────────┤
│ HInstance │ Word │ описатель данного экземпляра │
├───────────────┼────────────────┼──────────────────────────────┤
│ HPrevInst │ Word │ описатель предыдущего экзем- │
│ │ │ пляра │
├───────────────┼────────────────┼──────────────────────────────┤
│ InOutRes │ Integer │ буфер результата операции │
│ │ │ ввода-вывода │
├───────────────┼────────────────┼──────────────────────────────┤
│ Output │ Text │ стандартный файл вывода │
├───────────────┼────────────────┼──────────────────────────────┤
│ PrefixSeg │ Word │ префикс программного сегмен- │
│ │ │ та │
├───────────────┼────────────────┼──────────────────────────────┤
│ RandSeed │ Longint │ случайное число (генериру- │
│ │ │ ется датчиком случайных чи- │
│ │ │ сел) │
B.Pascal 7 & Objects/LR - 213 -
├───────────────┼────────────────┼──────────────────────────────┤
│ RealModeRegs │ array[0..49] of│ регистры реального режима │
│ │ byte │ │
├───────────────┼────────────────┼──────────────────────────────┤
│ SaveInt00 │ Pointer │ сохраненная исключительная │
│ │ │ ситуация $00 │
├───────────────┼────────────────┼──────────────────────────────┤
│ SaveInt02 │ Pointer │ сохраненное прерывание $02 │
├───────────────┼────────────────┼──────────────────────────────┤
│ SaveInt0C │ Pointer │ сохраненное исключительная │
│ │ │ ситуация $0С │
├───────────────┼────────────────┼──────────────────────────────┤
│ SaveInt0D │ Pointer │ сохраненное прерывание $0D │
├───────────────┼────────────────┼──────────────────────────────┤
│ SaveInt1B │ Pointer │ сохраненное прерывание $1B │
├───────────────┼────────────────┼──────────────────────────────┤
│ SaveInt21 │ Pointer │ сохраненное прерывание $21 │
├───────────────┼────────────────┼──────────────────────────────┤
│ SaveInt23 │ Pointer │ сохраненное прерывание │
│ │ │ реального режима $23 │
├───────────────┼────────────────┼──────────────────────────────┤
│ SaveInt24 │ Pointer │ сохраненное прерывание │
│ │ │ реального режима $24 │
├───────────────┼────────────────┼──────────────────────────────┤
│ SaveInt34 │ Pointer │ сохраненное прерывание $34 │
├───────────────┼────────────────┼──────────────────────────────┤
│ SaveInt35 │ Pointer │ сохраненное прерывание $35 │
├───────────────┼────────────────┼──────────────────────────────┤
│ SaveInt36 │ Pointer │ сохраненное прерывание $36 │
├───────────────┼────────────────┼──────────────────────────────┤
│ SaveInt37 │ Pointer │ сохраненное прерывание $37 │
├───────────────┼────────────────┼──────────────────────────────┤
│ SaveInt3B │ Pointer │ сохраненное прерывание $38 │
├───────────────┼────────────────┼──────────────────────────────┤
│ SaveInt39 │ Pointer │ сохраненное прерывание $39 │
├───────────────┼────────────────┼──────────────────────────────┤
│ SaveInt3A │ Pointer │ сохраненное прерывание $3A │
├───────────────┼────────────────┼──────────────────────────────┤
│ SaveInt3B │ Pointer │ сохраненное прерывание $3B │
├───────────────┼────────────────┼──────────────────────────────┤
│ SaveInt3C │ Pointer │ сохраненное прерывание $3C │
├───────────────┼────────────────┼──────────────────────────────┤
│ SaveInt3D │ Pointer │ сохраненное прерывание $3D │
├───────────────┼────────────────┼──────────────────────────────┤
│ SaveInt3E │ Pointer │ сохраненное прерывание $3E │
├───────────────┼────────────────┼──────────────────────────────┤
│ SaveInt3F │ Pointer │ сохраненное прерывание $3F │
├───────────────┼────────────────┼──────────────────────────────┤
│ SaveInt75 │ Pointer │ сохраненное прерывание $75 │
├───────────────┼────────────────┼──────────────────────────────┤
│ Seg0040 │ Word │ селектор сегмента $0040 │
├───────────────┼────────────────┼──────────────────────────────┤
│ SegA000 │ Word │ селектор сегмента $A000 │
B.Pascal 7 & Objects/LR - 214 -
├───────────────┼────────────────┼──────────────────────────────┤
│ SegB000 │ Word │ селектор сегмента $B000 │
├───────────────┼────────────────┼──────────────────────────────┤
│ SegB800 │ Word │ селектор сегмента $B800 │
├───────────────┼────────────────┼──────────────────────────────┤
│ Test8086 │ Byte │ результат проверки процес- │
│ │ │ сора 8086 │
├───────────────┼────────────────┼──────────────────────────────┤
│ Test8087 │ Byte │ результат проверки сопроцес- │
│ │ │ сора 8087 │
└───────────────┴────────────────┴──────────────────────────────┘
Более подробную информацию об этих переменных вы можете най-
ти в Главе 1 ("Справочник по библиотеке") в "Справочном руководс-
тве программиста.
B.Pascal 7 & Objects/LR - 215 -
───────────────────────────────────────────────────────────────────────