|
Терминалы, клавиатура, национализация
Терминалы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 соответствующие указанному языку значения констант. |