Board.KolibriOS.org

Официальный форум KolibriOS
Текущее время: Чт сен 21, 2017 6:57 pm

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 42 сообщения ]  На страницу Пред. 1 2 3
Автор Сообщение
 Заголовок сообщения: Re: SysFn 4
СообщениеДобавлено: Вт мар 12, 2013 11:35 pm 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3928
SoUrcerer
Может сразу над новым АПИ подумать для новых шрифтов. Например надо, чтобы функция вписывала текст в ограничивающий прямоугольник, отсекая лишнее.


Вернуться к началу
 Заголовок сообщения: Re: SysFn 4
СообщениеДобавлено: Вт мар 12, 2013 11:42 pm 
Не в сети

Зарегистрирован: Пн сен 24, 2007 11:11 am
Сообщения: 2814
Устное предупреждение всем участникам оффтопа. Раз...

Serge, я думаю над более интересными вещами. Займусь начальными исследованиями этой важной для меня области.


Вернуться к началу
 Заголовок сообщения: Re: SysFn 4
СообщениеДобавлено: Вт мар 12, 2013 11:49 pm 
Не в сети
KSoC/GSoC Student

Зарегистрирован: Ср июл 11, 2012 3:17 am
Сообщения: 224
SoUrcerer писал(а):
В трех битах нельзя вернуть данные. В трех битах можно определить новую подфункцию, но это будет нелогично. В общем, нафиг всё, даешь библиотеку.

Допустим вариант: при ebx = 1 , в eax возвращать ширину строки

Это ни как не сломает все работающие программы, так как ebx = [координата по оси x]*65536 + [координата по оси y], что при любом раскладе > 1, собственно добавить в 4 функцию
Цитата:
cmp ebx,1
...
je....
...
mov eax,...

то что тут затрётся eax, как понимаете, ничего страшного! Так как условие ebx=1 ранее не существовало, и во всех остальных программах, не использовавших это - eax затираться не будет!

PS: стандарты нарушать не хорошо (согласен с Маратом), как и плодить костыли, но ведь подобное расширение функции допустимо! Это ни чем не хуже этого:
Цитата:
A=0 - выводить esi символов, A=1 - выводить ASCIIZ-строку
esi = для A=0 длина строки, должна быть не больше 255; для A=1 игнорируется

просто еще одно условие, при чём не ресурсоёмкое и много мусора не внесёт (ничего лишнего в ядре не должно быть!) Вообще да, нужна библиотека ответственная за работу со шрифтами и вывод текста во всех извращённых формах, с функциями возвращения размеров каждого символа какого нужно, вывода подчёркнутого наклонного зачёркнутого текста, с функцией вывода текста с установленным шагом и прочче, в общем библиотека!).

PPS: у линукса хороший слоган есть. Есть программа, она должна выполнять только свои функции, ничего левого, но должна это делать по максимуму.


Вернуться к началу
 Заголовок сообщения: Re: SysFn 4
СообщениеДобавлено: Вт мар 12, 2013 11:59 pm 
Не в сети

Зарегистрирован: Пн сен 24, 2007 11:11 am
Сообщения: 2814
4я функция умеет рисовать в относительных координатах. Я частенько рисую в 0,0. Не исключено, что кто-то может нарисовать что-то в 0,1. Это плохое ограничение.


Вернуться к началу
 Заголовок сообщения: Re: SysFn 4
СообщениеДобавлено: Ср мар 13, 2013 12:04 am 
Не в сети
KSoC/GSoC Student

Зарегистрирован: Ср июл 11, 2012 3:17 am
Сообщения: 224
SoUrcerer писал(а):
4я функция умеет рисовать в относительных координатах. Я частенько рисую в 0,0. Не исключено, что кто-то может нарисовать что-то в 0,1. Это плохое ограничение.

Ok, при ebx = 0xFFFF ? (X=0, Y=65535) врятли такое возможно, а если кто то и рисует в таких суперширокоформатных масштабах) на экране всё равно ничего не изменится!

PS: ebx =0xFFFFFFFF ? О_о

Ну на крайний случай: (хотя вариант выше мне кажется безопаснее)
Цитата:
X=ABnn (биты):
nn задает используемый шрифт: 0=системный моноширинный, 1=системный шрифт переменной ширины
У нас получается что на самом деле:
Цитата:
X=ABnD (биты):
D задает используемый шрифт: D=0-системный моноширинный, D=1-системный шрифт переменной ширины
Так почему бы не сделать:

X=ABСВ (биты):
    A=0 - выводить esi символов, A=1 - выводить ASCIIZ-строку
    B=1 - закрашивать фон цветом edi
    С=1 - возвращать ширину текста в eax. (при С=0 конечно же eax не меняется)
    D задает используемый шрифт: D=0-системный моноширинный, D=1-системный шрифт переменной ширины

PS: но такой вариант не гарантирует что где-то в бите C не лежит мусор(1), и не порушит тем самым eax/ Шансов конечно такой ситуации мало, но вдруг!


Вернуться к началу
 Заголовок сообщения: Re: SysFn 4
СообщениеДобавлено: Ср мар 13, 2013 12:29 am 
Не в сети

Зарегистрирован: Пн сен 24, 2007 11:11 am
Сообщения: 2814
Почему не использовать Y в таком случае?


Вернуться к началу
 Заголовок сообщения: Re: SysFn 4
СообщениеДобавлено: Ср мар 13, 2013 12:37 am 
Не в сети
KSoC/GSoC Student

Зарегистрирован: Ср июл 11, 2012 3:17 am
Сообщения: 224
SoUrcerer писал(а):
Почему не использовать Y в таком случае?

Почему бы и нет, не вижу в этом трагедии какой то. Это ни чем не хуже этого:
Цитата:
A=0 - выводить esi символов, A=1 - выводить ASCIIZ-строку
esi = для A=0 длина строки, должна быть не больше 255; для A=1 игнорируется

Ну я собственно не настаиваю, просто высказал своё мнение и соображения. Работу программ существующих не нарушает, объём кода реализации 5 строк. В общем я за подобное расширение функционала. Другое дело как окажется в итоге, после всех мнений.


Вернуться к началу
 Заголовок сообщения: Re: SysFn 4
СообщениеДобавлено: Вс июл 07, 2013 7:20 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Пт май 18, 2007 11:11 pm
Сообщения: 125
Можно было и еще безопаснее при теперешней реализации функции 4 :D

Вот кусок описания функции
Код:
   * Y=Cnnn (биты):
      * C=1 перенаправить вывод в область пользователя, задано в edi
      * nnn - не используется в текущем виде, должно быть 0 (zero)
  * edx = указатель на начало строки
  * esi = для A=0 длина строки, должна быть не больше 255;
          для A=1 игнорируется
  * edi = цвет для закраски фона, если B=1
  * edi = указатель на область пользователя, если C=1
Возвращаемое значение:
  * функция не возвращает значения


Накладываем свою жадную лапу на C=1 , edi=0 и спокойно возвращаем в eax или в ecx ширину строки.
Думаю указатель на область пользователя с нулевым адресом точно никто не юзает :D (а также с адресом 1, 2, 3,... и еще чуть-чуть :D так что еще и на кучу подфункций в будущем хватит )

_________________
Заглянул на огонёк


Вернуться к началу
 Заголовок сообщения: Re: SysFn 4
СообщениеДобавлено: Ср сен 28, 2016 4:41 pm 
Не в сети

Зарегистрирован: Вс окт 30, 2011 6:43 pm
Сообщения: 1009
Вот такой код
Спойлер: Показать
Код:
ORG 0
BITS 32
; ---------------------------------------------------------------------------- ;
  STACK_SIZE          equ 256

 ;  Charset specifiers for DrawText
  DT_CP866_6X9        equ 0x00000000
  DT_CP866_8X16       equ 0x10000000
  DT_UTF_16LE_8X16    equ 0x20000000
  DT_UTF_8_8X16       equ 0x30000000

 ;  Fill styles for DrawText
  DT_FILL_TRANSPARENT equ 0x00000000
  DT_FILL_OPAQUE      equ 0x40000000

 ;  Draw zero terminated string for DrawText
  DT_ZSTRING          equ 0x80000000

 ;  Size multipliers for DrawText
  DT_X1               equ  0x0000000
  DT_X2               equ  0x1000000
  DT_X3               equ  0x2000000
  DT_X4               equ  0x3000000
  DT_X5               equ  0x4000000
  DT_X6               equ  0x5000000
  DT_X7               equ  0x6000000
  DT_X8               equ  0x7000000

 ; Colors
  COLOR_BLUE          equ 0x000000FF
  COLOR_RED           equ 0x00FF0000
  COLOR_GREEN         equ 0x0000FF00
  COLOR_WHITE         equ 0x00FFFFFF
  COLOR_BLACK         equ 0x00000000

 ; Event mask constants
  EM_REDRAW           equ 0b1
  EM_KEY              equ 0b10
  EM_BUTTON           equ 0b100
  EM_MOUSE            equ 0b100000
; ---------------------------------------------------------------------------- ;
MENUET01              db 'MENUET01'
version               dd 1
program.start         dd START
program.end           dd END
program.memory        dd END + STACK_SIZE
program.stack         dd END + STACK_SIZE
program.params        dd 0
program.path          dd 0
; ---------------------------------------------------------------------------- ;
sz_caption            db "test",0
sz_test               db 'Qwerty Uiop Asdfg Hjkl Zxcv Bn',0
; ---------------------------------------------------------------------------- ;
START:
; SetEventMask
        mov    eax, 40
        mov    ebx, EM_REDRAW + EM_BUTTON
        int    64
on_redraw:
; BeginDraw
        mov    eax, 12
        mov    ebx, 1
        int    64
; DrawWindow
        xor    eax, eax
        mov    ebx, 200
        mov    ecx, 100
        mov    edx, 0x34FFFFFF
        mov    edi, sz_caption
        int    64
; DrawText
        mov    eax, 4
        mov    ebx, 10                                                 ;[x]
        shl    ebx, 16
        add    ebx, 10                                                 ;[y]
        mov    ecx, DT_CP866_6X9 | DT_X7 | DT_FILL_OPAQUE | DT_ZSTRING ;[Flags]
        or     ecx, COLOR_RED                                          ;[ForeColor]
        mov    edx, sz_test                                            ;[Text]
        mov    edi, COLOR_GREEN                                        ;[BackColor]
        mov    esi, 0                                                  ;[Count]
        int    64
; EndDraw
        mov    eax, 12
        mov    ebx, 2
        int    64
; WaitEvent
        mov    eax, 10
        int    64
        dec    eax
        jz     on_redraw
; ThreadTerminate
        or     eax, -1
        int    64
; ---------------------------------------------------------------------------- ;
END:
Уже скомпилированный бинарник
Вложение:
test.kex [191 байт]
13 скачиваний

В результате при запуске приложения происходит это
Спойлер: Показать
Изображение
и иногда приложение остаётся работать. Но чаще всего приложение просто вылетает, и на BOARD появляется это
Спойлер: Показать
Изображение
svn6549, VirtualBox


Вернуться к началу
 Заголовок сообщения: Re: SysFn 4
СообщениеДобавлено: Ср сен 28, 2016 5:14 pm 
Не в сети

Зарегистрирован: Вт мар 08, 2016 11:00 pm
Сообщения: 254
Есть такое. Вылетает если текст сильно не влезает в окно.


Вернуться к началу
 Заголовок сообщения: Re: SysFn 4
СообщениеДобавлено: Ср сен 28, 2016 5:52 pm 
Не в сети
Mentor/Kernel Developer
Аватара пользователя

Зарегистрирован: Чт мар 26, 2015 5:16 pm
Сообщения: 1174
Всё это связано с тем, что вывод на экран производится через промежуточный буфер с шириной экрана.


Вернуться к началу
 Заголовок сообщения: Re: SysFn 4
СообщениеДобавлено: Ср май 17, 2017 11:04 am 
Не в сети
Mentor/Kernel Developer
Аватара пользователя

Зарегистрирован: Чт мар 26, 2015 5:16 pm
Сообщения: 1174
revision #6899

Теперь слишком длинная строка обрезается.


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 42 сообщения ]  На страницу Пред. 1 2 3

Часовой пояс: UTC+03:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB