15.3.2. Переменные управления работой клавиатуры
15.3.2.1. Переменная CheckBreak. Эта переменная является логическим переключателем режима работы откомпилированной и скомпонованной программы. Если ее значение равно True (стартовое значение), то нажатие комбинации клавиш Ctrl+Break во время выполнения операций ввода-вывода будет прерывать работу программы. Нажатие Ctrl+Break не во время ввода-вывода информации не имеет эффекта.
Запись значения False в переменную CheckBreak вообще отключает механизм прерывания работы программы комбинацией Ctrl+Break.
- 322 -
Значение переменной можно менять многократно. Иногда полезно разрешать прерывание для одной части программы и запрещать для другой:
USES CRT; { подключен модуль CRT }
BEGIN
CheckBreak:= False ; { отключение контроля }
... { непрерываемая часть }
CheckBreak:= True; { включение контроля }
... { здесь возможно прервать программу }
END.
Если на клавиатуре нет клавиши Break, то ее заменяет клавиша ScrollLock, и комбинация прерывания будет соответственно Ctrl+ScrollLock.
15.3.2.2. Переменная CheckEOF. Эта переменная разрешает (True) или запрещает (False) ввод с клавиатуры кода признака конца файла (ASCII-код номер 26 — «End-Of-File»). Этот код вырабатывается нажатием комбинации клавиш Ctrl+Z.
Стартовое значение CheckEOF равно False, т.е. нажатие Ctrl+Z введет в строку символ #26 и не будет иметь управляющего воздействия. Если же поменять значение CheckEOF на True, то можно организовать ввод текстов построчно, заканчивая текст признаком конца файла так же, как это делается в среде MS-DOS по команде
COPY CON FILE.TXT,
например, как в примере на рис. 15.4.
Здесь функция EOF не имеет параметров. Это означает, что она ожидает ввод кода конца файла с текущего устройства, т.е. с
| PROGRAM CopyTextToFile; { программа ввода текста в файл }
| USES CRT;
| VAR
| f : Text; { имя логического файла }
| s : String[126]; { Максимальное число символов в }
| {строке, считываемой через процедуры Read(), ReadLn() }
| BEGIN
| ClrScr; { очистка экрана }
| Assign (f,'file.txt'); { файл на диске - file.txt }
| Rewrite ( f ); { открытие файла для записи }
| WriteLn( 'Введите текст:' );
| CheckEOF := True; { разрешение интерпретации #26 }
Рис. 15.4
- 323 -
| While not EOF do { считывать строки с клавиатуры }
| Begin { пока не нажато Ctrl+ z }
| ReadLn( s );
| WriteLn{ f, s) { запись строки в файл на диске }
| end;
| Close( f ) {закрытие файла на диске }
| END.
Рис. 15.4 (окончание)
клавиатуры через механизм CRT. Если бы не было строки CheckEOF:=True, то цикл WHILE был бы «вечным».