Board.KolibriOS.org

Official KolibriOS board
It is currently Tue Jul 23, 2019 2:56 pm

All times are UTC+03:00




Post new topic  Reply to topic  [ 400 posts ]  Go to page Previous 1 2 3 4 527 Next
Author Message
PostPosted: Sun Mar 08, 2009 7:38 pm 
Offline
User avatar

Joined: Mon Oct 27, 2008 10:10 pm
Posts: 811
немного просветили, по поводу вопросов скажу еще:
Quote:
Я не совсем понял как возникла твоя ситуация.

я имел ввиду следующее, когда задан стиль окна в 0-й функции :
Quote:
Функция 0 - определить и нарисовать окно
.........
Параметры:
* edx = 0xXYRRGGBB, где:
* X = DCBA (биты)
.........
* B = 1 - координаты всех графических примитивов задаются
относительно клиентской области окна

то перерисовка меню под окном (после закрытия меню) не работает правильно. Есть 2 варианта программки 1-я в которой B = 1 и перерисовка сдвинута ровно на размеры скина, а во 2-й стиль B = 0 и все нормально.
Quote:
Если у тебя в процессе работы приограммы поменялся системный скин

пока скин при работе не меняю


Last edited by IgorA on Mon Mar 09, 2009 2:18 pm, edited 1 time in total.

Top
   
PostPosted: Mon Mar 09, 2009 1:21 am 
IgorA
Дело в том что функция 36 работает исключительно с координатами экрана. Надо подумать как учесть в компоненте еще и эту фичу с оносительными координатами графических примитивов.
Было бы хорошо получить исходник который у тебя восстанавливает сдвинутое изображение. Это могло бы ускорить решение вопроса, мыло мое mario79[dog]bk[dot]ru или можешь здесь прикрепить к своему посту.


17.00 MCK После беседы с Mike.dld (автор B=1) сделал пару поправок в MenuBar - ревизия 1049. Попробуй, должно помочь. Есно библиотеку надо откомпилить и закинуть куда надо (в записимости откуда ты ее загружаешь).

З.Ы. Выложенный пример проверил, глюка нет. Кстати визуально наблюдается несоответсвие параметров которые предоставляются скроллбару. Если уж рабоатешь с количеством строк текста, то надо все три параметра:
Code:
.max_area   dd 0  ;+16
.cur_area    dd 0  ;+20
.position     dd 0  ;+24

указывать в еденицах строк.


Top
   
PostPosted: Mon Apr 13, 2009 10:18 pm 
Offline
Mentor/Kernel Developer
User avatar

Joined: Fri Jun 30, 2006 9:01 am
Posts: 1247
A little enlightnment about SVN revision #1060:

The changes made export two extra functions, wich should be implemented in all KolibriOS library's IMHO.

The problem I had before was the lib-init function was not exported.
So when using the standard dll macro's for kolibrios (http://new.kolibrios.org/browser/progra ... st/dll.inc),
the program crashed because lib-init was not found. (wich also means there is an error/bug in the macro's...)

Besides this little futility, I think box-lib is a good initiative and it works great.

_________________
"Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius -- and a lot of courage -- to move in the opposite direction." Albert Einstein


Top
   
PostPosted: Wed Apr 15, 2009 4:24 pm 
Offline
Kernel Optimizer
User avatar

Joined: Mon Jan 16, 2006 7:58 pm
Posts: 657
Изменения в 1064 ревизи. Добавлен макрос load_lib.mac. Этот макрос служит для загрузки различных библиотек. Макрос имеет 2 модуля для загрузки это:
- test_load_library. Основная задача модуля - это проверка, если загружаемая либа в текущей дирректории, а если ее нет, проверка системной дирректории. Далее происходит импорт. Если либа так и не была найдена, создается окно с ошибкой. Если при импорте ошибка, то создается окно и выводиться в него код ошибки.

- load_library. Основная задача модуля - это проверка если загружаемая либа в системной дирректории, а если ее нет, проверка текущей дирректории, от куда была запущена программа. Далее происходит импорт. Если либа так и не была найдена, создается окно с ошибкой. Если при импорте ошибка, то создается окно и выводиться в него код ошибки.


Top
   
PostPosted: Thu Apr 23, 2009 6:25 am 
Offline
Kernel Optimizer
User avatar

Joined: Mon Jan 16, 2006 7:58 pm
Posts: 657
IgorA wrote:
Немного улутшил программу:
Читал что вроди макрос новый сделали для загрузки библиотек ?

Да, новый макрос сейчас находитсья в опытной эксплуатации и доработке.
Макрос позволяет загружать библиотеку/библиотеки. Существует 2 разновидности макросов, отличия только в логике работы.
В первом макросе: В начале проверяется системная папка, затем текущая.
Во втором макросе: В начале проверяется текущая папка, затем системная.
+++
Если по указанному пути не найдена либа - формируется окно с сообщением о том что либа не найдена.
Далее, при импорте, если возникает ошибка, так же формируется окно с сообщением об ошибке.
Сейчас алгоритм линейный. Т.е. пока не закроете текущее сформированное окно об ошибке программа не будет дальше выполняться.
Допустим, вам хочеться проверить есть ли либа, но отсутствие ее для программы не критично. После отрабоки макроса загрузки, в eax - код возврата.
Альфа версия макроса доступна на SVN. ...\develop\libraries\box_lib\trunk\load_lib.mac.
Пример использования - приложение editbox_ex.asm.


Top
   
PostPosted: Mon May 04, 2009 1:53 pm 
Offline
Kernel Optimizer
User avatar

Joined: Mon Jan 16, 2006 7:58 pm
Posts: 657
Альфа версия, доработан макрос load_lib.mac Пример испльзования в editbox_ex.asm.
Полноценная загрузка библиотеки /библиотек.
Тестирование привествуется )

Сейчас, если нужно подключить более 1 либы, нужно использовать другие макросы.
Доступно 4 макроса:
a) Загрузить только 1 либу
1. Обычный - load_library
2. Системный - sys_load_library
б) Зазгрузить от 2-х либ и более.
1.Обычный - load_libraries
2.Системный - sys_load_libraries
=============
Существенная разница в том, что макросы группы а), требуют следующей структуры:
load_library library_name, cur_dir_path, library_path, system_path, \
err_message_found_lib, head_f_l, myimport, err_message_import, head_f_i
Структура однатипна для группы макросов а).

Для группы макросов б) нужна другая структура, она чем-то похожа на editbox'овскую.
Начнем с того, что любой макрос из группы б) требует всего 2 параметра на вход.

load_libraries l_libs_start, end_l_libs
- т.е. начало и конец блока из структур аналогичных для первого макроса структур.
Вот эта структура - в самом низу макроса load_lib.mac

struc l_libs library_name, cur_dir_path, library_path, system_path, err_message_found_lib, head_f_l, myimport, err_message_import, head_f_i
; struct for loading libraries
{
library_name dd library_name
cur_dir_path dd cur_dir_path
library_path dd library_path
err_message_found_lib dd err_message_found_lib
head_f_l dd head_f_l
myimport dd myimport
err_message_import dd err_message_import
head_f_i dd head_f_i
status_lib dd 0x0 ;status of load library
}
- Смысл в том, что после обработки группы макросов можно самостоятельно проверить на сколько успешны загрузились либы. В каждой структуре есть поле status_lib, при успешной загрузе - поле содержит 0х0
1-я ошибка если путь не найден - выставляется значение 0х1
2-я ошибка если импорт косячный - выставляется значение 0х2
Это сделано для того, что бы можно было запускать прогу, даже если нет либ, допустим которые нужны только для расширения, т.е. желаемые либы.
Итак, для инициализации загрузки нескольких либ нужно сделать следующее:
1) В коде своей программы создаешь массив из структур загружаемых либ.(Смотри ниже)
2) Обрати внимание, что не нужно инициализировать status_lib!
Она инициализируется автоматически.
3) После отработки макроса, возможно будет желание узнать какая либа не загрузилась, понадобиться еще одно значение
- ll_struc_size - это размер структуры в байтах.
Т.е. как проверить какая либа с ошибкой загрузилась
-
после макроса делаем следующее
mov ebp,l_libs_start
mov ecx,((end_l_libs-l_libs_start)/ll_struc_size) ;ecx содержит кол-во библиотек всего в твоей структуре.
i_loop:
cmp [ebp+ll_struc_size-4],0
jnz exit
add ebp,ll_struc_size
loop i_loop
;данный цикл позволяет проверить удачно ли загрузились либа, если нет - выходит из цикла, дальше можно завершить программу передав упрление на
or eax,-1
int 0x40
;(ll_struc_size-4) - смещение до status_lib - т.е. до состояния
Можно выборочно проверить код загрузки конкретной или критичной для работы программы либы так:
mov ebp,library02
cmp [ebp+ll_struc_size-4],0
jnz exit
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
l_libs_start:
library01 library_name, cur_dir_path, library_path, system_path, err_message_found_lib, head_f_l, myimport, err_message_import, head_f_i
library02 library_name, cur_dir_path, library_path, system_path, err_message_found_lib, head_f_l, myimport, err_message_import, head_f_i
end_l_libs:


Attachments:
File comment: ALFA version
new_load_lib_alfa.7z [47.08 KiB]
Downloaded 106 times
Top
   
PostPosted: Tue May 05, 2009 1:49 pm 
Offline
Kernel Optimizer
User avatar

Joined: Mon Jan 16, 2006 7:58 pm
Posts: 657
Обновление


Attachments:
alfa_box_lib.7z [47.98 KiB]
Downloaded 120 times
Top
   
PostPosted: Sun May 10, 2009 8:23 am 
Offline
Kernel Optimizer
User avatar

Joined: Mon Jan 16, 2006 7:58 pm
Posts: 657
Поддержит ли сообщество переписывание программ, использующих макросы editbox, checkbox,radiobutton на то, что бы программы использовали системную библиотеку box_lib.obj ? Переписывание даст экономию ~ 1 кб для каждой программы. Я могу переписать программы RDSAVE, RUN, SCRNSHOOT и другие.


Top
   
PostPosted: Sun May 10, 2009 9:37 pm 
Offline
Kernel Optimizer
User avatar

Joined: Mon Jan 16, 2006 7:58 pm
Posts: 657
Переделал для примера RUN программу. Лучше всего оценивать упакованную kpack программу. Старая версия с макросами упакованная занимает 2175 байт, а новая версия, в которой подключается библиотека занимает 1248 байт. Т.е. экономия составляет 927 байт. Однако, при работе новая версия в ОЗУ занимает значительно больше места.
Программа RUN залита на SVN - огромная просьба провести тестирование программы.


Top
   
PostPosted: Sun May 10, 2009 9:48 pm 
Offline
Kernel Optimizer
User avatar

Joined: Mon Jan 16, 2006 7:58 pm
Posts: 657
to ALL
Если найдуться желающие действительно писать на MSVC++, специально для них, я напишу обертки на C++ для макроса load_lib.mac и сделаю несколько примеров на MSVC++, как можно быстро разрабатывать код используя системную библиотеку.


Top
   
PostPosted: Mon May 11, 2009 12:09 am 
<Lrz>
Алексей, блин, у мну такое очучение последнее время, что ты прям вчера родился... Ну, нах оно им нужно?! Они же сюда оттянуться ходют - не больше не меньше...

Возможно будут пользоваться 2-3 человека от силы, но не сейчас и не для того к чему ты призываешь.


Top
   
PostPosted: Mon May 11, 2009 4:44 am 
Offline
Kernel Optimizer
User avatar

Joined: Mon Jan 16, 2006 7:58 pm
Posts: 657
Я не теряю надежды, сейчас мало людей будут писать на асме для Колибри, разработчиков знающий С++ больше, есть вероятность, что кто-то захочет писать/портировать программу, и вот для этого случая можно будет использовать системную библиотеку.
В общем, если кому нужны будут обертки и примеры использования на MSVC++ пишем мне в PM.


Top
   
PostPosted: Mon May 11, 2009 3:25 pm 
Offline
User avatar

Joined: Mon Nov 05, 2007 12:09 am
Posts: 32
<Lrz> wrote:
Программа RUN залита на SVN - огромная просьба провести тестирование программы.

Ядро 1067, образ 0.7.5.0, qemu 0.10.1, fasm (linux) version 1.67.38
Размер программы на диске: было 2097, стало 1247 (разница в 850 байт)
Размер программы в памяти: было 8000, стало 20480 (разница в 12480 байт)
Программа работает нормально.


Top
   
PostPosted: Thu May 14, 2009 6:12 am 
Offline
Kernel Optimizer
User avatar

Joined: Mon Jan 16, 2006 7:58 pm
Posts: 657
Сделал описание, как можно использовать макрос load_lib.mac.
Выкладываю демо
Замечания, предложения, и т.д. прошу в личку.


Attachments:
prog_guide.7z [18.11 KiB]
Downloaded 115 times
Top
   
PostPosted: Wed Jun 03, 2009 8:49 am 
Offline
User avatar

Joined: Thu Mar 01, 2007 7:57 pm
Posts: 835
<Lrz> wrote:
Программа RUN залита на SVN - огромная просьба провести тестирование программы.

Пытался запустить ac97snd с файлом mp3, содержащим пробелы в имени. Run пишет, что программа успешно запущена, но на самом деле ничего не запустилось, хотя я заключил имя файла в кавычки.

_________________
Всех выше те, кто доброе творят,
И за дела добра не ждут наград,
Всем жертвуют для страждущих людей,
Не думая о выгоде своей.


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 400 posts ]  Go to page Previous 1 2 3 4 527 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 0 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Limited