Терминалы, клавиатура, национализация
Терминалы
clip-программы способны работать на любом типе терминалов и эмуляторов.
Описание "способностей" терминала читается из terminfo, а если есть
переменная окружения TERMCAP то из файла, на который указывает TERMCAP.
Но, в дополнение к этим описателям, имеются расширенные возможности
указать clip-программе специальные возможности терминала.
Эти описатели лежат в каталоге $CLIPROOT/term и выглядят примерно так
файл term/linux-stelnet
# работать с описателем терминала linux в terminfo
+TERM=linux
# способен ли терминал выдавать скан-коды вместо ansi- кодов
CLIP_SCANMODE=terminal
# какой последовательностью можно включить режим передачи скан-кодов
CLIP_SCANSTART=\033[S
# какой последовательностью можно выключить режим передачи скан-кодов
CLIP_SCANSTOP=\033[R
# описание раскладки клавиатуры для клавиатурного драйвера clip-программы
CLIP_KEYMAP=rustelnet
# кодировка clip-программы // unicode - file
CLIP_HOSTCS=koi8-r
# кодировка клиентской части // unicode - file
CLIP_CLIENTCS=cp866
# символы одинарной псевдографики
CLIP_LINECHARS=\200\201\204\211\205\206\212\207\202\210\203
# символы двойной псевдографики
CLIP_DLINECHARS=\240\241\253\273\256\261\276\265\245\270\250
# таблица перекодировки цветов
CLIP_COLORMAP=0123456789ABCDEF
Все "продвинутые" названия терминалов надо прописать в ваших
terminfo / termcap, а, по сути, просто залинковать подходящий описатель (linux)
на новое имя.
Перекодирование выдаваемой информации на терминал производится по
стандартным unicode - таблицам из поставки linux, находящиеся в
каталоге /usr/share/consoletrans.
Необходимые описатели надо распаковать и выложить в каталог $CLIPROOT/charsets.
Часть описателей имеется и в дистрибутиве clip.
Клавиатура
clip-программы имеют два драйвера клавиатуры:
ansi+модификаторы - т.е. от терминала принимаются ansi-коды нажатых клавиш,
а для расширенных возможностей используются два модификатора - CtrlJ,
CtrlK.
Модификаторы изменяют для clip-программы код нажатой клавиши. Например:
нажать клавишу 1 - получится код 49, если нажать CtrlJ,1 - получится код 376,
если нажать CtrlK,1 получиться тоже 376. Модификатор CtrlJ работает как
нажатый Alt, а модификатор CtrlK как нажатый Shift, но не на всех клавишах.
Более продвинутый режим клавиатуры - если терминал умеет передавать на
хост скан-коды нажатых и отпущенных клавиш. В данном случае подключается
драйвер клавиатуры, аналогичный русификатору в DOS. Получает скан-коды,
обрабатывает их, помещает в буфер клавиатуры, заполняет и поддерживает
статусы управляющих клавиш.
В таком варианте доступны все сочетания клавиш, если правильно
сделать keymap-описание. Вплоть до возможности набирать код символа через
зажатый "alt+код_набранный_на_цифровой_клавиатуре"!
Описание клавиатуры в данном случае используется такое же, как и описание
консольной раскладки - /usr/share/keymaps/* .
Для того чтобы clip-программы смогли делать то же самое, надо взять подходящий
вам keymaps, направить на него $CLIPROOT/keymaps/genmap.sh, сгенерировать
описание клавиатуры для использования в clip-программах, положить
это описание в $CLIPROOT/keymaps и прописать CLIP_KEYMAP в файле с
описанием терминала (см. чуть выше).
В качестве терминала со скан-кодами может быть использована linux-консоль
или наш эмулятор терминала ftp.itk.ru/pub/telnet/stelnet.zip.
Заходить от имени "продвинутого" терминала можно так :
stelnet -s -t linux-stelnet host_name.
Если запускать clip-программы вот в таком виде:
export TERM=linux-stelnet
my_clip_program
export TERM=linux-koi8
Национализация
Национализация состоит из национализации устройства отображения,
клавиатуры, локализации строковых констант и встроенных функций.
Устройства отображения информации (console,terminal, emulator).
Их национализация производится стандартными для ОС способами -
загрузкой шрифтов, русификацией терминалов путем прошивки в ПЗУ
или методом загрузки драйверов типа keyrus, kbdrus, rk.
В случае если используется скан-кодовый режим клавиатуры -
раскладка и кодировка клавиатуры производится путем создания keymap-файла
и генерации, на его основе, файла-описателя для clip-драйвера клавиатуры.
В другом случае клавиатура будет такой, какой она будет приниматься от терминала.
Мышь
Мышь поддерживается в следующих случаях:
На консоли в стандартном терминальном режиме посредством демона gpm.
В X-Window при терминалах TERM==xterm или TERM==rxwt
В прочих X-Window терминалах если есть переменная окружения XTERM_MOUSE==on
С эмулятора терминала stelnet если есть переменная окружения XTERM_MOUSE==on
С консоли через ssh на другую машину - ставьте пакет trans_1.2
В операционной системе Windows.
Национализация
Некоторые clipper-функции имеют национальный контекст -
upper,lower,isalpha, isdigit, псевдографика, весовые коэфициенты для индексации
и сравнения строк и т.п.
Для создания файла-описателя национальных особенностей этих функций имеется
утилита $CLIPROOT/charsets/gen_tbl. Ей надо скормить БД с unicode-описателями
языков и собственно один из uni-файлов из каталога /usr/share/consoletrans.
На основании этих данных будет сгенерирован файл .tbl с таблицами перекодировки
и других национальных особенностей вышеописанных функций.
Указать в описании терминала под именем CLIP_HOSTCS, какой надо
использовать файл tbl.
Чтобы данные из DBF можно было использовать одновременно разными
обработчиками в разных кодировках, в clip предусмотрена специальная установка:
set("DBF_CHARSET","cp866")
или командой
set dbf charset to cp866
cp866 и есть имя tbl-файла с описанием национальных особенностей.
При этом может оказаться так, что данные в DBF хранятся в одной
кодировке, сама программа совсем в другой, а отображение на экране еще
и в третьей (см. описание терминала).
Также имеется возможность указывать кодировку принтера:
set("PRINTER_CHARSET","cp866")
или командой
set printer charset to cp866
Локализация строковых констант заключается в том, что все строковые
константы, описанные в исходных текстах как [строковые_данные],
складируются компилятором в $CLIPROOT/locale. Таким образом, имеется
возможность сделать для этих констант соответствующие транскрипции для других языков.
Clip-программы во время запуска считывают переменную окружения LANG,
и, по указанному имени языка, достают из $CLIPROOT/locale.po
соответствующие указанному языку значения констант.
© Ю.Хныкин, uri@itk.ru, 2000