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);

          .

          .

          .

Обратите внимание, что, когда память дисплея отображается в пльзовательское пространство, регистры начального адреса адаптера не устанавливаются. Этот начальный адрес может быть установлен двумя способами, так чтобы начальный адрес памяти дисплея соответствовал верхнему левому углу экрана:

  1. Переключите режим с помощью ioctl() ("переключение" может выполняться и на уже установленный режим). Смотрите подраздел "Режимы дисплея" в данном разделе.
  2. Измените начальный адрес с помощью 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
SGRCSI 1 mУстанавливает атрибут яркости. Цвет: устанавливает атрибут интенсивности (меняет color на lt_color). n/a
SGRCSI 4 mУстанавливает подчеркивание. Цвет: без изменения. n/a
SGRCSI 5 mУстанавливает мигание. Цвет: меняет фон с lt_color на color; символ мигает. n/a
SGRCSI 7 mУстанавливает инвертирование. Цвет: инвертирует выбранные цвета. so
SGRCSI 10 mВыбирает первичный шрифт. GE
SGRCSI 11 mВыбирает первый альтернативный шрифт. Разрешает высвечивание символов ASCII с кодами, меньшими 32, в виде символов, зашитых в ПЗУ. n/a
SGRCSI 12 mВыбирает второй альтернативный шрифт. Перед выдачей в виде символов, зашитых в ПЗУ, переключает старший бит расширенного кода ASCII. GS
SGRESC[ 4 mУстанавливает подчеркивание. Цвет: без изменения. n/a
SGRCSI3 C mЦвет: выбор цвета символа C (см. таблицу 1 ниже). n/a
SGRCSI4 C mЦвет: выбор цвета фона C (см. таблицу 1 ниже). n/a
SGRSCI 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Маджента13C. маджента
6Циан14Желтый
7Белый15C.-белый

Обозначение ISOПоследовательностьДействиеКод termcap
n/aCSI=cAУстанавливает цвет бордюра с. c - десятичное значение, выбираемое из таблицы 2, приведенной выше. (Эта последовательность под- держивается не на всякой аппаратуре.) n/a
n/aCSI=p;dBЗадает параметры "звонка" p и d в десятичном виде. p - период звучания в единицах 840.3 наносекунд, а d - длительность звучания в единицах 100 миллисекунд. n/a
n/aCSI=s;eCУстанавливает вид курсора с начальной линией s и последней линией e. n/a
n/aCSI=xDВключает или выключает (x=1 или 0) интенсивность цвета фона. n/a
n/aCSI=xEУстанавливает или сбрасывает (x=1 или 0) бит мигания вместо бита интенсивности фона контроллера дисплея 6845. n/a
n/aCSI=cFУстанавливает нормальный цвет символов с.(с - десятичное число, выбираемое из таблицы 2.) n/a
n/aCSI=c GУстанавливает нормальный фон. (См. таблицу 2.) n/a
n/aCSI=c HУстанавливает инвертированный цвет символов. (См. таблицу 2.) n/a
n/aCSI=c IУстанавливает инвертированный цвет фона. (См. таблицу 2.) n/a
n/aCSI=c JУстанавливает цвет символов в графике. (См. таблицу 2.) n/a
n/aCSI=c KУстанавливает цвет фона в графике. (См. таблицу 2.) n/a
n/aESC[PngОбеспечивает доступ к альтернативному графическому набору символов, который не совпадает с набором "графического режима". Смотрите документацию по десятичным/символьным кодам (Pn) и возможным высвечиваемым символам. n/a
n/aESCQFn'string'Приписывает строку string функциональной клавише Fn. Ограничителями строки ' и ' могут служит любые символы, не встречающиеся в этой строке. Функциональные клавиши нумеруются от 0 до 9 (F1=0, F2=1 и т.д.) n/a
n/aESC[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)