Модуль crt | Авторская платформа Pandia.ru
Turbo Pascal | Эта статья также находится в списках: Белый | Постоянная ссылка
CRT– (англ. – Cathode-Ray Tube – электронно-лучевая трубка) обеспечивает управление вводом информации с клавиатуры и вывод ее на экран в текстовом режиме, взаимодействие с таймером и звуковым устройством со встроенным динамиком.
Текстовый режим – экономичный режим использования видеопамяти, в котором наименьшей единицей изображения является не пиксел, а символ целиком.
Скан-код – выдаваемый клавиатурой сигнал при нажатии (отпускании) клавиши. DOS, обработав сигнал, помещает в специальный буфер клавиатуры результат этой обработки в виде кодов нажатия клавиш. Коды, соответствующие клавишам буквенно-цифрового набора (с учетом регистра), подчинены кодировке ASCII.
Пиксел – (англ.- Picture Element –PixEl) – светящаяся точка, образующаяся при соударении пучка электронов с поверхностью экрана, покрытой люминофором.
Знакоместо – единица изображения в текстовом режиме, представляющая собой матрицу определенного размера для размещения символа. Процесс прорисовки каждого символа берет на себя операционная система.
Модуль CRT представляет собой библиотеку функций и процедур, предназначенных для увеличения возможностей текстового ввода \ вывода данных. Для подключения модуля CRT после оператора PROGRAM необходимо поместить предложение:
Процедуры и функции модуля предназначены для:
1 Управления клавиатурой, в том числе считывания кода символа нажатой клавиши с высвечиванием символа на экране и без высвечивания;
2 Управления текстовым экраном, в том числе:
? формирования окна;
? управления положением курсора и определения координат положения курсора;
? определения цвета фона и цвета символов;
3 Управления принтером;
4 Управление звуковым сигналом.Табл. 9. Процедуры и функции имодуля CRT
ИМЯ | НАЗНАЧЕНИЕ | Запись |
1 Процедуры задания режима работы | ||
TextMode | Задание текстового режима (см. табл.14.1) | TextMode(Mode: Word) |
2 Процедуры управления цветом | ||
HighVideo | Задание высокой яркости символов | HighVideo |
LowVideo | Задание малой яркости символов | LowVideo |
NormVideo | Задание исходной яркости символов | NormVideo |
TextBackground | Задание цвета фона (см. табл. 9.2) | TextBackground (Color: byte) |
TextColor | Задание цвета символов (см. табл. 9.2) | TextColor (Color: byte) |
3 Процедуры работы с экраном | ||
ClrScr | Очистка экрана и установка курсора в левый верхний угол | ClrScr |
GoToXY | Перемещение курсора в заданную позицию | GoToXY(X, Y: Byte) |
InsLine | Добавление пустой строки на экране | InsLine |
Window | Определяет текстовое окно на экране | Window(X1,Y1, X2, Y2: Byte) |
4 Процедуры управления звуком | ||
Sound | Заставляет динамик звучать с нужной частотой | Sound(F: Word) |
NoSound | Отключает динамик | NoSound |
5 Процедуры прочие | ||
Delay | Задержка выполнения программы в миллисекундах | Delay(T: Word) |
AssignCrt | Связь текстового файла с устройством CRT | AssignCrt(F: Text) |
6 Функции работы с экраном | ||
WhereX | Текущая координата Х курсора | WhereX: Byte |
WhereY | Текущая координата Y курсора | WhereY: Byte |
7 Функции работы с клавиатурой | ||
KeyPressed | Проверка нажатия клавиши | KeyPressed: Boolean |
ReadKey | Чтение символа с клавиатуры | ReadKey: Char |
Табл. 9.1. Текстовые режимы модуля CRT
Наименование константы MODE | Значение константы MODE | Кол-во строк * символов в строке | Тип адаптера | Вид вывода |
BW40 | 0 | 25*40 | Цветной | Черно-белый |
Со40 | 1 | 25*40 | Цветной | Цветной |
BW80 | 2 | 25*80 | Цветной | Черно-белый |
Со80 | 3 | 25*80 | ||
Mono | 7 | 25*80 | Mоно | Черно-белый |
Font8x8 | +256 | 50 строк | Цветной | Цветной |
Табл.9.2. Коды цветов
Имя | Константа цвета | Цвет |
Black | 0 | Черный |
Blue | 1 | Синий |
Green | 2 | Зеленый |
Cyan | 3 | Бирюзовый |
Red | 4 | Красный |
Magenta | 5 | Фиолетовый |
Brown | 6 | Коричневый |
LightGray | 7 | Светло-серый |
DarkGray | 8 | Темно-серый |
LightBlue | 9 | Светло-синий |
LightGreen | 10 | Светло-зеленый |
LightCyan | 11 | Светло-бирюзовый |
LightRed | 12 | Розовый |
LightMagenta | 13 | Сиреневый |
Yellow | 14 | Желтый |
White | 15 | Белый |
Blink | 128 | Мерцание символа |
Твитнуть Правообладателям | Сообщить о нарушении |
Архивы pandia. ru | |
Алфавит: А • Б • В • Г • Д • Е • З • И • К • Л • М • Н • О • П • Р • С • Т • У • Ф • Ц • Ч • Ш • Э Я |
|
Приложение 1.
Турбо Паскаль. Модуль crtТаблица П1.1. Константы режимов работы
Таблица П1.2. Константы цветов
Таблица П1.3. Процедуры и функции
Приложение 2. Турбо Паскаль. Модуль graph
Таблица П2.1. Коды драйверов графических устройств
Таблица П2.2. Константы графических режимов
Примечание. Палитра С0 включает в себя следующие цвета: светло-зеленый, розовый и желтый; палитра С1 — светло-голубой, светло-фиолетовый и белый; палитра С2 — зеленый, красный и коричневый; палитра С3 — голубой, фиолетовый и светло-серый.
Таблица П2.3. Коды цветов
Таблица П2.4. Коды линийТаблица П2.5. Константы орнамента заполнения
(для процедуры SetFillStyle)
Таблица П2.6. Процедуры и функции
Список литературы
Абрамов В.Г., Трифонов Н.П., Трифонова Г.Н. Введение в язык Паскаль. — М.: Наука, 1988.
Бондарев В.М., Рублинецкий В.И., Качко Е.Г. Основы программирования. —Харьков: Фолио, Ростов н/Д: Феникс, 1997.
Ван Тассел Д. Стиль, разработка, эффективность, отладка и испытание программ. — М.: Мир, 1981.
Вирт Н. Алгоритмы и структуры данных. — М.: Мир, 1989.
Грогоно П. Программирование на языке Паскаль. —М.: Мир, 1982.
Дагене В. А., Григас Г. К., Аугутис К.Ф. 100 задач по программированию. — М.: Просвещение, 1993.
Епашников A.M., Епашников В.А. Программирование в среде Турбо Паскаль 7.0. — М.: МИФИ, 1994.
Заварыкин В.М., Житомирский В.Г., Лапчик М.П. Основы информатики и вычислительной техники. — М.: Просвещение, 1989.
Задачи по программированию / С. А. Абрамов, Г. Г. Гнездилова, Е. Н. Капустина, М. И. Селюн. — М.: Наука, 1988.
Зубов В. С. Программирование на языке Turbo Pascal (версии 6.0 и 7.0). — М.: Информационно-издательский дом «Филинъ», 1997.
3yeв Е. А. Практическое программирование на языке Turbo Pascal 6.0, 7.0. — М.: Радио и связь, 1994.
Информатика. Задачник-практикум: В 2 т. / Под ред. И. Г. Семакина, Е.К.Хеннера. — М.: Лаборатория Базовых Знаний, 1999.
Йенсен К. , Вирт Н. Паскаль — руководство для пользователей и описание языка. — М.: Мир, 1982.
Касаткин В. Н. Информация. Алгоритмы. ЭВМ. — М.: Просвещение, 1991.
Культин Н.Б. Программирование в Turbo Pascal и Delphi.— СПб.: BHV — Санкт-Петербург, 1998.
Ляхович В.Ф. Руководство к решению задач по основам информатики и вычислительной техники. — М.: Высшая школа, 1994.
Марченко А.И., Марченко Л.А. Программирование в среде Turbo Pascal 7.0 / Под ред. В. П.Тарасенко. — Киев: ВЕК+; М.: Бином Универсал, 1998.
Миков А. И. Информатика. Введение в компьютерные науки. — Пермь: Изд-во ПГУ, 1998.
[fpc-pascal] CRT-модуль и терминал Windows
У меня была аналогичная проблема при попытке представить деревья с использованием расширенного ASCII. символы. Мое решение состояло в том, чтобы адаптировать представление моих символов к UTF8. Чтобы понять, что я имею в виду, вы можете взглянуть на https://github.com/svpantazi/каталан-моноид-генератор. generate_catalan_monoid.pp содержит функцию PrintASCIITree, которая выполняет очевидный. Папка примеров содержит фактические выходные данные (например, examples/n_5_output_example.txt) деревьев ASCII, таких как это (я вставил это здесь, но сообщение может не сохраниться):
0─┬─1─┬─12───123 │ └─13───132 ├─2─┬─21───213───2132 │ └─23 └─3───32───321 В пятницу, 13 октября 2017 г., в 9:39, Джеймс Рихтерс < [email protected]> написал: > >Я хочу создать консольное приложение, использующее символы рисования прямоугольников из > юникод. До использования блока CRT все было в порядке, и моя программа могла рисовать > > >стол красиво. Но как только я поставил блок ЭЛТ, эти символы стали > мусорки. Но странно, это происходит только на терминале Windows (win10). > > >Я попробовал одну и ту же программу на Mac и Linux, используя каждый блок ЭЛТ, и > все нормально ходят. Мне нужен блок ЭЛТ, чтобы сделать мою консольную программу более > > интерактивный (т. е. позиционирование курсора, работа с клавиатурой, цвет текста, > и тд). > > > > > > >Итак, что не так с блоком ЭЛТ в Windows? Кто-нибудь может объяснить > Странное поведение и как решить проблему? > > > > Из моих собственных неудачных попыток заставить рамочные символы работать с обоими > crt и ptccrt Я могу подтвердить, что они не работают в Windows, но я > на самом деле очень удивлен, узнав, что он работает на Linux и Mac. Возможно > есть возможность починить блок ЭЛТ на винде. > > > > На мой взгляд блок ЭЛТ ДОЛЖЕН рисовать коробки с ОРГАНИЗАЦИЕЙ > Расширенные коды ASCII, а не Unicode, по крайней мере, по умолчанию. > > Блок ЭЛТ должен быть совместим с оригинальным турбопаскалем > единица ЭЛТ, а в турбопаскале, если вы напишете ln(Chr(201)) вы получите верхний левый > угол, а не забавная буква E. Возможно, можно было бы использовать > символы Юникода, но отображение правильных символов ASCII должно > по умолчанию. К сожалению, это тоже не работает правильно… если это происходит > чтобы использовать Юникод, он должен использовать весь набор символов, если не собирается > сделайте это, тогда он должен использовать расширенный ASCII в качестве исходного блока CRT > сделал. > > > > Странно то, что моя древняя программа на турбо паскале рисует ACSII > блоки, отлично выглядит в текстовом режиме IDE FPC (который сам использует блок > символов!) но при запуске программы, даже находясь в той же консоли > окно, в котором сейчас работает IDE текстового режима FPC, я получаю юникод > персонажи. Если я нахожусь в текстовом режиме IDE и ввожу последовательность символов > из ALT+201 я получаю символ в верхнем правом углу, а не символ Unicode… но > запускаю программу, и я получаю Unicode sysmbol. Если я не использую ЭЛТ > блок, я действительно получаю полный набор символов Unicode, но тогда вы не можете > использовать позиционирование курсора и т. д. > > > > Я попытался заменить символы ASCII в своей программе на > Символы Юникода, но я не могу, потому что они так далеко в таблице, > они превышают ограничение в 255 символов для ЭЛТ-устройства; Например > Символ в верхнем правом углу раньше был #201, теперь это #9556. Я не могу > найти способ отобразить #9556 на ЭЛТ, я пробовал > Writeln(Chr(9556)) но chr() имеет ограничение 255, и я пробовал только > Writeln(#9556), и пока он компилируется и запускается, он не производит > правильный характер.. У меня есть ощущение (но не проверял), что он держит > Циклический цикл вокруг первых 256 символов, если вы используете что-то выше 255….. > почти уверен, что символ здесь определяется как байт. > > > > Я прикрепил скриншоты и пример программы, демонстрирующий это > неприятная ситуация. Я просто отказался от нескольких действительно хороших > консольные приложения из-за этого. > > > > Боксовые персонажи отличные, не понимаю, почему стало так сложно > включить их. Но я очень надеюсь, что решение может быть найдено, когда я > иметь отчеты, которые я отображаю в окнах консоли, даже в моих графических программах > было бы гораздо лучше, если бы я мог снова использовать символы рамки, так как я > использовать консольное окно, в то время как графическое окно также открыто. > > > > > > Джеймс > > _______________________________________________ > список рассылки fpc-pascal — [email protected] > http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal >
_______________________________________________ Список рассылки fpc-pascal — [email protected] http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
ibm pc — Почему приложения MS-DOS, созданные с использованием Turbo Pascal, не запускались с ошибкой деления на ноль на более быстрых системах?
Программы Turbo Pascal начинаются с калибровки контура задержки (чтобы функция Delay
знала, сколько нужно вращать для достижения определенной задержки). Калибровка подсчитывает, сколько раз определенный цикл выполнялся в течение 55 мс (что можно измерить с помощью прерывания таймера ПК с его настройкой по умолчанию), а затем делит количество циклов на 55, чтобы Задержка
может затем быть занята ожиданием с шагом в миллисекунду. На быстрых процессорах с тактовой частотой 200 МГц и выше (на процессорах Intel) цикл выполняется слишком много раз, и деление переполняется. ЦП выдает ошибку «переполнение деления», о которой среда выполнения Pascal сообщает как об ошибке деления на ноль.
Есть довольно много сайтов, которые объясняют это и предоставляют патчи; например, страница Дж. Р. Стоктона по этой теме, на которой написано
.Модуль Borland Crt включен в библиотеки TURBO.TPL и TPP.TPL; его процедура инициализации будет скомпонована, если Crt указан в предложении uses. Проблема заключается в инициализации Crt.Delay, но она появится, если цитируется модуль Crt, независимо от того, вызывается ли Delay или любая другая процедура Crt.
Во время инициализации модуля Crt цикл, выполняемый в течение 55 мс, увеличивает значение счетчика. До и в TP6 это был 16-битный счетчик, и он с радостью переполнялся на ПК выше 20 МГц, что приводило к последующим неправильным задержкам.
Счетчик в TP7 и BP7 теперь 32-разрядный и не должен переполняться, пока частота процессора не достигнет 100 ГГц. Но счет делится на 55, и если результат не умещается в 16-битное слово, ЦП выдает ошибку «переполнение деления». Borland сообщает об этом как об ошибке «деления на ноль», Runtime Error 200, поскольку единственный способ, с помощью которого пользовательский код Pascal может вызвать переполнение при делении, — это деление на ноль.
(Как указал Питер Кордес, последнее предложение неверно; легко вызвать переполнение при делении, используя целочисленное деление в Паскале. Однако среда выполнения Borland сообщает об этом как об ошибке «деления на ноль».)
Возможно, лучший fix состоит в том, чтобы исправить модуль Crt и перекомпоновать программу Pascal. Существуют различные подходы; например, увеличение места, выделенного для счетчика задержки в CRT.ASM
:
DelayCnt DD ?
(вместо DW
), а затем изменить процедуру калибровки, чтобы использовать оба слова вместо одного слова.
Внесение исправлений в существующие исполняемые файлы не так уж очевидно, поскольку фиксированные процедуры калибровки занимают больше места, чем исходные, но это именно то, что делает патч Андреаса Бауэра (доступный на сайте SAC, Garbo или manassehkatz): он сократил более ранний код инициализации, чтобы освободить место для его фиксированной процедуры калибровки, как подробно описано в файле README
в его архиве. Патч Андреаса не увеличивает DelayCnt
размер, он только гарантирует, что процедура калибровки не переполнится; в результате на быстрых процессорах подпрограмма Delay
может ждать не так долго, как предполагалось.
Другой подход используется патчем c’t: он основан на сокращении другой функции в Crt ( Break
), чтобы освободить место для улучшенной версии Delay
, и настройке делителя в процедуре калибровки так, чтобы деление больше не переливается. Результат процедуры калибровки в этом сценарии не используется.
Существует также ряд TSR, которые решают проблему во время выполнения без установки исправлений; одно существенное отличие заключается в том, что большинство (если не все) таких TSR не будут работать с программами на Turbo Pascal в защищенном режиме. Здесь также существует ряд различных подходов. PROT200
полагается на обработку ошибки деления на ноль в TSR вместо того, чтобы позволить коду Borland обрабатывать ее.