Значения файлового типа представляются в виде записей. Типи-
зированные и нетипизированные файлы занимают 128 байт, которые
располагаются по следующей схеме:
type
TFileRec = record
Handle : word; { описатель }
Mode : word; { режим }
RecSize : word; { размер записи }
Private : array[1..26] of byte;
UserData : array[1..16] of byte;
Name : array[0..79] of char;
end;
Текстовые файлы занимают 256 байт со следующей схемой распо-
ложения:
type
TTextBuf = array[0..127] of char;
TTextRec = record
Handle : word;
Mode : word;
BufSize : word;
Private : word;
BufPos : word;
BufEnd : word;
BufPtr : ^TTextBuf;
OpenFunc : pointer;
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;
Значение 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 в разделе под заглавием "Драйверы устройств для тексто-
вых файлов" приводится дополнительная информация по этому вопро-
су.