32 Глава I
В поле Name содержится полный путь к файлу в формате ASCIIZ. В этом формате строка определяется как цепочка символов, заканчивающаяся символом #0.
Четыре поля типа Pointer в записи TextRec имеют следующий смысл:
• Open.Fu.nc — адрес функции, получающей управление при открытии текстового файла;
• CloseFunc — адрес функции, вызываемой при закрытии текстового файла;
• InOutFunc — адрес функции, активизируемой в момент физического обращения к устройству для записи или чтения информации;
• FlushFunc — адрес функции, осуществляющей «выталкивание»
текстового буфера при буферизованном выводе информации. Каждая из этих четырех функций должна транслироваться в расчете на дальнюю модель памяти и соответствовать следующему заголовку:
type
FuncType = Function (var F: TextRec): Integer;
Значение, возвращаемое функцией, зависит от успешности выполнения соответствующей операции и равно нулю, если операция прошла успешно.
Совокупность всех четырех функций определяет драйвер текстового устройства.
Назначение стандартным файлам Input и Output пользовательского драйвера заключается в установке соответствующих адресов в поля-указатели записей TextRec. Если Вы захотите назначить свой драйвер произвольному текстовому файлу, Вам понадобится разработать свою процедуру Assign. В ходе ее выполнения помимо установки адресов функций в поля—указатели, Вам нужно будет также обнулить имя файла, присвоив Name [0] := #0. Кроме того, в поле Mode необходимо поместить значение fmClosed, в BufSize — размер буфера, а в BufPtr — его адрес.
OpenFunc
Функция OpenFunc вызывается стандартными процедурами Reset, Rewrite и Append и предназначена для осуществления всех необходимых подготовительных действий для работы с конкретным файлом. Эта функция всегда вызывается первой, до вызова любой другой функции драйвера. Анализируя поле Mode, она может определить режим работы открытого файла и соответствующим образом установить значение поля InOutFunc, связав его с процедурой чтения или записи информации. Если функция вызывается из процедуры Append, т.е. файл открывается одновременно /ууя чтения и записи данных, поле Mode содержит значение fmInOut. В этом случае процедура должна изменить значение этого поля на fmOutput перед передачей управления в вызывающую программу.
InOutFunc
Функция InOutFunc вызывается стандартными процедурами Read, ReadLn, Write, WriteLn, EOF, EOLn, SeekEOF, SeekEOLn и Close.