В сообщении от 1121692509 секунд после начала Эпохи Little KING написал
(а):
> Нет ни какого железного терминала. ПО это написано на языке Progress,
> который в свою очередь является СУБД. т.е. по аналогии Oracle и PLSQL/
> DMSQl.
Даже если оно написано не под железный а под "программный" терминал,
вам от этого легче не станет.
> В том то и дело, что разработчики ПО используют некоторые коды
> символов из кодировки ibm866, в добавок навешано куча сочетаний
> клавишь...
Обычные отображаемые символы, не управляющие последовательности, это не
так страшно. А вот сочетания клавиш - это проблема. Каждый тип
терминалов посылает программе свои последовательности при нажатии на
комбинации клавиш, тут нет единого стандарта.
> Сам Progress позволяет "на лету" перекодировать потоки из одной
> кодировки в другую.. Но т.к. разработчики ПО устанавливают свое
> детище на UnixWare (2.1.х 7.х.х), то там работало с русским только
> при TERM=AT3866
Переменная TERM должна соответствовать используемому терминалу. По ней
программы определяют как правильно интерпретировать последовательности,
которые принимаются со входа при нажатии на различные клавиши, и какие
управляющие последовательности использовать при выполнении различных
терминалозависимых операций, типа очистка экрана, вывод цвета,
перемещение курсора.
> и прикручивался пакет руссификации консоли, который в
> стартовых скриптах загружал 866 фонт и 866 кодировку, а в про-файлах
> (системы и поользователей) принудительно выставляется TERM=AT3866.
> Для самой БД кодировка выставлена ibm866, потоки то же в ibm866, все
> процедуры/исходники в ibm866.
Лучше переписать ПО под современную CУБД, поддерживающую NLS. Тогда
точно с терминалами проблем не будет. :)
> > А еще лучше не калечить систему (что вы уже сделали), а
> > воспользоваться программой, которая перекодирует ввод и вывод на
> > лету. Я уже не помню как она называется, но помню что ее автор есть
> > в этом листе, думаю он или кто-то другой подскажет.
> Так не понятно, что еще нужно перекодировать кроме I/O, т.к.
> наблюдается глюк работы системы при работе с полями и проверкой в
> справочниках, т.е. набираешь значение, система проверяет и говорит,
> мол нет такого значения
> - выбираешь из справочника такое же значение, переключаешься на
> следующее поля, тут же меняется значние с "читабельного" на
> "кракозябры" и систему это удовлетворяет?!?! вроде как все пучком..
Это происходит с каким терминалом? Если система ориентирована на работу
с AT386, и вы этот AT386 используете (как вы говорили, из под винды
NetTerm или ShellGuard), и система это знает (установлена правильно
переменная TERM), то все должно работать нормально.
Если ПО использует БД terminfo, то разумно предположить что оно может
работать и с другими терминалами, для этого terminfo и предназначена.
> Да и к тому же как быть с теми символами которые есть в ibm866, и нет
> их в koi8-r?
Это не страшно одни символы можно заменить другими. Главное это
правильная интерпретация программой входных данных, полученных с
терминала, и правильная интерпретация терминалом выходных данных
полученных от программы, которые кроме обычных символов содержать еще и
управляющие последовательности.
Если программа не может использовать информацию, полученную из terminfo
для нормальной работы с терминалом linux или xterm, то вам нужно
использовать тот терминал, с которым программа может
нормально работать. Если этот терминал AT386, то вам нужна программа,
которая его эмулирует, присутствие правильной информации об этом
терминале в terminfo, и установленная соответствующим образом
переменная TERM. В качестве такого эмулятора в винде, видимо, выступают
NetTerm и ShellGuard. Попробуйте найти что-то подобное под Linux.