Стандартные библиотечные модули

 

Модуль SYSTEM

Модуль SYSTEM является основной библиотекой Турбо Паскаля. Он реализует подпрограммы для всех встроенных возможностей, таких как ввод/вывод, обработка строк, эмуляция арифметического сопроцессора, управление оверлеями и динамическое распределение памяти. Модуль SYSTEM используется автоматически любым модулем или программой и никогда не указывается в предложении USES.

 

Константы

const

     

ErrorAddr

Pointer

=

NIL;{Адрес ошибки времени выполнения}

ExitProc

Pointer

=

NIL;{Процедура выхода}

ExitCode

Integer

=

0;{Выходной код}

FileMode

Byte

=

2;{Режим открытия файла}

FreeList

Pointer

=

NIL;{Список свободных блоков кучи}

HeapEnd

Pointer

=

NIL;{Конец кучи}

HeapError

Pointer

=

NIL;{Функция обработки ошибок кучи}

HeapOrg

Pointer

=

NIL;{Начало кучи}

HeapPtr

Pointer

=

NIL;{Указатель кучи}

InOutRes

Integer

=

0;{Буфер результата ввода/вывода}

OvrCodeList

Word

=

0;{Список оверлейных сегментов кода}

OvrDebugPtr

Pointer

=

NIL;{Адрес отладчика оверлеев}

OvrDosHandle

Word

=

0;{Обработчик DOS оверлеев}

OvrEmsHandle

Word

=

0;{Обработчик EMS оверлеев}

OvrHeapEnd

Word

=

0;{Конец буфера оверлеев}

OvrHeapOrg

Word

=

0;{Начало буфера оверлеев}

OvrHeapPrt

Word

=

0;{Указатель буфера оверлеев}

OvrHeapSize

Word

=

0;{Начальный размер буфера оверлеев}

OvrLoadList

Word

=

0;{Список загруженных оверлеев}

RandSeed

LongInt

=

0;{Опорное значение генератора случайных чисел}

PrefixSeg

Word

=

0;{Префикс программного сегмента}

Seg0040

Word

=

$0040{Сегмент $0040}

SegA000

Word

=

$A000{Сегмент $А000}

SegB000

Word

=

$B000{Сегмент $В000}

SegB800

Word

=

$B800{Сегмент $В800}

SelectorInc

Word

=

$1000{Шаг наращивания селекторов}

StackLimit

Word

=

0;{Указатель на нижнюю границу стека}

Test8086

Byte

=

0;{Признак наличия процессора 80x86}

Test8087

Byte

=

0;{Признак наличия сопроцессора}

OvrCodeList, OvrHeapSize, OvrDebugPtr, OvrHeapOrg, OvrHeapPtr, OvrHeapEnd, OvrHeapList, OvrDosHandle и OvrEmsHandle используются модулем Overlay для реализации администратора оверлеев. Буфер оверлеев размещается между сегментом стека и кучей и OvrHeapOrg и OvrHeapEnd содержат адреса начала и конца сегмента. Размер буфера оверлеев по умолчанию соответствует размеру максимального оверлея в программе; если в программе нет оверлеев, то размер оверлейного буфера равен нулю.

HeapOrg, HeapPtr, HeapEnd, FreeList, HeapError используются администратором кучи для реализации распределения динамической памяти.

Переменные ExitProc, ExitCode и ErrorAddr реализуют процедуры выхода.

PrefixSeg содержит сегментную часть адреса префикса программного сегмента (PSP).

StackLimit содержит смещение от нижней границы сегмента стека, соответствующее наименьшему допустимому значению регистра SP. Обычно StackLimit равен нулю; если программа откомпилирована с опциями {$N+.E+}, компилятор будет устанавливать его равным 224 для резервирования рабочего пространства на нижней границе сегмента стека, используемого для эмуляции сопроцессора.

InOutRes используется встроенными программами ввода/вывода для запоминания значения, возвращаемого при последующем вызове стандартной функции IOResult.

RandSeed содержит опорное число генератора случайных чисел. При присваивании конкретного значения этой переменной функция Random будет генерировать строго определенную последовательность псевдослучайных чисел. Процедура Randomize заносит в переменную RandSeed текущее системное время и тем самым обеспечивает новую псевдослучайную последовательность при очередном прогоне программы.

FileMode позволяет изменить режим доступа, с которым открываются типизированные и нетипизированные файлы стандартной процедурой RESET. Текстовые файлы этой процедурой открываются только для чтения.

Seg0040 хранит сегмент участка памяти, который MS-DOS использует для размещения своих переменных.

SegA000 содержит сегмент начала видеопамяти для графического режима работы, a SegB000 и SegB800 -сегменты видеопамяти для текстового режима.

Selectorlnc используется как шаг наращивания т.н. селекторов - указателей, обеспечивающих линейную модель памяти.

Test8086 хранит результат теста автообнаружения процессора Intel 80x86, a Test8087 - сопроцессора.