SCREEN(HW)
НАЗВАНИЕ
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:
- SWAPMONO
- Выбирает монохромный дисплей в качестве устройства вывода видеомонитора.
- SWAPCGA
- Выбирает регулярный цветной дисплей в качестве устройства вывода видеомонитора.
- SWAPEGA
- Выбирает улучшенный цветной дисплей в качестве устройства вывода видеомонитора.
- SWAPVGA
- Выбирает видеографический растровый цветной
дисплей в качестве устройства вывода
видеомонитора.
Чтобы узнать какой тип адаптера дисплея в настоящий момент
присоединен к видеомонитору, вы можете использовать ioctl(2) со
следующим параметром:
- CONS_CURRENT
- Возвращает тип адаптера дисплея присоединенного
в текущий момент к видеомонитору: MONO, CGA, EGA или VGA.
Режимы дисплея
Для изменения видеорежима дисплея могут использоваться следующие
селекторы ioctl s:
- SW_B80x25
- Выбирает чернобелый текстовый режим 80x25 (MONO,
CGA, EGA, VGA).
- SW_C80x25
- Выбирает цветной текстовый режим 80x25 ( CGA,
EGA, VGA).
- SW_BG320
- Выбирает чернобелый графический режим 320x200
(CGA, EGA, VGA).
- SW_CG320
- Выбирает цветной графический режим 320x200
( CGA, EGA, VGA).
- SW_BG640
- Выбирает чернобелый графический режим 640x200
( CGA, EGA, VGA).
- SW_EGAMONO80x25
- Выбирает режим EGA 7 - эмулирует поддержку,
предоставляемую монохромным дисплеем.(EGA, VGA).
- SW_EGAMONOAPA
- Выбирает графический режим EGA F 640x350. (EGA с
мнохромным монитором.)
- SW_ENHMONOAPA2
- Выбирает режим EGA F* (EGA с монохромным
монитором).
- SW_ENHB40x25
- Выбирает черно-белый текстовый режим 40x25 EGA.
(EGA, VGA).
- SW_ENHC40x25
- Выбирает цветной текстовый режим 40x25 EGA.
(EGA, VGA).
- SW_ENHB80x25
- Выбирает черно-белый текстовый режим 80x25 EGA.
(EGA, VGA).
- SW_ENHC80x25
- Выбирает цветной текстовый режим 80x25 EGA.
(EGA, VGA).
- SW_CG320_D
- Выбирает графический режим EGA 320x200 (режим
EGA D.) (EGA, VGA).
- SW_CG640_E
- Выбирает графический режим EGA 640x200 (режим
EGA E.) (EGA, VGA).
- SW_CG640x350
- Выбирает графический режим EGA 640X350 (режим
EGA 10.) (EGA, VGA).
- SW_ENH_CG640
- Выбирает графический режим EGA 10*. (EGA, VGA).
- SW_MCAMODE
- Инициализирует монохромный адаптер .(MONO).
- SW_VGA40x25
- Выбирает цветной режим VGA 40X25 (режим VGA
1+). (VGA).
- SW_VGA80x25
- Выбирает чернобелый режим VGA 80X25 (режим VGA
2+). (VGA).
- SW_VGAM80x25
- Выбирает режим VGA 7+ - эмулирует поддержку,
предоставляемую монохромным дисплеем. (VGA с
мнохромным монитором.)
- SW_VGA11
- Выбирает графический режим VGA 640x480 (режим
VGA 11.) (VGA).
- SW_VGA12
- Выбирает графический режим VGA 640x480 (режим
VGA 12.) (VGA).
- SW_VGA13
- Выбирает графический режим VGA 320x200 (режим
VGA 13.) (VGA).
Попытка переключения в режим, не соответствующий устройству дисплея, повлечет ошибку.
Получение информации о режиме дисплея
Следующие запросы ioctl() обеспечивают получение информации о
текущем режиме дисплея:
- CONS_GET
- Возвращает текущий режим дисплея, установленный
для текущего адаптера дисплея. (Все типы.)
- CGA_GET
- Возвращает текущий режим дисплея, установленный
для графического адаптера дисплея. (Только
CGA.)
- EGA_GET
- Возвращает текущий режим дисплея, установленный
для улучшенного графического адаптера дисплея.
(Только EGA.)
- MCA_GET
- Возвращает текущий режим дисплея, установленный
для монохромного адаптера дисплея. (Только
MONO.)
- VGA_GET
- Возвращает текущий режим дисплея, установленный
для видеографического растрового адаптера
дисплея. (Только VGA.)
Режимы отображения памяти
Процедура ioctl(2) используется для отображения памяти дисплея
различных устройств в область данных пользователя. На 20286-х
машинах ioctl() возвращает селектор памяти дисплея. Макрос sotofar
используется для создания дальнего указателя этого селектора так,
чтобы можно было работать с памятью дисплея. Макрос sotofar
находится в файле /usr/include/sys/sysmacros.h. На 80386-х машинах
ioctl() возвращает символьный указатель (char *).
За детальной информацией о различных дисплеях, адаптерах и
контроллерах обращайтесь к документации по аппаратной части.
Для отображения памяти дисплея можно использовать следующие запросы
ioctl():
- MAPCONS
- Отображает память дисплея адаптера, используемого в
текущий момент, в область пользовательских данных.
(Все типы адаптеров.)
- MAPMONO
- Отображает память дисплея монохромного адаптера,
используемого в текущий момент, в область
пользовательских данных. (Только MONO.)
- MAPCGA
- Отображает память дисплея цветного графического
адаптера, используемого в текущий момент, в
область пользовательских данных. (Только CGA.)
- MAPEGA
- Отображает память дисплея улучшенного графического
адаптера, используемого в текущий момент, в
область пользовательских данных. (Только EGA.)
- MAPVGA
- Отображает память дисплея видеографического
растрового адаптера, используемого в текущий
момент, в область пользовательских данных.
(Только VGA.)
Например, для получения указателя на начало области
пользовательских данных, связанной с памятью дисплея адаптера CGA
можно использовать следующий код:
char far *dp;
int selector;
.
.
.
fd=open("/dev/color",O_WRONLY);
selector=ioctl(fd,MAPCGA,0);
dp=sotofar(selector,0);
.
.
.
Обратите внимание, что, когда память дисплея отображается в
пльзовательское пространство, регистры начального адреса адаптера
не устанавливаются. Этот начальный адрес может быть установлен
двумя способами, так чтобы начальный адрес памяти дисплея
соответствовал верхнему левому углу экрана:
- Переключите режим с помощью ioctl() ("переключение" может
выполняться и на уже установленный режим). Смотрите подраздел
"Режимы дисплея" в данном разделе.
- Измените начальный адрес с помощью in-on-port/out-on-port
(операций через порты) ioctl().
Эти операции могут использоваться также для определения текущего
значения регистра начального адреса, а затем для установки
указателя на заданное смещение в отображенном пространстве данных.
Порт ввода/вывода графического адаптера
Вы можете использовать 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):
- MGAIO
- Чтение или запись байта в порт монохромного
адаптера. (Только MONO.)
- CGAIO
- Чтение или запись байта в порт цветного
графического адаптера. (Только CGA.)
- EGAIO
- Чтение или запись байта в порт улучшенного
графического адаптера. (Только EGA.)
- VGAIO
- Чтение или запись байта в порт видеографического
растрового адаптера. (Только VGA.)
- CONSIO
- Чтение или запись байта в порт текущего
графического адаптера. (Все типы адаптеров.)
Для чтения байта из любого порта графического адаптера присвойте
величине 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):
- GETKEY
- Получает текущее определение функциональной клавиши.
Номер этой клавиши должен быть записан в keynum.
Строка, приписанная данной клавише, будет возвращена
в keydef, а длина этой строки - в flen, когда ioctl
завершит свою работу.
- SETKEY
- Приписывает данную строку функциональной клавише.
Номер этой клавиши должен быть записан в keynum, а
длина строки (количество символов) - в переменную
flen.
Экранные управляющие последовательности
Следующие символьные последовательности определяются стандартом
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.
Таблица 1
С | Цвет |
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 |
Следующие коды цветов и последовательности составляют
дополнительные управляющие последовательности.
Таблица 2
С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)