НАЗВАНИЕ
screen - файлы tty[01-n], color, monochrome, ega, vga
- адаптер дисплея и видеомонитор.
ОПИСАНИЕ
Файлы устройств tty[01-n] обоеспечивают символьный ввод/вывод между
системой, дисплеем видеомонитора и клавиатурой. Каждый из этих
файлов соответствует отдельному устройству телетайпа. Хотя
количество экранов ограничивается 12, точное число (n) доступных
экранов зависит от объема памяти компьютера. По умолчанию экраны
устанавливаются в режим терминала ASCII 80x25.
Сообщения ядра системы об ошибках записываются в /dev/console, обычно соответствующему текущему экрану. Если по умолчанию для записи системных сообщений об ошибках установлено устройство вывода /dev/console, и используемый экран переключается в графический режим, то сообщения на консоли не высвечиваются. Когда видеоустройство возвращается в текстовый режим, то высвечивается соответствующее информационное сообщение, а текст сообщений об ошибках может быть восстановлен из файла /usr/adm/messages.
Хотя все устройства tty[01-n] могут быть открыты одновременно, только одно из них может быть активным в данный момент. Активное устройство формирует свой экран и перехватывает на себя управление клавиатурой. Будет ошибкой пытаться получить доступ к файлам color, monochrome или ega, если отсутствует соответствующий адаптер или нет связанного с ним экрана в многоэкранном режиме.
Для переключения на следующий экран введите код Ctrl-PrtSc с помощью клавиш Ctrl и PrtSc. Любой активный экран может быть выбран введением кода alt-Fn, где Fn - одна из функциональных клавиш. Например, F1 относится к устройству tty01.
Режимы управления
Для изменения режима дисплея видеомонитора откройте файл,
соответствующий этому режиму. Например, для переключения выдачи на
дисплей CGA программа должна открыть файл /dev/color и использовать
отображение селектора ioctl s, возвращенного после вызова open
(команды открытия), на файловый дескриптор. Применение файлов
устройств поможет обеспечить программную совместимость в будущем.
Экраны могут быть назначены различным адаптерам (в многоадаптерных системах) с использованием следующих ioctl s:
Чтобы узнать какой тип адаптера дисплея в настоящий момент присоединен к видеомонитору, вы можете использовать ioctl(2) со следующим параметром:
Режимы дисплея
Для изменения видеорежима дисплея могут использоваться следующие
селекторы ioctl s:
Попытка переключения в режим, не соответствующий устройству дисплея, повлечет ошибку.
Получение информации о режиме дисплея
Следующие запросы ioctl() обеспечивают получение информации о
текущем режиме дисплея:
Режимы отображения памяти
Процедура ioctl(2) используется для отображения памяти дисплея
различных устройств в область данных пользователя. На 20286-х
машинах ioctl() возвращает селектор памяти дисплея. Макрос sotofar
используется для создания дальнего указателя этого селектора так,
чтобы можно было работать с памятью дисплея. Макрос sotofar
находится в файле /usr/include/sys/sysmacros.h. На 80386-х машинах
ioctl() возвращает символьный указатель (char *).
За детальной информацией о различных дисплеях, адаптерах и контроллерах обращайтесь к документации по аппаратной части.
Для отображения памяти дисплея можно использовать следующие запросы ioctl():
Например, для получения указателя на начало области пользовательских данных, связанной с памятью дисплея адаптера CGA можно использовать следующий код:
char far *dp; int selector; . . . fd=open("/dev/color",O_WRONLY); selector=ioctl(fd,MAPCGA,0); dp=sotofar(selector,0); . . .
Обратите внимание, что, когда память дисплея отображается в пльзовательское пространство, регистры начального адреса адаптера не устанавливаются. Этот начальный адрес может быть установлен двумя способами, так чтобы начальный адрес памяти дисплея соответствовал верхнему левому углу экрана:
Эти операции могут использоваться также для определения текущего значения регистра начального адреса, а затем для установки указателя на заданное смещение в отображенном пространстве данных.
Порт ввода/вывода графического адаптера
Вы можете использовать ioctl(2) для записи байта в порт
графического адаптера или чтения байта из этого порта. Параметр arg
функции ioctl использует следующую структуру данных io_arg:
struct port_io_arg { struct port_io_struct args[4]; };
Как показано выше структура io_arg указывает на массив из четырех структур данных port_io. Структура port_io имеет следующий формат:
struct port_io_struct { char dir; /*direction flag (in vs. out)*/ unsigned_int port; /*port address*/ char data; /*byte of data*/ };
Для одного вызова ioctl вы можете задать одну, две, три или четыре структуры port_io_struct. Величина dir может принимать значение IN_ON_PORT для задания чтения байта из порта графического адаптера или значение OUT_ON_PORT для записи байта в этот порт. Величина port является целым числом, задающим адрес нужного порта графического адаптера. Величина data содержит байт, принимаемый из порта или посылаемый в этот порт.
Если вы не используете ни одну из структур port_io, присвойте величине port нулевое значение и опустите неиспользуемые структуры в конце массива. Адреса и назначение портов различных адаптеров смотрите в документации по аппаратной части.
Для работы с портом графического адаптера вы можете использовать следующие команды ioctl(2):
Для чтения байта из любого порта графического адаптера присвойте величине dir значение IN_ON_PORT, а величине port - адрес порта графического адаптера. Считанный байт будет возвращен в переменную data.
Для записи байта присвойте величине dir значение OUT_ON_PORT, величине port - адрес порта графического адаптера, а величине data - байт, который вы хотите записать в порт.
Функциональные клавиши
ioctl(2) может использоваться для задания или для получения
текущего назначения функциональных клавиш. При этом параметр arg
функции ioctl использует следующую структуру данных fkeyarg:
struct fkeyarg { unassigned int keynum; char keydef [MAXFK]; /*Comes from char flen; ioctl.h via comcrt.h*/ }
Для получения или назначения определений функциональных клавиш вы можете использовать следующие запросы ioctl(2):
Экранные управляющие последовательности
Следующие символьные последовательности определяются стандартом
ANSI X3.64-1979 и могут использоваться для управления и модификации
экрана дисплея. Для достижения желаемого эффекта каждое Pn нужно
заменить соответствующим десятичным кодом ASCII. Последняя колонка
содержит коды termcap(M), где "n/a" означает "не применяется".
Использование в управляющей последовательности 7- и 8-разрядных символов является допустимым для каждого определенного действия. Например, команда ANSI ED может быть вызвана с помощью последовательности "ESC[ Pn j" (0x1b-0x5b-Pn-0x4a, 7-разрядные символы) или последовательности "CSI Pn j" (0x9b-Pn-0x4n, 8-разрядные символы).
Обозначение ISO | Последовательность | Действие | Код termcap |
---|---|---|---|
ED (Erase in Display) | CSI pN J | Очищает весь дисплей или его часть. Pn=0: очистка с активной позиции до конца дисплея. Pn=1: очистка от начала дисплея до активной позиции. Pn=2: очистка всего дисплея. | cd |
EL (Erase in Line) | CSI Pn K | Очищает всю строку или ее часть. Pn=0: очистка с активной позиции до конца строки. Pn=1: очистка от начала строки до активной позиции. Pn=2: очистка всей строки. | ce |
ECH (Erase Character) | CSI Pn X | Стирает символы Pn. n/a | |
CBT (Cursor Backward Tabulation) | CSI Pn Z | Передвигает активную позицию назад на Pn табуляций. | bt |
SU (Scroll Up) | CSI Pn S | Прокручивает экран вверх на Pn строк, вставляя снизу пустые строки. | sf |
SD (Scroll Down) | CSI Pn T | Прокручивает экран вниз на Pn строк, вставляя сверху пустые строки. | sr |
CUP (Cursor Position) | CSI P1;P2 H | Перемещает активную позицию на координату P1 по вертикали и P2 по горизонтали. | cm |
HVP (Horizontal & Vertica Position) | CSI P1;P2 f | Перемещает активную позицию на координату P1 по вертикали и l P2 по горизонтали. | n/a |
CUU (Cursor Up) | CSI Pn A | Перемещает активную позицию на Pn строк вверх. | up(ka) |
CUD (Cursor Down) | CSI Pn B | Перемещает активную позицию на Pn строк вниз. | do(kd) |
CUF (Cursor Forward) | CSI Pn C | Перемещает активную позицию на Pn позиций вправо. | nd(kr) |
CUB (Cursor Backward) | CSI Pn D | Перемещает активную позицию на Pn позиций назад. | bs(kl) |
HPA (Horizontal Position Absolute) | CSI Pn ` | Перемещает активную позицию на колонку Pn. | n/a |
HPR (Horizontal Position Relative) | CSI Pn a | Перемещает активную позицию на Pn символов вправо. | n/a |
VPA (Vertical Position Absolute) | CSI Pn d | Перемещает активную позицию на строку Pn. | n/a |
VPR (Vertical Position Relative) | CSI Pn e | Перемещает активную позицию на Pn строк вниз. | n/a |
IL (Insert Line) | CSI Pn L | Вставляет Pn новых пустых строк. | al |
ICH (Insert Character) | CSI Pn @ | Вставляет Pn пустых позиций для Pn символов. | ic |
DL (Delete Line) | CSI Pn M | Удаляет Pn строк. | dl |
DCH (Delete Character) | CSI Pn P | Удаляет Pn символов. | dc |
CPL (Cursor to Previous Line) | CSI Pn F | Перемещает активную позицию на Pn строк вверх и на начало строки. | n/a |
CNL (Cursor to Next Line) | CSI Pn E | Перемещает активную позицию на Pn строк вниз и на начало строки. | n/a |
CGR (Select Graphic Rendition) | CSI 0 m | Сброс ярких, мигающих, пустых, подчеркнутых и инвертированных символов. Цвет: восстанавливает нормальные установки цветов. | n/a |
SGR | CSI 1 m | Устанавливает атрибут яркости. Цвет: устанавливает атрибут интенсивности (меняет color на lt_color). | n/a |
SGR | CSI 4 m | Устанавливает подчеркивание. Цвет: без изменения. | n/a |
SGR | CSI 5 m | Устанавливает мигание. Цвет: меняет фон с lt_color на color; символ мигает. | n/a |
SGR | CSI 7 m | Устанавливает инвертирование. Цвет: инвертирует выбранные цвета. | so |
SGR | CSI 10 m | Выбирает первичный шрифт. | GE |
SGR | CSI 11 m | Выбирает первый альтернативный шрифт. Разрешает высвечивание символов ASCII с кодами, меньшими 32, в виде символов, зашитых в ПЗУ. | n/a |
SGR | CSI 12 m | Выбирает второй альтернативный шрифт. Перед выдачей в виде символов, зашитых в ПЗУ, переключает старший бит расширенного кода ASCII. | GS |
SGR | ESC[ 4 m | Устанавливает подчеркивание. Цвет: без изменения. | n/a |
SGR | CSI3 C m | Цвет: выбор цвета символа C (см. таблицу 1 ниже). | n/a |
SGR | CSI4 C m | Цвет: выбор цвета фона C (см. таблицу 1 ниже). | n/a |
SGR | SCI 8 m | Устанавливает мигание. | n/a |
Следующие коды цветов и последовательности определены Международной организацией по стандартизации ISO DP 6429.
С | Цвет |
---|---|
0 | Черный |
1 | Красный |
2 | Зеленый |
3 | Желтый |
4 | Синий |
5 | Маджента |
6 | Циан |
7 | Белый |
Обозначение ISO | Последовательность | Действие | Код termcap |
---|---|---|---|
SM (Set Mode) | ESC[2h | Блокировка клавиатуры. Игнорирует ввод с клавиатуры, пока она не будет разблокирована. Символы не сохраняются. | n/a |
MC (Media Copy) | ESC[2i | Содержимое экрана пересылается на главный адаптер. Текущее содержимое экрана посылается прикладной программе. | n/a |
RM (Reset Mode) | ESC[2l | Снимает блокировку клавиатуры и восстанавливает прием ввода с клавиатуры. | n/a |
Следующие коды цветов и последовательности составляют дополнительные управляющие последовательности.
Сn | Цвет | Cn | Цвет |
---|---|---|---|
0 | Черный | 8 | Серый |
1 | Красный | 9 | С.-голубой |
2 | Зеленый | 10 | С.-зеленый |
3 | Желтый | 11 | С.-циановый |
4 | Синий | 12 | С.-красный |
5 | Маджента | 13 | C. маджента |
6 | Циан | 14 | Желтый |
7 | Белый | 15 | C.-белый |
Обозначение ISO | Последовательность | Действие | Код termcap |
---|---|---|---|
n/a | CSI=cA | Устанавливает цвет бордюра с. c - десятичное значение, выбираемое из таблицы 2, приведенной выше. (Эта последовательность под- держивается не на всякой аппаратуре.) | n/a |
n/a | CSI=p;dB | Задает параметры "звонка" p и d в десятичном виде. p - период звучания в единицах 840.3 наносекунд, а d - длительность звучания в единицах 100 миллисекунд. | n/a |
n/a | CSI=s;eC | Устанавливает вид курсора с начальной линией s и последней линией e. | n/a |
n/a | CSI=xD | Включает или выключает (x=1 или 0) интенсивность цвета фона. | n/a |
n/a | CSI=xE | Устанавливает или сбрасывает (x=1 или 0) бит мигания вместо бита интенсивности фона контроллера дисплея 6845. | n/a |
n/a | CSI=cF | Устанавливает нормальный цвет символов с.(с - десятичное число, выбираемое из таблицы 2.) | n/a |
n/a | CSI=c G | Устанавливает нормальный фон. (См. таблицу 2.) | n/a |
n/a | CSI=c H | Устанавливает инвертированный цвет символов. (См. таблицу 2.) | n/a |
n/a | CSI=c I | Устанавливает инвертированный цвет фона. (См. таблицу 2.) | n/a |
n/a | CSI=c J | Устанавливает цвет символов в графике. (См. таблицу 2.) | n/a |
n/a | CSI=c K | Устанавливает цвет фона в графике. (См. таблицу 2.) | n/a |
n/a | ESC[Png | Обеспечивает доступ к альтернативному графическому набору символов, который не совпадает с набором "графического режима". Смотрите документацию по десятичным/символьным кодам (Pn) и возможным высвечиваемым символам. | n/a |
n/a | ESCQFn'string' | Приписывает строку string функциональной клавише Fn. Ограничителями строки ' и ' могут служит любые символы, не встречающиеся в этой строке. Функциональные клавиши нумеруются от 0 до 9 (F1=0, F2=1 и т.д.) | n/a |
n/a | ESC[Pnz CSIPnz | Pn должно быть равно номеру экрана, на который осуществляется переключение. Срабатывает только в том случае, если экран был сконфигурирован во время загрузки, в противном случае никакого эффекта не будет. | n/a |
ФАЙЛЫ
/dev/console /dev/tty[02-n] /dev/color /dev/monochrome /dev/ega /dev/vga
СМ. ТАКЖЕ
console(5), ioctl(2), keyboard(HW), keymap(5), mapkey(8),
mapchan(5), multiscreen(5), setcolor(1), stty(1), systty(5),
vidi(1), termcap(5), tty(5)