a2|aii|Apple II with UltraTerm :\ :bl=^G:\ :bs:\ :cd=^K:\ :ce=^]:\ :cl=^L:\ :cm=^^%r%+ %+ :\ :co#80:\ :cr=^M:\ :do=^J:\ :ho=^Y:\ :kb=^H:\ :kd=^J:\ :kl=^H:\ :kr=^\\:\ :ku=^_:\ :le=^H:\ :li#24:\ :nd=^\\:\ :nl=^J:\ :se=^O:\ :so=^N:\ :up=^_:

В табл. 7- 1 представлен список функций файла termcap с сопоставлением терминалов Apple и vt52. Если какая-либо функция отсутствует у одного или другого терминала, это отмечается словом "нет".

Таблица 7-1
Терминальные возможности и их конкретные значения

Функция Apple II vt52
bl - звуковой сигнал (bell) ^G ^G
bs - возврат на шаг по коду ^H (can backspace with ^H) да да
cd - очистка до конца экрана (clear to end of display) ^K \EJ
ce - очистка до конца строки (clear to end of line) ^] \EK
cl - очистка всего экрана (clear entire screen) ^L \EH\EJ
cm - движение курсора (cursor motion) ^^%r%+ %+ \EY%+ %+
co - число позиций в строке (number of columns in a line) #80 #80
cr - возврат каретки (carriage return) ^M ^M
do - сдвиг на строку вниз (down one line) ^J ^J
ho - курсор в начало экрана(без команды cm) (home cursor) ^Y \EH
kb - код клавиши backspace (sent by backspace key) ^H ^H
kd - код клавиши "стрелка вниз" (sent by down arrow key) ^J \EB
kl - код клавиши "стрелка влево" (sent by left arrow key) ^H \ED
kr - код клавиши "стрелка вправо" (sent by right arrow key) ^\\ \EC
ku - код клавиши "стрелка вверх" (sent by up arrow key) ^_ \EA
le - курсор влево (cursor left) ^H ^H
li - число строк экрана (number of lines per screen) #24 #24
nd - нестирающий пробел (nondestructive space) ^\\ \EC
nl - символ перевода строки (newline character) ^J ^J
pt - наличие аппаратной табуляции (has hardware tabs) нет да
se - обычный экран (end stand out mode (normal)) ^O нет
so - инверсный экран (begin stand out mode (inverse)) ^N нет
sr - прокрутка (scroll reverse) нет \EI
ta - символ табуляции (tab) ^I ^I
up - сдвиг вверх на строку(up a line) нет ^_
Самое интересное здесь, наверное, то, что терминалы vt52 и Apple имеют взаимно обратный порядок указания координат в команде движения курсора. Терминал vt52 воспринимает значения x и y в порядке YX, что является умолчанием для файла termcap. Apple воспринимает их в порядке XY, поэтому в записи файла termcap требуется поменять координаты местами, что указано обозначением %r в функции cm.

Файл termcap позволяет вам спрятать основную информацию о специфических характеристиках терминала (за исключением характеристик, которые могут отсутствовать у терминала, или специальных возможностей, которые не описаны в termcap). Это значит, что вы можете создавать терминально-независимые программы. При этом вам нет необходимости изменять все специфические обращения к терминалу, такие как ESC-последовательности (символы, указывающие терминалу, что передаваемые после них символы (символ) должны интерпретироваться как управляющие коды). Это символы (\E) для терминала vt52 и (^) для Apple.

Наилучший пример - способ использования файла termcap редактором vi. Он начинает выполнять указанную ему функцию, например движение курсора, после чего ставит вопрос: "Какой код функции, которую мы хотим выполнить?". Затем он ищет соответствующую последовательность в той информации, которую предоставляет termcap.

С другой стороны, иногда вам необходимо оптимизировать какую-либо функцию по скорости, заставив ее посылать коды непосредственно на определенный терминал. В этом случае вам опять-таки полезен файл termcap, поскольку вы можете найти необходимую информацию в соответствующем файле termcap, после чего закодировать эту информацию в вашей программе. Это мы и делаем в первой инструментальной программе данной главы - программе 'c'.