- •Часть I. Работа в среде
- •Глава 1. Интегрированная среда
- •1.1. Окно просмотра результатов Output
- •1.2. Окно просмотра переменных Watch
- •1.3. Структура меню
- •1.3.1. Пункт File (работа с файлами)
- •1.3.2. Пункт Edit (работа с редактором)
- •1.3.3. Пункт Run (запуск на выполнение)
- •1.3.4. Пункт Compile (компиляция)
- •1.3.5. Пункт Options (установка параметров системы)
- •1.3.6. Пункт Debug (установки отладчика)
- •1.3.7. Пункт Break/Watch (точки останова/обзор)
- •1.4. Интерактивная справка
- •Глава 2. Настройка системы
- •2.1. Система настройки среды программирования
- •2.2. Принятые в системе расширения имен файлов
- •Часть II. Язык турбо паскаль
- •Глава 3. Построение программ
- •3.1. Алфавит языка и зарезервированные слова
- •3.2. Общая структура программ
- •3.3. Комментарии и ключи компиляции
- •3.4. Условная компиляция программ
- •Глава 4. Введение в систему типов языка
- •4.1. Простые типы языка
- •4.1.1. Целочисленные типы
- •4.1.2. Вещественные числа
- •4.1.3. Логический тип
- •4.1.4. Символьный тип
- •4.1.5. Строковый тип
- •4.1.6. Адресный тип
- •4.1.7. Перечислимые типы
- •4.1.8. Ограниченные типы (диапазоны)
- •4.2. Сложные типы языка
- •Глава 5. Константы и переменные
- •5.1. Простые константы
- •5.2. Переменные
- •5.2.1. Совмещение адресов директивой absolute
- •5.2.2. Переменные со стартовым значением или типизированные константы
- •5.3. Операция присваивания и совместимость типов и значений
- •5.4.Изменение (приведение) типов и значений
- •Глава 6. Управляющие структуры языка
- •6.1. Простой и составной операторы
- •6.2. Условный оператор (if...Then...Else)
- •If Условие then Оператор1 else Оператор2;
- •6.3. Оператор варианта (case)
- •6.4. Оператор цикла с предусловием (while)
- •6.6. Оператор цикла с параметром (for...Do)
- •6.7. Оператор безусловного перехода Goto
- •6.8. Операторы Exit и Halt
- •6.9. Процедуры и функции
- •6.9.1. Параметры. Глобальные и локальные описания
- •6.9.2. Опережающее описание процедур и функций
- •6.9.3. Объявление внешних процедур
- •6.9.4. Процедуры и функции как параметры
- •6.9.5. Переменные-процедуры и функции
- •6.9.6. Специальные приемы программирования
- •6.10. Модули. Структура модулей
- •6.11. Особенности работы с модулями
- •6.12. Система библиотечных модулей языка
- •Часть III. Средства языка турбо паскаль
- •Глава 7. Массивы, записи и множества в деталях
- •7.1. Массивы (Array) и работа с ними
- •7.2. Тип «запись» (Record) и оператор присоединения With
- •7.3. Тип «множество» (Set). Операции с множествами
- •Глава 8. Обработка символов и строк
- •8.1. Символьный и строковый типы (Char и String)
- •8.2. Операции над символами
- •8.3. Операции над строками
- •8.3.1. Редактирование строк
- •8.3.2. Преобразование строк
- •8.3.2.1. Процедура Str( X [: Width [: dec ] ]; var s : String)
- •Глава 9. Математические возможности Турбо Паскаля
- •9.1. Базовые операции
- •9.2. Битовая арифметика
- •9.3. Логические вычисления и операции отношения
- •9.4. Математические процедуры и функции
- •9.4.1. Обсуждение математических функций языка
- •9.4.2. Генераторы случайных чисел
- •9.4.3. Оптимизация сложения и вычитания
- •9.5. Использование математического сопроцессора 80x87
- •Глава 10. Код программы, данные, адреса
- •10.2. Распределение памяти при выполнении программ
- •10.3. Анализ расположения кода и областей данных программы
- •10.5. Средства для работы с адресами
- •10.5.1. Определение адреса переменных
- •10.5.2. Создание адреса функцией Ptr
- •10.5.3. Определение размеров типов и переменных
- •Глава 11. Ссылки, динамические переменные и структуры
- •11.1. Ссылочные переменные
- •11.2. Операция разыменования
- •11.3. Организация памяти области кучи
- •11.4. Управление размерами области кучи и стека
- •11.5. Процедуры управления кучей
- •11.5.1. Размещение динамических переменных.
- •11.5.2. Освобождение динамических переменных.
- •11.5.3. Управление состоянием кучи.
- •11.5.4. Анализ состояния кучи.
- •11.5.5. Более детальный анализ состояния кучи
- •11.6. Ссылки, работающие не с кучей
- •11.5.6. Обработка ошибок распределения памяти
- •11.7. Как организовать структуры, большие чем 64к?
- •11.8. Практический пример построения стека
- •Глава 12. Ввод-вывод данных и файловая система
- •12.1. Понятие логического файла
- •12.2. Физические файлы в ms-dos
- •12.3. Понятие буфера ввода-вывода
- •12.4. Файловые типы Турбо Паскаля
- •12.5. Общие процедуры для работы с файлами
- •12.5.1. Связывание файлов
- •12.5.2. Открытие файлов
- •12.5.3. Закрытие файлов
- •12.5.4. Переименование файлов
- •12.5.5. Удаление файлов
- •12.5.6. Анализ состояния файлов
- •12.6. Текстовые файлы
- •12.6.1. Текст-ориентированные процедуры и функции
- •12.6.2. Операции ввода-вывода в текстовые файлы
- •123 1.23 [Клавиша ввода]
- •123 [Клавиша ввода] 1.23 [Клавиша ввода]
- •12.7. Типизированные файлы и операции ввода-вывода
- •12.8. Бестиповые файлы и операции ввода-вывода
- •12.9. Последовательный и прямой доступ к файлам
- •12.9.1. Опрос размеров файлов и позиции в них
- •12.9.2. Позиционирование в файлах
- •12.9.3. Усечение файлов
- •12.10. Процедуры для работы с каталогами
- •12.11. Обработка ошибок ввода-вывода
- •12.11.1. Функция ioResult
- •12.11.2. Примеры обработки ошибок ввода-вывода
- •12.11.3. Сводка номеров ошибок ввода-вывода
- •Глава 13. Объектно-ориентированное программирование
- •13.1. Определения объектов
- •13.2. Область действия полей объекта и параметр Self
- •13.3. Наследование
- •13.4. Присваивание объектов
- •13.5. Полиморфизм
- •13.5.1. Статические методы
- •13.5.2. Виртуальные методы
- •13.5.3. Выбор вида метода
- •13.6. Динамические объекты
- •13.6.1. Создание динамических объектов
- •13.6.2. Освобождение объектов. Деструкторы
- •13.6.3. Обработка ошибок при работе с динамическими объектами
- •13.7. Функции TypeOf и SizeOf
- •13.8. Задание стартовых значений объектам
- •13.9. Модули, экспортирующие объекты
- •Глава 14. Специальные средства языка
- •14.1. Работа с командной строкой. Функции ParamCount и ParamStr
- •14.2. Доступ к памяти пэвм. Массивы Mem, MemW, MemL
- •14.3. Доступ к портам ввода-вывода. Массивы Port и PortW
- •14.4. Процедура заполнения FillChar
- •14.5. Процедура перемещения данных Move
- •14.6. Функции обработки машинных слов Lo, Hi и Swap
- •14.7. Вставки машинного кода в программе
- •14.7.1. Оператор inline
- •14.7.2. Процедуры с директивой inline
- •14.8. Процедура завершения и обработка ошибок программ
- •14.8.1. Оператор RunError
- •14.8.2. Сводка номеров фатальных ошибок
- •Часть IV. Специальные библиотеки языка
- •Глава 15. Модуль crt
- •15.1. Вывод специальных символов
- •15.2. Модификация операторов Read, ReadLn
- •15.3. Системные переменные модуля crt
- •15.3.1. Переменные управления выводом на дисплей
- •15.3.2. Переменные управления работой клавиатуры
- •15.3.3. Переменная TextAttr
- •15.4. Процедуры и функции модуля crt
- •15.4.1. Работа с экраном в целом
- •15.4.2. Позиционирование курсора
- •15.4.3. Работа со строками
- •15.4.4. Настройка цвета
- •15.4.5. Подача звуковых сигналов
- •15.4.6. Использование встроенного таймера
- •15.4.7. Опрос клавиатуры
- •If KeyPressed then Действие ;
- •15.4.8. Переназначение стандартных файлов
- •Глава 16. Модуль dos
- •16.1. Опрос и установка параметров ms-dos
- •16.1.1. Управление параметрами break и verify 16.1.1.1.
- •16.1.2. Опрос системных переменных ms-dos
- •16.2. Работа с часами и календарем
- •16.2.1. Опрос и назначение даты
- •16.2.3. Работа с датой создания файлов
- •16.3. Анализ ресурсов дисков
- •16.4. Работа с каталогами и файлами
- •16.4.1. Типы и константы модуля dos для работы с файлами
- •16.4.2. Переменная DosError
- •16.4.3. Процедуры поиска файлов на диске
- •16.4.4. Работа с атрибутами файлов
- •16.4.5. Анализ имен файлов
- •16.5. Работа с прерываниями ms-dos
- •16.5.1. Чтение и перестановка адресов подпрограмм прерываний
- •16.5.2. Вызов прерывания процедурой Intr
- •16.5.3. Процедура MsDos
- •6.6. Организация субпроцессов и резидентных программ
- •16.6.1. Программирование субпроцессов
- •Глава 17. Модуль Printer
- •7.1. Содержимое модуля Printer
- •17.2. Низкоуровневые средства работы с принтером
- •17.3. Работа с двумя принтерами одновременно
- •Глава 18. Модуль Overlay
- •18.1. Оверлейное построение программ
- •18.2. Правила оформления оверлейных программ
- •18.3. Инициализация работы оверлеев
- •18.3.1. Включение администратора оверлеев
- •18.3.2. Анализ результата инициализации
- •18.3.3. Размещение оверлейного файла в ems-памяти
- •18.4. Управление оверлейным буфером
- •18.4.1. Опрос размера буфера
- •18.4.2. Установка размера буфера
- •18.4.3. Принудительная очистка буфера
- •18.5. Оптимизация работы оверлеев
- •18.5.1. Установка размера области испытаний
- •18.5.2. Подсчет вызовов оверлеев
- •18.6. Предопределенные переменные для работы с оверлеями
- •18.7. Включение оверлеев в ехе-файлы
- •Глава 19. Модуль Graph
- •19.1. Файлы bgi и содержимое модуля Graph
- •19.2. Управление графическими режимами
- •19.2.1. Инициализация и закрытие графического режима
- •19.2.2. Обработка ошибок инициализации
- •19.2.3. Классификация и анализ графических режимов
- •19.2.4. Очистка экрана и переключение режимов
- •19.2.5. Управление режимом вывода отрезков на экран
- •19.3. Системы координат и «текущий указатель»
- •19.3.1. Координаты устройства и мировые координаты
- •19.3.2. Управление «текущим указателем»
- •19.4. Рисование графических примитивов и фигур
- •19.4.1. Линии и их стили
- •1100110011001100 — Всего 16 разрядов.
- •19.4.2. Коэффициент сжатия изображения
- •19.4.3. Окружности, эллипсы и дуги
- •19.4.4. Построение прямоугольников и ломаных
- •19.5. Управление цветами и шаблонами заливки (заполнения)
- •19.5.1. Немного о цветах
- •19.5.2. Задание типа заливки
- •19.5.3. Заливка областей изображения
- •19.5.4. Опрос и установка цветов пера и фона
- •19.5.5. Управление палитрой
- •19.6. Битовые графические операции
- •19.6.1. Битовые операции
- •19.6.2. Работа с фрагментами изображений
- •19.7. Управление видеостраницами
- •19.8. Графические окна
- •19.9. Вывод текста
- •19.9.1. Выбор шрифта и стиля
- •19.9.2. Предварительная загрузка и регистрация шрифтов
- •19.9.3. Непосредственный вывод строк
- •19.9.4. Размер букв и его масштабирование
- •19.9.5. Опрос стиля и ориентации шрифтов
- •19.10. Включение шрифтов и драйверов в ехе-файл
- •19.11. Подключение новых драйверов
- •19.12. Один полезный совет
- •Часть V. Практические
- •Глава 20. Профессиональная работа с
- •20.1. Программный опрос режимов текстового дисплея
- •20.2. Организация доступа к видеопамяти
- •20.3. Запоминание окон экрана и их восстановление
- •20.3.1. Общие принципы работы с окном
- •20.3.2. Модуль Win
- •20.4. Работа с образом экрана на диске
- •20.5. Крупные надписи на экране
- •20.6. Управление формой курсора
- •Глава 21. Как осуществить полный доступ к клавиатуре
- •21.1. Как организовать опрос алфавитно-цифровой клавиатуры
- •21.2. Опрос клавиши в регистре Ctrl
- •21.3. Опрос расширенных кодов и функциональных клавиш
- •21.4. Опрос служебных клавиш
- •21.5. Анализ клавиш регистров и их состояния
- •21.6. Скэн-коды клавиатуры и работа с ними
- •21.7. Эффект обратной записи в буфер ввода
- •Глава 22. Работа с оперативной
- •22.1. Многобитовое и многоплоскостное озув
- •22.2. Карта дисплейной памяти
- •22.3. Вывод текста на графический экран
- •22.4. Работа с графическими образами на диске
- •Приложение 2 Ключи и директивы компилятора
- •Ключи режимов компиляции
- •Директивы с параметрами
- •Приложение 3
- •Файл tpc.Cfg
- •Приложение 4 Список утилит пакета Турбо Паскаль (версия 5.5)
- •Программа администрирования библиотек
- •Утилита поиска текстов grep
- •Утилита преобразования двоичных файлов binobj
- •Приложение 5
- •Основные команды перемещения курсора
- •Расширенный набор команд перемещения курсора
- •Команды вставки и удаления
- •Команды работы с блоками
- •Поиск и замена
- •Прочие команды
- •Приложение 6
- •If False then Оператор;
- •Приложение 7
- •Глава 6. Управляющие структуры языка
- •Глава 8. Обработка символов и строк
- •Глава 9. Математические возможности Турбо Паскаля
- •Глава 16. Модуль dos
- •Глава 17. Модуль Printer
- •Глава 18. Модуль Overlay
- •Глава 19. Модуль Graph
- •Глава 20. Профессиональная работа с текстовыми изображениями
- •Глава 21. Как осуществить полный доступ к клавиатуре
- •Глава 22. Работа с оперативной памятью видеоадаптеров
- •Литература
- •Оглавление
- •Часть I. Работа в среде программирования
- •Часть II. Язык турбо паскаль
- •Часть III. Средства языка турбо паскаль
- •Часть IV. Специальные библиотеки языка
- •Часть V. Практические приемы работы с пэвм
15.4. Процедуры и функции модуля crt
Реализованные в модуле процедуры и функции сведены в табл. 15.5.
Таблица 15.5
Процедуры и функции |
Назначение |
Работа с экраном в целом |
|
Window(X1, Y1, X2, Y2 : Byte) |
Задание текущего окна на экране {325} |
-
Процедуры и функции
Назначение
ClrScr
Очистка текущего окна на экране
TextMode(M: Word)
Установка текстового режима
Позиционирование курсора
GotoXY(X, Y:Byte)
Установка курсора в столбец X, строку Y
WhereX : Byte
Выдача номера текущего столбца
WhereY : Byte
Выдача номера текущей строки
Работа со строками
ClrEOL
Стирание всех символов в строке, начиная от текущего и до конца строки
InsLine
Вставка пустой строки на место текущей
DelLine
Удаление текущей строки
Настройка цвета
TextColor(C:Byte)
Выбор цвета символов на экране
TextBlackGround(C:Byte)
Выбор цвета фона под символами
HighVideo
Включение яркости цвета символов
LowVideo
Выключение яркости цвета символов
NormVideo
Восстановление цветового режима
Подача звуковых сигналов
Sound(Hz:Word)
Включение звука с частотой тона Hz в герцах
NoSound
Выключение звука
Использование встроенного таймера
Delay (ms:Word)
Задержка процесса (пауза) в ms миллисекунд
Опрос клавиатуры
KeyPressed: Boolean
Логическая функция для анализа нажатия клавиши
ReadKey : Char
Функция, возвращающая символ нажатой клавиши
Переназначение стандартных файлов
AssignCRT(VAR f : Text)
Связь текстового файла f с устройством CRT
{326}
Далее будут рассмотрены более подробно все функции и процедуры из табл. 15.5.
15.4.1. Работа с экраном в целом
15.4.1.1. Процедура Window( X1, Y1, X2, Y2 : Byte). Эта процедуpa устанавливает текущее текстовое окно на экране согласно схеме на рис. 15.6.
(X1,
Y1)
Текстовое
окно
(X2,
Y2)
←─−──
Все
поле
экрана
(Xmax, Ymax)
Рис. 15.6
Координаты диагонали окна X1, Yl, X2 и Y2 всегда отсчитываются от левого верхнего угла экрана в абсолютных координатах и должны удовлетворять следующим условиям:
1 <= Х1 < Х2 <= Xmax;
1 <= Y1 < Y2 <= Ymax.
При нарушении этих условий окно не создается.
Параметр Xmax может принимать два значения — 40 и 80 (при видеоадаптере MDA/Hercules — только 80), a Ymax — два или одно в зависимости от типа видеоадаптера: 25 (все типы) и 43 или 50 (адаптеры EGA или VGA соответственно).
После выполнения процедуры Window все операции, все действия с экраном относятся к той его части, которая определена координатами X1, Y1, X2, Y2. Отсчет строк и столбцов для позиционирования курсора теперь производится в координатах текущего окна, и позиция (1, 1) — это левый верхний угол окна. Часть экрана вне окна практически изымается из обращения и становится недоступной стандартным средствам языка.
Сразу после выполнения процедуры курсор устанавливается в позицию (1, 1) только что созданного окна. Очистка окна не производится.
При использовании процедуры Window следует помнить, что координаты очередного создаваемого окна всегда даются в «абсолют-{327}ных» экранных координатах, а не в относительных координатах последнего текстового окна.
После окончания работы программы, использующей окна, текущее окно автоматически становится равным полному экрану, так что заботиться об этом нет необходимости. Пример использования окон приведен на рис. 15.7.
PROGRAM Windows; { демонстрация текст-окон } USES CRT; { используется модуль CRT } VAR i : Byte; { параметр циклов for } BEGIN TextAttr := White+16*Black; { цвет - белый на черном } ClrScr; for i:=1 to 112 do Write(‘* Полный Экран '); { вывод на основной экран } repeat TextAttr := White+16*Red; { цвет - белый на красном } Window ( 5, 5, 20, 15 ); { задание одного окна } for i:=1 to 120 do Write ( '* Окно 1 ' ); { вывод текста в это окно } ClrScr; { очистка первого окна } TextAttr:= White+16*Blue; { цвет - белый на синем } Window ( 40,10, 55,20 ); { задание другого окна } for i:=1 to 120 do Write ( '* Окно 2 ' ); { вывод текста в это окно } ClrScr; { очистка второго окна } until KeyPressed; { цикл до нажатия клавиши } END. |
Рис. 15.7
Для программного опроса текущих координат окна на экране введены две специальные системные переменные модуля CRT — WindMax и WindMin.
15.4.1.2. Переменные WindMax и WindMin. Эти переменные имеют тип Word и хранят в себе закодированную информацию о размерах текущего окна на дисплее (см. процедуру Window). Поскольку максимальные значения координат текстовых окон в столбцах и строках не превышают 255, т.е. могут храниться в одном байте, каждая из переменных хранит одновременно координаты X и Y в младшем и старшем байтах соответственно. Извлечь значения X и {328} Y можно с помощью встроенных функций языка Турбо Паскаль Lo и Hi. Схема кодировки такова:
Х1 := Lo( WindMin ) + 1 ; Х2 := Lo( WindMax ) + 1;
Y1 := Hi( WindMin ) + 1 ; Y2 := Hi( WindMax ) + 1;
где X1, Yl, X2, Y2 — координаты диагонали окна (см. рис. 15.6).
Ко всем значениям добавлена единица. Это сделано для совмещения с экранными координатами, у которых начало расположено в верхнем левом углу дисплея и имеет координаты (1,1). В переменных же WindMax; и WindMin все значения отсчитываются от нуля (начало координат — точка (0,0)).
Переменные WindMin и WindMax являются единственным путем программного определения размеров текущего текстового окна. Надо только помнить схему кодировки значения и не забывать добавлять единицу.
15.4.1.3. Процедура ClrScr. Эта процедура очищает текущее текстовое окно, установленное процедурой Window или взятое по умолчанию (т.е. весь экран). При этом окно как бы «закрашивается» текущим цветом фона. Так, например, чтобы сделать поле экрана голубым, необходимо вставить в программу две строки:
TextBackGround(Blue);
ClrScr;
Процедура имеет дополнительный эффект — всегда устанавливает курсор в позицию с координатами (1,1) в текущем текстовом окне.
15.4.1.4. Процедура TextMode( М : Word ). Она переключает текстовые режимы вывода информации на дисплей. Специально для этой процедуры в модуле CRT определены восемь констант (табл. 15.6).
Таблица 15.6
Имя = числовое значение |
Разрешение экрана |
Цветовой режим |
BW40 = 0 |
40x25 |
Черно-белый при цветном адаптере |
CO40 = 1 или C40 = 1 |
40x25 |
Цветной |
BW0 = 2 |
80x25 |
Черно-белый при цветном адаптере |
CO80 = 3 или C80 = 3 |
80X25 |
Цветной |
Mono =7 |
80x25 |
Монохромный на дисплеях MDA/Hercules {329} |
Font8x8 = 256 |
80/40 x 43 80/40 x 50 |
Цветной, адаптер EGA Цветной, адаптер VGA |
Все остальные числовые значения до 65535, не являющиеся суммой одной из указанных констант (0, 1, 2, 3, 7), и Font8x8, включают в процедуре TextMode режим С80. |
||
Эти константы задуманы как параметры процедуры, т.е. предлагается записывать операторы как TextMode (CO80 ), например для включения цветового режима, хотя вполне сработает и менее наглядный эквивалент TextMode (3).
В качестве параметра процедуры TextMode, кроме констант и просто чисел, может быть использована и системная переменная LastMode.
Необходимо сделать несколько замечаний по явно выделяющейся в перечне константе Font8x8. В переводе она означает «шрифт 8x8» и включает режимы большей текстовой вместимости дисплеев с видеоадаптерами EGA и VGA, в которых вместо стандартных шрифтов из матриц 8x14 и 8x16 подключаются более «низкие» шрифты с матрицей 8x8, что дает увеличение числа строк до 43 (EGA) или 50 (VGA). Эта константа является дополнительной, т.е. она должна прибавляться к выбранному коду режима, например:
TextMode (CO80 + Font8x8 )
В этом случае включится цветовой режим CO80 одновременно со сменой разрешающей способности экрана с 80x25 на 80x43(50). Просто вызов TextMode(Font8x8) равносилен вызову TextMode (BW40+Font8x8).
В большинстве случаев режимы BWxx и СОхх не отличаются друг от друга, что всегда имеет место при использовании дисплеев с раздельным управлением цветовыми лучами (так называемые RGB-дисплеи).
Режим Mono, включенный при цветном видеоадаптере, может сбить палитру цветов для их «проявления» на монохромных дисплеях.
Кроме смены режима текстового изображения, команда TextMode обновляет значения системных переменных и производит переустановку цветовых атрибутов. Можно считать, что происходит выполнение следующих действий: {330}
Window( 1, 1, Xmax,Ymax ); {окно делается равным всему экрану}
DirectVideo <-- True; {включается режим прямого вывода }
CheckSnow <-- False; {отключается снятие "снега" (CGA) }
NormVideo; {устанавливается стартовый атрибут}
ClrScr; {экран очищается }
LastMode <-- Параметр; {параметр в TextMode запоминается }
Легко заметить, что «букет» эффектов от команды TextMode не располагает к слишком частому ее использованию в программе. Нормальное место процедуры TextMode — в начале программы и (или) в самом ее конце для включения и выключения режимов работы программы. С процедурой TextMode тесно связана уже упоминавшаяся системная переменная модуля CRT LastMode.
15.4.1.5. Переменная LastMode. В этой переменной сохраняется текстовый режим работы, который установлен последним выполнением процедуры TextMode.
Ее значения (типа Word) соответствуют разрешенным значениям параметров TextMode. Самое первое значение LastMode соответствует режиму, из которого запускалась программа.
С помощью переменной LastMode можно реализовать «хороший тон» работы программы, когда после ее выполнения восстанавливается исходный текстовый режим (рис. 15.8).
USES CRT; { программа использует модуль CRT } VAR StartMode : Word; { здесь сохранится значение режима } BEGIN StartMode := LastMode; { сохранение стартового режима } ... { работа в разных режимах } TextMode ( StartMode ) { восстановление режима } END. |
Рис. 15.8
