Page 4 of 5

Re: SysFn 4

Posted: Tue Oct 17, 2017 12:20 pm
by 0CodErr
Мда.. как всё запущено-то, а!!!
Pathoswithin wrote:Ну так это ты специально такую строку сделал.
Да, чтобы продемонстрировать баг, а иначе как это по-твоему сделать?
Pathoswithin wrote:В текстовых строках нулей быть не должно.
Читай предыдущее сообщение внимательней.
0CodErr wrote:в этом случае происходит вывод не zero-terminated строки, то, соответственно, ноль не может считаться признаком конца строки, а, значит, строка не должна обрываться на символе с кодом 0.
А зачем по-твоему тогда такое разделение строк? Для прикола что ли? :mrgreen:
Ты давай не прикидывайся, свои ошибки надо уметь признавать.

Или давайте тогда может заодно в консоли write_string "исправим"? Ну а что, она ведь работает точно таким же образом.
И SysFn4 раньше тоже работала правильно.
GerdtR wrote:Обычно, правда, всё таки при ошибках программы. Или попытках открыть подбитый txt файл.
Ну в KolibriOS это не ошибки вовсе, а оно так и задумано было.
GerdtR wrote:Считаю, что если надо вывести строку из 10 байт, значит вывести все 10 байт. И плевать, какие они.
Да, абсолютно согласен, именно так оно раньше и работало.
Иначе просто нет смысла делить строки на ASCIIZ и не ASCIIZ.

Re: SysFn 4

Posted: Tue Oct 17, 2017 9:28 pm
by Siemargl
А что, есть смысл в строках не asciiz ?

Re: SysFn 4

Posted: Tue Oct 17, 2017 9:33 pm
by GerdtR
Siemargl wrote:А что, есть смысл в строках не asciiz ?
без них hex редактор не сможет вывести многие символы средствами ОС. Также будет невозможно использовать строки в модулях, компилированых Паскалем. Многие строки там не заканчивается нулем.

Re: SysFn 4

Posted: Wed Oct 18, 2017 1:37 am
by Pathoswithin
0CodErr
Не, так я ж не против - исправляй. Просто у меня сейчас времени нет, вот и говорю, что проблема не серьёзная.

Re: SysFn 4

Posted: Thu Oct 19, 2017 7:46 pm
by 0CodErr
Я пробовал сделать так(font.inc) https://pastebin.ca/3891972
Но похоже, заголовки выводятся как-то по-особенному
Spoiler:
1.PNG
1.PNG (19.17 KiB)
Viewed 11420 times
Непонятно, почему там ограничение на количество символов для ASCIIZ(сейчас 256, раньше было 255).
Кажется, было бы лучше, если символ #0 выглядел бы одинаково в обоих шрифтах.
Лучше как у 6x9, например, в похожем случае http://websvn.kolibrios.org/filedetails ... m#line-405 это было бы удобно, если не хочется перед выводом текста принудительно закрашивать предыдущую надпись.

Re: SysFn 4

Posted: Fri Oct 20, 2017 1:56 am
by Pathoswithin
Посмотри в window.inc - window._.draw_window_caption.dodraw
В кодировке ASCII первые 32 символа вообще не должны как-то выглядеть, в том числе символ #0.

Re: SysFn 4

Posted: Fri Oct 20, 2017 1:30 pm
by 0CodErr
Pathoswithin wrote:В кодировке ASCII первые 32 символа вообще не должны как-то выглядеть, в том числе символ #0.
Насчёт всех 32-ух не согласен https://en.wikipedia.org/wiki/Code_page_866
Но вот символ #0 в шрифте 8x16 в данный момент всё-таки "как-то" выглядит.
Pathoswithin wrote:Посмотри в window.inc - window._.draw_window_caption.dodraw
Если сделать перед вызовом dtext

Code: Select all

or      ecx, 0x80000000
то работает, но бывает так, что надпись ещё больше наезжает на кнопки в заголовке.
Наверное, лучше заголовок выводить не как ASCIIZ, но предварительно определив длину строки.
Однако, судя по коду, кодировка может быть разной, значит, нужны разные StrLen функции.
Ну или пока что сделать только для CP866.
Другой вариант — для заголовка завести отдельный флаг: выводить либо esi символов, либо до первого попавшегося символа #0, то есть, так, как сейчас работает для вообще всех случаев.

Re: SysFn 4

Posted: Fri Oct 20, 2017 7:03 pm
by 0CodErr
#7103
Ну, в общем, я решил сделать
0CodErr wrote:для заголовка завести отдельный флаг: выводить либо esi символов, либо до первого попавшегося символа #0
Надеюсь, ничего больше не поломалось :)
Осталось теперь это
0CodErr wrote:Но вот символ #0 в шрифте 8x16 в данный момент всё-таки "как-то" выглядит.
А в 6x9 — нормально, никак не выглядит.

Re: SysFn 4

Posted: Sat Oct 21, 2017 1:39 am
by Pathoswithin
Надейся, я тоже каждый раз надеялся...

Тут надо понимать разницу между "выглядеть как ничего" и "не выглядеть никак": символ №32 всегда выглядит как ничего, а символы №0 - №31 не обязаны выглядеть как-то конкретно, потому могут выглядеть как угодно и рассчитывать на них не желательно.

А откуда у тебя в коде столько пробелов в конце строк?

Re: SysFn 4

Posted: Sat Oct 21, 2017 6:07 am
by 0CodErr
Pathoswithin wrote:Тут надо понимать разницу между "выглядеть как ничего" и "не выглядеть никак": символ №32 всегда выглядит как ничего, а символы №0 - №31 не обязаны выглядеть как-то конкретно, потому могут выглядеть как угодно и рассчитывать на них не желательно.
Ну было бы удобно, если #0 выглядел бы как #32 в обоих шрифтах. Это можно как-то поправить?
Pathoswithin wrote:А откуда у тебя в коде столько пробелов в конце строк?
О, вот это не знаю даже, как так получилось. Может после копипаста откуда-то вставились.

Re: SysFn 4

Posted: Sun Oct 22, 2017 12:49 am
by Pathoswithin
Если обратишь внимание на код, то увидишь что символ №0 в шрифте 8x16 используется для всех символов юникода, которых в шрифте нет.

Re: SysFn 4

Posted: Sun Oct 22, 2017 11:02 am
by 0CodErr
Думаю, было бы лучше, чтобы символы выглядели одинаково как в обоих шрифтах, так и в консоли.
По-моему лучший вариант — как они выглядят в консоли
Image

Re: SysFn 4

Posted: Sun Oct 22, 2017 11:17 am
by Pathoswithin
Это вообще cp437, там все символы имеют конкретный вид, а системная у нас cp866.

Re: SysFn 4

Posted: Sun Oct 22, 2017 11:43 am
by 0CodErr
Вообще-то ссылку я тебе давал уже https://en.wikipedia.org/wiki/Code_page_866
Pathoswithin wrote:системная у нас cp866
, которая как раз и основана на CP437. Нижняя часть таблицы осталась такой же
Image

Re: SysFn 4

Posted: Sun Oct 22, 2017 5:16 pm
by Pathoswithin
Wikipedia wrote:the first half (code points 0–127) being the same as ASCII
Тоже самое касается юникода. Идём сюда -> https://en.wikipedia.org/wiki/ASCII
Wikipedia wrote:ASCII reserves the first 32 codes (numbers 0–31 decimal) for control characters
Использовать их для чего-либо - плохая идея.