
InOutFunc : pointer;
FlushFunc : pointer;
CloseFunc : pointer;
UserData : array[1..16] of Byte;
Name : array[0..79] of Char;
Buffer : TTextBuf;
end;
В переменной Наndlе содержится номер описателя файла (когда
файл открыт). Это значение возвращается DOS.
Поле Моdе считается равным одному из следующих значений:
const
fmClosed = $D7B0;
fmInput = $D7B1;
fmOutput = $D7B2;
fmInOut = $D7B3;
B.Pascal 7 & Objects/LR - 386 -
Значение fmClosed показывает, что файл закрыт. Значения
fmInput и fmOutput показывают, что файл является текстовым файлом
и что для него была выполнена процедура Reset (fmInput) или
Rewrite (fmOutput). Значение fmOutput показывает, что переменная
файлового типа является типизированным или нетипизированным фай-
лом, для которого была выполнена процедура Reset или Rewrite. Лю-
бое другое значение говорит о том, что для файловой переменной
присваивание не было выполнено (и она, таким образом, не инициа-
лизирована).
Поле UserData в Borland Pascal недоступно, и пользователь-
ские программы могут сохранять в нем данные.
Поле Nаме содержит имя файла, которое представляет собой
последовательность символов, оканчивающуюся нулевым символом
(#0).
Для типизированных и нетипизированных полей RесSizе содержит
длину записи в байтах, а поле Рrivate зарезервировано, но являет-
ся свободным.
Для текстовых файлов BufPtr является указателем на буфер
размером BufSize, BufPоs представляет собой индекс следующего
символа в буфере, который должен быть записан или прочитан, а
BufEnd - счетчик допустимых символов в буфере. Указатели
OpenFunc, InOutFunc, FlushFunc и CloseFunc служат для ссылки на
программы ввода-вывода и используются для управления файлом. В
Главе 14 в разделе под заглавием "Драйверы устройств для тексто-
вых файлов" приводится дополнительная информация по этому вопро-
су.
B.Pascal 7 & Objects/LR - 387 -
Процедурные типы
─────────────────────────────────────────────────────────────────
Процедурные типы хранятся в виде двойного слова. При этом в
младшем слове содержится смещение процедуры, а в старшем - базо-
вый сегмент.
Прямой доступ к памяти
─────────────────────────────────────────────────────────────────
В Borland Pascal реализованы три предопределенных массива
Mem, MemW и MemL, которые используются для прямого доступа к па-
мяти. Каждый компонент массива Mem представляет собой байт, каж-
дый компонент массива MemW - слово, а каждый компонент MemL -
значение длинного целого типа (Longint).
Для индексирования массива Mem используется специальный син-
таксис. Два выражения целочисленного типа Word, разделенные запя-
тыми, используются для задания базового сегмента и смещения ячей-
ки памяти, к которой производится доступ. Например:
Mem[$0040:$0049] := 7;
Data := MemW[Seg(V):Ofs(V)];
MemLong := MemL[64:3*4];
Первый оператор записывает значение 7 в байт по адресу
$0040:$0049. Второй оператор помещает значение типа Word, запи-
санное в первые 2 байта переменной V, в переменную Data. Третий
оператор помещает значение типа Longint, записанное по адресу
$0040:$000C, в переменную MemLong.
Прямой доступ к портам
─────────────────────────────────────────────────────────────────
Для доступа к портам данных процессора 80х86 Borland Pascal
реализует два предопределенных массива - Port и PortW. Оба эти
массива являются одномерными массивами, где каждый элемент предс-
тавляет порт данных, адрес которого соответствует индексу. Индекс
имеет тип Word. Элементы массива Port имеют типа Byte, а элементы
массива PortW - Word.
Когда элементами массива Port или PortW присваивается значе-
ние, оно выводится в выбранный порт. Когда на элементы этих мас-
сивов имеются ссылки в выражениях, то значение вводится из задан-
ного порта.
Использование массивов Port и PortW ограничено только прис-
ваиванием и ссылками в выражениях, то есть элементы этих массивов
не могут использоваться в качестве параметров-переменных. Кроме
того, ссылки на весь массив Port или PortW (без индекса) не до-
пускаются.
B.Pascal 7 & Objects/LR - 388 -
───────────────────────────────────────────────────────────────────────