| GetCBreak(b); { запоминание статуса BREAK }

| SetCBreak( False ); { отключение проверки ^Break }

| OldAttr := TextAttr; { запоминание последнего цвета }

| WX := WhereX; { запоминание позиции курсора }

| WY := WhereY;

| TextAttr := 7; { неяркий цвет }

| if (Mem[0:$410] and $30) = $30 { начало экрана: }

| then ScrAddr := $B000 { моно – режим }

| else ScrAddr := $B800; { цветной режим }

| Move(Mem[ScrAddr:0],buffer,8000); { экран -> в буфер }

| FillChar(Mem[ScrAddr:0], 8000, 0); { затемнение экрана }

| repeat {цикл опроса пароля }

| ClrScr; { гашение экрана }

| repeat until KeyPressed; { ждать до нажатия }

| while KeyPressed do с := ReadKey;{ сброс нажатия }

| Write( #10'Пароль возврата? ' ); { Ввод пароля, но }

| TextAttr := 0; ReadLn(PS); TextAttr := 7; { вслепую! }

| until PS=Password; { Пароль введен ? }

| Move(buffer, Mem[ScrAddr:0],8000); { буфер-> на экран }

| GotoXY( WX, WY ); { курсор на место }

| TextAttr := OldAttr; { снова старый цвет }

| SetCBreak(b); { восстановление статуса BREAK }

| END;

| {$F-}

Рис. 16.18

- 386 -

| { Запускающая часть программы }

| BEGIN

| CheckBreak := False;

| Write(#10#13'Программа закрытия экрана'#10#13

| Запуск');

| Write(#10' HIDESCR [пароль возврата]'#10#10#13);

| WriteLn( 'Для включения нажмите PrintScreen'#10#13 );

| Password := ParamStr(1); {пароль из командной строки }

| SetIntVec($00,SaveInt00); {Необходимые операции подго- }

| SetIntVec($1B,SaveInt1B); {товки резидентной работы }

| SetIntVec($05,@MyInt05H); {подстановка прерывания 05 }

| Кеер(0); { <-- То, ради чего построен пример! }

| END.

Рис. 16.18 (окончание)

- 387 -

<p>Глава 17. Модуль Printer</p>

Среди прочих модулей в библиотеке языка содержится модуль Printer. Назначение этого модуля – устанавливать связь программ с печатающим устройством (как правило, принтером). В этой главе рассматривается содержимое этого модуля и приводятся некоторые, надеемся, полезные приемы работы с принтерами.

<p>17.1. Содержимое модуля Printer</p>

Этот модуль содержит всего одну переменную и две строки исполняемого текста. Он устанавливает соответствие между переменной Lst и системным устройством LPT1 (первым параллельным портом). Полный текст модуля приведен на рис. 17.1.

| UNIT Printer;

| INTERFACE

| VAR

| Lst : Text;

| IMPLEMENTATION

| BEGIN

| Assign (Lsr, ‘LPT1’);

| ReWrite (Lst)

| END.

Рис. 17.1

После подключения модуля Print операторы Write(Lst,…) и WriteLn(Lst,…) будут выводить данные непосредственно на принтер.

Поначалу этот модуль может показаться лишним, так как его вполне можно «растворить» в основной программе. Однако, если программа строится из модулей, многие из которых выводят данные на печать, наличие общей для всех них переменной Lst, связанной с принтером, весьма удобно.

Если принтер подключен через какое-нибудь другое устройство, например через второй порт LPT2 или через последовательный порт COM1, то можно создать свой собственный модуль Printer2 по аналогии с рис. 17.1, заменив LPT1 на другое имя и оттранслировав его.

<p>17.2. Низкоуровневые средства работы с принтером</p>

Вывод данных или специальных командных кодов на принтер через связанный с ним файл Lst или ему подобный — не единственный способ управлять печатью. Существует и другой путь посылки символа или их последовательности в принтер — через прерывание БСВВ 17H. Кроме того, используя это прерывание, можно опрашивать состояние устройства печати.

Прерывание 17H обеспечивает доступ к трем функциям обслуживания принтера:

— печати символа на принтере (функция номер 0);

— инициализации порта принтера (функция номер 1);

Перейти на страницу:

Поиск

Похожие книги