Укажите отработанное время

Отработанное время:
Продуктивное время:
Bug 4223 - Не отображаются DOS-шрифты   Make a simular bug
Summary: Не отображаются DOS-шрифты
Status: CLOSED FIXED
Alias: None
Product: WINE@Etersoft
Classification: Продукты (Products)
Component: Шрифты (show other bugs)
Version: unspecified
Hardware: PC All
: P4 minor
Target Milestone: ---
Assignee: Илья Шпигорь
QA Contact: Денис Баранов
URL:
Whiteboard:
Keywords:
Depends on:
Blocks: 630 5032
  Show dependency treegraph
 
In work:
Reported: 2009-08-17 12:10 MSD by Денис Баранов
Modified: 2010-04-15 17:06 MSD (History)
5 users (show)

See Also:
Заявки RT: 11054
Связано с:
Дата напоминания:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Денис Баранов 2009-08-17 12:10:21 MSD
Отображение происходит в виде крякозяблев, увидеть можно в бутылке rt/11054, способ воспроизведения:
2) зайти в каталог /ADM
3) запустить LCS_RUN.exe
4) выбрать запускаемый модуль, например "Склад (учет товаров)" - запустить

В программе в меню выбрать "Учет товаров" -> "Реестр накладных" -> в низу справа нажать "ОК"
Сформируется список накладных (окно не отрисовывается)
Можно зайти в любую позицию - документ формируется в кодировке DOS - шрифты подставить самостоятельно не смог
Comment 1 Анатолий Лютин 2009-10-31 00:51:15 MSK
Нужно найти мои баги по БЕСТ, я, вроде бы, проводил какое-то исследование данного вопроса для БЕСТ+ 4. Там то ли двойная перекодировка, то ли ещё какая-то фигня. Совсем не помню :( Помню что что-то такое было :)))
Comment 2 Александр Морозов 2009-12-22 17:23:10 MSK
> Нужно найти мои баги по БЕСТ
Что-то не нашёл ничего
Comment 3 Vitaly Lipatov 2009-12-22 18:27:18 MSK
Про консоль - здесь
http://bugs.etersoft.ru/show_bug.cgi?id=768

Вообще, я думаю, что запускать программу надо командой wineconsole.
Comment 4 Александр Морозов 2009-12-22 19:03:40 MSK
> Вообще, я думаю, что запускать программу
> надо командой wineconsole.
В данном баге речь не о консольной программе
Comment 5 Vitaly Lipatov 2009-12-22 19:46:31 MSK
(In reply to comment #4)
> > Вообще, я думаю, что запускать программу
> > надо командой wineconsole.
> В данном баге речь не о консольной
> программе
Ах, ну надо разбираться с используемым шрифтом тогда.
Comment 6 Александр Морозов 2009-12-22 19:56:20 MSK
Небольшой тест: wine-etersoft-devel/fonts/oemtext
Программа выводит символы от 0 до 255, используя OEM_CHARSET. Вывод различается в Windows и в WINE. Используется шрифт Terminal, но с другим шрифтом вывод также различается.
Comment 7 Александр Морозов 2009-12-22 19:58:17 MSK
> Используется шрифт Terminal
Имеется ввиду, что шрифт используется в тесте. Какой конкретно шрифт использует LCS_RUN.exe, я не разбирался.
Comment 8 Александр Морозов 2009-12-22 20:00:36 MSK
Если сделать, чтобы функция GdiGetCodePage всегда возвращала CP_OEMCP, то тест работает как в Windows. В LCS_RUN.exe там, где до этого были кракозябры, выводится нормальный текст. Правда, разумеется, в некоторых других местах, где раньше был нормальный текст, появляются кракозябры.
Comment 9 Илья Шпигорь 2010-01-13 12:17:15 MSK
Выложил патч. Добиться его принятия на winehq не удалось.

Проблема в том, что при создании логического шрифта поле lfCharSet структуры LOGFONT вообще игнорируется. Вместо этого wine считает, что используется ansi charset.

Патч добавляет проверку на OEM_CHARSET, и в случае если он указан в LOGFONT, использует это поле структуры.
Comment 10 Анатолий Лютин 2010-01-13 13:22:58 MSK
Разве тот тест, что ты отправил показывает это:

"
Проблема в том, что при создании
логического шрифта поле lfCharSet структуры
LOGFONT вообще игнорируется. Вместо этого wine
считает, что используется ansi charset.
"

наверное твой патч и не приняли из-за того, что он немного расходится с тестом по семантике...
Comment 11 Анатолий Лютин 2010-01-13 13:31:18 MSK
Посмотрел ещё пару раз, дошло. 

Да, тест всё показывает, только надо было где-нибудь в
+    lf.lfCharSet = OEM_CHARSET;

написать коммент, что wine, такой нехороший, всё равно ANSI выставит. А то как-то странно - ты в тесте заполняешь 4 поля, а проверяешь только 1. Может там и не Terminal и 12 вообще получается. А если так, то там проблема намного серьёзнее чем просто oem - не oem.
Comment 12 Анатолий Лютин 2010-01-13 13:47:54 MSK
Ещё несколько замечаний:

Если говоришь  так: 
"
The fsCsb is bitfield that is used as boolean value. If this is false the 
DEFAULT_CHARSET is using and the real charset is choosen through the current 
ANSI codepage. But this is mistake in case of the OEM charset.
"

то ты должен дать ссылку на msdn где так будет написано, либо сделать пачку тестов, которые подтверждают твои слова. Из того, что при создании, OEM_CHARSER заменяется на что-то другое, не следует что это произошло только из-за флага, выставленного в false. 
В этой баге нужно действительно много дополнительных тестов и не только на OEM. Одного теста с использованием Тахомы, где ты тоже проверяешь только поле charset явно не достаточно.
Comment 13 Денис Баранов 2010-04-15 17:02:32 MSD
Принято.
WINE@Etersoft 1.0.12 eter5/eter4
Comment 14 Денис Баранов 2010-04-15 17:06:23 MSD
Отписался по заявке.