Руководство по языку B.Pascal 7

         

Процедуры и функции модуля WinPrn


Процедуры и функции модуля WinPrn перечислены в следующей таблице:

---------------------------T------------------------------------ ¦ Процедура/функция ¦ Описание ¦ +--------------------------+------------------------------------+ ¦ AbortPrn ¦ Прекращает печать задания, отбрасы-¦ ¦ ¦ вая все нераспечатанные данные. ¦ +--------------------------+------------------------------------+ ¦ AssignPrn ¦ Присваивает принтеру файл. ¦ +--------------------------+------------------------------------+ ¦ AssingDefPrn ¦ Присваивает файл используемому по¦ ¦ ¦ умолчанию принтеру. ¦ +--------------------------+------------------------------------+ ¦ SetPrnFont ¦ Начинает печать файла с выбранным¦ ¦ ¦ шрифтом. ¦ +--------------------------+------------------------------------+ ¦ TitlePrn ¦ Выводит заголовок печатаемого фай-¦ ¦ ¦ ла. ¦ L--------------------------+-------------------------------------

Драйверы устройств для текстовых файлов

Borland Pascal позволяет вам определить ваши собственные драйверы устройств для текстовых файлов. Драйвер устройства для текстовых файлов представляет собой набор из четырех функций, ре- ализующих полный интерфейс между файловой системой Borland Pascal и каким-либо устройством.

Этими четырьмя функциями, с помощью которых определяется лю- бой драйвер устройства, являются функции Open, InOut, Flush и Close. Заголовок каждой функции имеет следующий вид:

function DeviceFunc(var F: TextRec) integer

где TехtRес (или TTextRec для Windows) - тип записи текстового файла, который определяется в Главе 21. Чтобы в функции использо- вался дальний тип вызова, каждая из них должна компилироваться с директивой {$F+}. Значение, возвращаемое каждой функцией, предс- тавляющей собой интерфейс с устройством, становится значением, возвращаемым функцией IOResult. Возвращаемое значение 0 свиде- тельствует об успешном завершении операции.

Для того, чтобы связать функцию, осуществляющую интерфейс с устройством, с конкретным файлом, нужно написать специальную про- цедуру Assign (аналогичную процедуре AssignCrt в модуле Crt или WinCrt). Эта процедура должна присваивать адреса четырех функций, осуществляющих интерфейс с устройствами, четырем указателям на функции в переменной текстового файла. В придачу к этому вы долж- ны сохранить системную константу fmClosed в поле Моdе, записать размер буфера текстового файла в переменную BufSize, сохранить указатель буфера текстового файла в переменной BufPtr и очистить строку Nаме.


Предположим, например, что именами четырех функций, реализу- ющих интерфейс с устройством, являются функции DevOpen, DevInOut, DevFlush, DevClose и Assign.

Тогда процедура Assing может выглядеть следующим образом:

procedure AssignDev(var F: Text); begin with TextRec(F) do begin mode := fmClosed; BufSize := SizeOf(Buffer); BufPtr := @Buffer; OpenFunc := @DevOpen; InOutFunc := @DevInOut; FlushFunc := @DevFlush; CloseFunc := @DevClose; Name[0] := #0; end; end;

Для хранения пользовательской информации в функции, реализу- ющей интерфейс с устройством, может использоваться поле записи UserData. Это поле не изменяется файловой системой Borland Pascal.


Содержание раздела