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:
Как показано выше структура 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 должно быть равно номеру экрана, на который осуществляется переключение. Срабатывает только в том случае, если экран был сконфигурирован во время загрузки, в противном случае никакого эффекта не будет.