Форум » Для флейма » Linux (Ubunta 12.xx) + Wine + терминалка GTWVT(866) » Ответить

Linux (Ubunta 12.xx) + Wine + терминалка GTWVT(866)

Andrey: Всем привет ! Столкнулся с большой проблемой, помогите. Под Ubunta 12.хх + Wine запускаю свою прогу (терминалка xHarbour+BCC5.5.1 GTWVT с кодировкой 866 - базы и интерфейс) Так вместо букв - кракозябы.... Что нужно настроить и как, чтобы в Ubunte появилась 866 кодировка ?

Ответов - 36, стр: 1 2 All

vvv: Может тут дело не в кодировке, может шрифты виндовые подтянуть надо?

petr707: Применить шрифт Terminal

Andrey: Нет, там нужно подключить кодовую страницу cp866 ! Я по форумам читал, находил, но решения так и не нашел. Я сюда написал, потому что у нас кто-то собирал свои программы на Харборе для Linux ! Народ, кто работает с Linux - отзовитесь ? Попробуйте собрать терминалку с 866 страницей. Или запустить мой готовый тестовый пример http://files.mail.ru/ZXZVB9


Andrey: На форуме по Ubuntu советуют программу собрать на чистом GTWIN. Опять возврат к прошлому... Сижу на xHarbour build 1.2.1 Intl. (SimpLex) (Rev. 6406) Собрал тестовый пример на RU1251 и облом, в Windows вместо русской кодировки - кракозябы тоже... Подскажите как правильно собрать GTWIN-терминал с RU1251 для хХарбора ? И как иконку + титул окна сделать ? Проект тут... http://files.mail.ru/6ASL5M Заранее спасибо за ответ !

Pasha: Зачем делать терминалку под wine, лучше сразу собрать программу для linux Использовать терминал gtcrs, а для трансляции 866-й кодовой страницы в koi8 выдать команду: hb_SetTermCP( 'RUKOI8', 'RU866', .t. )

Pasha: Кстати, hb_SetTermCP вроде бы (я не проверял) поддерживается терминалами gtwin/gtwvt, так что таким же образом можно настроить 866-ю страницу средствами харбора.

Andrey: Pasha пишет: Зачем делать терминалку под wine, лучше сразу собрать программу для linux Согласен, лучше бы сразу для Linux. Но вся печать под FastReport + дополнительный вызов Delhi-программ.... Сразу за короткий срок не переделать. А нужно запустить и работать...

Andrey: Pasha пишет: Кстати, hb_SetTermCP вроде бы (я не проверял) поддерживается терминалами gtwin/gtwvt Не работает... В файле PRG пишу сообщения в кодировке 1251, собираю проект - сообщения на русском в кракозябах... Что не так делаю ? Подскажите как правильно собрать GTWIN-терминал с RU1251 для хХарбора 1.2 или 1.0 ? И как иконку + титул окна сделать ? Проект тут... http://files.mail.ru/0AH5A7

Andrey: Pasha пишет: Кстати, hb_SetTermCP вроде бы (я не проверял) поддерживается терминалами gtwin/gtwvt, так что таким же образом можно настроить 866-ю страницу средствами харбора. Опять мучал Ubuntu ! терминал GTWIN для 866 странице - нормально работает, т.е. кодировка такая же как в Виндах. Добился. Пробовал все варианты для GTWVT-866, не работает зараза... hb_SetTermCP( 'RUKOI8', 'RU866', .T. ) hb_SetTermCP( 'RUWIN', 'RU866', .T. ) hb_SetTermCP( 'RU866', 'RU866', .t. ) Ни один вариант не подходит. Pasha можешь подсказать в какую сторону копать ? Примеры тут http://files.mail.ru/NED09Y Исходник здесь http://files.mail.ru/JIWUWF Картинка программы под Windows: Картинка программы под Ubuntu Wine: Тоесть под WINE русский шрифт не идет с CHR(128) !!! Может я что-то неправильно делаю ? Или это в gtwvt-терминале такая фигня ?

Pasha: Андрей, я вижу, что безуспешно задавал вопрос в Harbour Users list Обьясняю теоретическую часть: Кодировка применяется: 1) кодировка БД 2) для самой программы, т.е. имеется в виду та кодировка, в которой даются строковые литералы 3) кодировка терминала Вызовом функции hb_SetCodepage/hb_CdpSelect надо установить кодировку 2) Если кодировка 1) отличается от кодировки 2), то кодировку 1) надо укезывать при открытии таблиц в команде USE Если кодировка 3) отличается от кодировки 2), то кодировку 3) надо указать вызовом hb_SetTermCP( cCdp3 ) На все используемые кодировки должен быть указан оператор Request. Насколько я понимаю, у тебя кодировка 1) и 2) - это RU866. Таким образом, осталось определить кодировку терминала.

Andrey: Спасибо БОЛЬШОЕ за ответ ! Теперь лучше понимаю где строковые переменные, а где терминал. Pasha пишет: Таким образом, осталось определить кодировку терминала. А есть функция в хХарборе или Харборе которая возвращает какая кодировка терминала ? Все мозги себе вынес, и на форуме Ubuntu тоже подсказать не могут, потому что это все таки относится к самому Харбору.

Pasha: Только сейчас увидел, что механически перепутал номера кодировок в примере. Поправил А что касается кодировки терминала wvt, то это вопрос не харбора, а вопрос, какая кодировка используется в шрифте, который использует терминал wvt По картинке видно, что используется 1251 Таким образом, надо задать: REQUEST HB_CODEPAGE_RU866 REQUEST HB_CODEPAGE_RU1251 hb_SetCodepage( "RU866" ) hb_SetTermCP( "RU1251" )

Andrey: Да забыл написать, что ВСЕ базы использую в RU866. Да это по моему и не важно особо. Pasha пишет: hb_SetTermCP( "RU1251" ) По синтаксису эта функция должна иметь 3 параметра (по крайней мере для хХарбора 1.2) и "RU1251" для хХарбора 1.2 заменен на 'RUWIN'. Тогда так нужно писать: hb_SetTermCP( 'RUWIN', 'RU866', .T. ) ?

Pasha: Да, в xHarbour сейчас эта кодовая страница называется RUWIN. Я уже запутался, сколько раз ее переименовывали туда-обратно. А для hb_SetTermCP 2-й и 3-й параметры необязательны.

Andrey: Спасибо БОЛЬШОЕ ! Буду пробовать сегодня.

Andrey: Заказчик из Сибири прислал скриншот, у него кодировка экрана нормальная, т.е. правильная. У себя пробовал, фигня получается, без изменений. Взял снес Ubuntu, переставил заново. Думал дело в моих добавлениях шрифтов для терминала. Нет то же самое. Т.е. шрифт идет со сдвигом ! Что можно сделать ? Написал письмо Pritpal Bedi, он ответил, что уже не работает с хХарбором и помочь не может. Наверно нужно переходить на Харбор. А как правильно переделать мой пример для Харбора ? http://files.mail.ru/7561U2

Pasha: Андрей, попробуй выдать команды изменения charset для wvt: hb_gtinfo( HB_GTI_CODEPAGE, 255) // oem или hb_gtinfo( HB_GTI_CODEPAGE, 204) // rus 1251 по умолчанию должно быть значение oem, попробуй переключить на 204, в комбинации с settermcp

Andrey: Сделал: HB_LANGSELECT("RU866") hb_SetCodepage( "RU866" ) hb_gtinfo( HB_GTI_CODEPAGE, 204) // rus 1251 hb_SetTermCP( 'RUWIN' ) Результат все тот же: И под Виндой тоже появились кракозябы: Что дальше сделать можно ?

petr707: по картинке(гарнитуре) видно - вроде под Ubuntu Wine - фонт не Terminal ( видимо Courier ? ) все ли установки выполнились? можно попробовать спросить ? " hb_langName() = "+hb_langname() ? " hb_langSelect() = "+hb_langselect() ? " CodePage = "+STR( HB_GtInfo(HB_GTI_CODEPAGE) ,7) ? " FONTNAME = {"+hb_gtinfo( HB_GTI_FONTNAME ) +"}" ? " FONTWIDTH = "+STR( hb_gtinfo( HB_GTI_FONTWIDTH ) ,7) ? " FONTSIZE = "+STR( hb_gtinfo( HB_GTI_FONTSIZE ) ,7)

Andrey: petr707 пишет: можно попробовать спросить

petr707: Ниже пример конфигурации(возможно, не единственно верный) - некая Linux+Wine + harbour 2.0 GWT терминал ( не Unicode) wine - установки среды по команде set содержит упоминания о языке // set>set.txt .... DICTIONARY=russian DISPLAY=:1038 .. LANG=ru_RU.KOI8-R ... MPAGE=-CKOI8-R .. картинка - вывод параметров терминала из приложения

Andrey: petr707 пишет: Ниже пример конфигурации(возможно, не единственно верный) - некая Linux+Wine + harbour 2.0 GWT терминал ( не Unicode) А можно выложить строки исходника, где проходит инициализация терминала ? Буду очень признателен.

petr707: Пример кода ниже - ENTRY_HARB, что-то пришлось урезать, что-то осталось. В приложении - два терминала (GTWVT и GTWIN), дефолт WVT Параметры окна приложения выбираются из INI-файла. Запуск приложения - наибольший размер(подгонка под размер экрана) либо фиксированный. //============================== Function ENTRY_HARB() ANNOUNCE HB_GTSYS REQUEST HB_GT_WIN REQUEST HB_GT_WVT Public GT_WVT:= .t. Public GT_WIN:= .f. REQUEST HB_CODEPAGE_RUKOI8 REQUEST HB_LANG_RU866 HB_LangSelect( "RU866" ) REQUEST HB_CODEPAGE_RU866 HB_SetCodepage( "RU866" ) HB_GtInfo(HB_GTI_CODEPAGE, 255) // oem_charset HB_SETTERMCP("RU256") GT_WVT := ( hb_gtversion() = "WVT") GT_WIN := ( hb_gtversion() = "WIN") REQUEST HB_GT_WVT_DEFAULT HB_GTInfo( HB_GTI_ICONRES, "Icon_1" ) Set_win_mode() HB_GtInfo( HB_GTI_NOTIFIERBLOCK, {|nEvent, ...| WN_Notifier( nEvent, ... ) } ) SetFileApis() return .t. Function set_win_mode() Local nW:=select() GT_WVT := ( hb_gtversion() = "WVT") GT_WIN := ( hb_gtversion() = "WIN") HB_GTINFO( HB_GTI_RESIZABLE, .f. ) HB_GTINFO( HB_GTI_CLOSABLE , .t. ) setmode(25,80) Public xFONTNAME := "fixed"//"Courier"//"Lucida Console" Public xFONTWIDTH := 8 //10 Public xFONTSIZE := 16 //20 Public xSCREENWIDTH := 640 //800 Public xSCREENHEIGHT := 400 //500 Public xSETPOS_X := -1 // := 10 Public xSETPOS_Y := -1 // := 10 def_font1 := " " if !empty(def_font1) xFONTNAME := alltrim(def_font1) endif if GT_WIN SetConsoleTitle( "A test [x]" ) hWnd := FindWindow( "A test [x]" ) DeleteCloseButton( hWnd ) SetConsoleTitle( "A" ) do case CASE !lfullscreen xFONTWIDTH := 7 xFONTSIZE := 12 /* Set font size */ hb_gtInfo( HB_GTI_FONTSIZE, xFONTSIZE ) SetMode( MaxRow() + 1, MaxCol() + 1 ) OTHERWISE //! GT_WIN xFONTWIDTH := 7 xFONTSIZE := 12 /* Set font size */ hb_gtInfo( HB_GTI_FONTWIDTH,xFONTWIDTH ) hb_gtInfo( HB_GTI_FONTSIZE, xFONTSIZE ) /* resize console window using new font size */ SetMode( MaxRow() + 1, MaxCol() + 1 ) /* get screen dimensions */ nMaxScrRow := hb_gtInfo( HB_GTI_DESKTOPROWS ) nMaxScrCol := hb_gtInfo( HB_GTI_DESKTOPCOLS ) /* resize console window to the screen size */ SetMode( nMaxScrRow, nMaxScrCol ) ENDCASE xSCREENWIDTH := 80 * xFONTWIDTH //- 50 xSCREENHEIGHT := 25 * xFONTSIZE //- 50 HB_GTINFO( HB_GTI_SCREENWIDTH , xSCREENWIDTH ) HB_GTINFO( HB_GTI_SCREENHEIGHT, xSCREENHEIGHT ) endif// GT_WIN if GT_WVT HB_GtInfo(HB_GTI_FONTNAME , xFONTNAME) ? hb_gtinfo( HB_GTI_FONTWIDTH ) // 10 ? hb_gtinfo( HB_GTI_FONTSIZE ) // 20 ? HB_GTINFO( HB_GTI_SCREENWIDTH ) // 800 ? HB_GTINFO( HB_GTI_SCREENHEIGHT ) // 500 ? " " CLS inkey(0.1) do case CASE !lfullscreen HB_GtInfo( HB_GTI_FONTNAME , xFONTNAME ) HB_GtInfo( HB_GTI_FONTWIDTH , xFONTWIDTH ) HB_GtInfo( HB_GTI_FONTSIZE , xFONTSIZE ) HB_GTINFO( HB_GTI_SCREENWIDTH , xSCREENWIDTH ) HB_GTINFO( HB_GTI_SCREENHEIGHT, xSCREENHEIGHT ) inkey(0.1) OTHERWISE ENDCASE x1GETWIN := HB_GTINFO(HB_GTI_GETWIN) xComp_id := CHARREM(" ", compname() ) xusername := ALLTRIM(username(.t.) ) xcmd_str := "" xGTWVT_INI_file := "GTWVT_"+xComp_id +"_"+xcmd_str+"_"+xusername+".INI" xGTWVT_DEF_file := "GTWVTDEF.INI" lneed_res:=.f. DO CASE CASE file(base_dir_+"\"+xGTWVT_INI_file) get_ini(base_dir_+"\"+xGTWVT_INI_file) HB_GtInfo( HB_GTI_FONTNAME , xFONTNAME ) HB_GtInfo( HB_GTI_FONTWIDTH , xFONTWIDTH ) HB_GtInfo( HB_GTI_FONTSIZE , xFONTSIZE ) HB_GTINFO( HB_GTI_SCREENWIDTH , xSCREENWIDTH ) HB_GTINFO( HB_GTI_SCREENHEIGHT, xSCREENHEIGHT ) if !(xSETPOS_X=NIL .or. xSETPOS_Y=NIL .or. xSETPOS_X<0 .or. xSETPOS_Y<0) HB_GTINFO( HB_GTI_SETPOS_XY , xSETPOS_X , xSETPOS_Y) endif if maxrow(.t.)<24 .or. maxcol()<79 messbeep(""; +"//MAXROW =" +ATN( MAXROW(.t.) )+CRLF; +"//MAXCOL =" +ATN( MAXCOL(.t.) )+CRLF; ) lneed_res:=.t. endif CASE file(base_dir_+"\"+xGTWVT_DEF_file) get_ini(base_dir_+"\"+xGTWVT_DEF_file) HB_GtInfo( HB_GTI_FONTNAME , xFONTNAME ) HB_GtInfo( HB_GTI_FONTWIDTH , xFONTWIDTH ) HB_GtInfo( HB_GTI_FONTSIZE , xFONTSIZE ) HB_GTINFO( HB_GTI_SCREENWIDTH , xSCREENWIDTH ) HB_GTINFO( HB_GTI_SCREENHEIGHT, xSCREENHEIGHT ) if !(xSETPOS_X=NIL .or. xSETPOS_Y=NIL .or. xSETPOS_X<0 .or. xSETPOS_Y<0) HB_GTINFO( HB_GTI_SETPOS_XY , xSETPOS_X , xSETPOS_Y) endif if maxrow(.t.)<24 .or. maxcol()<79 messbeep(""; +"//MAXROW =" +ATN( MAXROW(.t.) )+CRLF; +"//MAXCOL =" +ATN( MAXCOL(.t.) )+CRLF; ) lneed_res:=.t. endif OTHERWISE lneed_res:=.t. ENDCASE if lneed_res Public xFONTWIDTH := 8 //10 Public xFONTSIZE := 16 //20 Public xSCREENWIDTH := 640 //800 Public xSCREENHEIGHT := 400 //500 HB_GtInfo( HB_GTI_FONTNAME , xFONTNAME ) HB_GtInfo( HB_GTI_FONTWIDTH , xFONTWIDTH ) HB_GtInfo( HB_GTI_FONTSIZE , xFONTSIZE ) HB_GTINFO( HB_GTI_SCREENWIDTH , xSCREENWIDTH ) HB_GTINFO( HB_GTI_SCREENHEIGHT, xSCREENHEIGHT ) endif if lneed_res .or. !file( (base_dir_ +"\" + xGTWVT_INI_file) ) strfile(""; +"// MainWindow GTWVT "+CRLF; +"// "+xGTWVT_INI_file+" "+CRLF; +"xFONTNAME="+ xFONTNAME+CRLF; +"xFONTWIDTH=" +ATN(xFONTWIDTH )+CRLF; +"xFONTSIZE=" +ATN(xFONTSIZE )+CRLF; +"xSCREENWIDTH=" +ATN(xSCREENWIDTH )+CRLF; +"xSCREENHEIGHT="+ATN(xSCREENHEIGHT )+CRLF; +"//MAXROW =" +ATN( MAXROW(.t.) )+CRLF; +"//MAXCOL =" +ATN( MAXCOL(.t.) )+CRLF; +"//xSETPOS_X=" +ATN(0)+CRLF; +"//xSETPOS_Y=" +ATN(0)+CRLF; ,(base_dir_ +"\" + xGTWVT_INI_file), .f.) endif endif //GT_WVT RddSetDefault( "DBFNTX" ) SET DBFLOCKSCHEME TO DB_DBFLOCK_CLIP return .t.

Andrey: petr707 пишет: HB_SETTERMCP("RU256") Почему 256 ? Может 255 ? Вообще Pasha пишет: hb_SetCodepage( "RU866" ) hb_SetTermCP( "RU1251" ) // т.е. RUWIN - для хХарбора 1.2

petr707: Это рабочий код, должен работать и в Windows и в Wine, пробуйте. Harbour 2.0

Andrey: petr707 пишет: wine - установки среды по команде set содержит упоминания о языке // set>set.txt .... DICTIONARY=russian DISPLAY=:1038 .. LANG=ru_RU.KOI8-R ... MPAGE=-CKOI8-R .. А как настроить эти параметры для Wine ?

petr707: Вот этого не знаю, к сожалению.

Dima: Andrey пишет: LANG=ru_RU.KOI8-R Погугли например. http://www.linux.org.ru/books/ru-linux-faq/rulinux.faq-3.html

Andrey: Dima пишет: Погугли например. Спасибо БОЛЬШОЕ !

TimTim: http://rus-linux.net/lib.php?name=/MyLDP/BOOKS/WineUG/index.html

Andrey: petr707 пишет: Ниже пример конфигурации(возможно, не единственно верный) - некая Linux+Wine + harbour 2.0 GWT терминал ( не Unicode) А можно Вас попросить дать готовый пример (маленький) с русским текстом (866) на экране программы ? Только который у вас нормально отображается по русски. Буду очень признателен. Чую что дело не в Харборе, а в настройках терминала WINE....

petr707: Попробую, только ответ завтра. Сейчас просто нет доступа к этой консоли.

petr707: Маленький готовый пример - дать не получиться, не могу размещать произвольный ехе в работающую систему. snap_zip По ссылке - zip , где скриншот реальной терминальной задачи WVT из под WINE, и файл newdfull.fon с шрифтом Termimal, который видимо был инсталлирован только для Wine. EXE-файл - один и тот же для работы в Wine и Windows. То есть Wine был настроен под приложение , а не наоборот.

AndreyZh: Так удалось ли подружить терминальное приложение с wine? Решил покрутить на VM - такие же кразабяки в теринальном приложении... обычные совет скачать все шрифты в паку font для wine не помогают.

Andrey: AndreyZh пишет: Так удалось ли подружить терминальное приложение с wine? Нет, не удалось !

AndreyZh: Andrey пишет: Нет, не удалось ! Погуглив нашел только кучу Ваших потугов поспрошать, в том числе на импортных форумах... Видно эта задача, как и использование Linux в бизнесе не слишком актуально... мне проще - просто хотел покрутить wine & linux и посмотреть его пригодность для пользования



полная версия страницы