Page 1 of 1

Прикручивание скинов к panel

Posted: Thu Sep 30, 2010 12:43 pm
by SoUrcerer
Пытался прикрутить отображение png вместо кнопки меню и кнопок на панели. Жаль, что у меня туго с ассемблером :( png загружается и даже рисуется - один раз, а потом у приложения page fault. Почти уверен, все потому что, я не смог разобраться с выделением памяти в @panel.
Если не трудно, подскажите пожалуйста, куда воткнуть данные :(

Вот что было:

Code: Select all

  dd   START	    ; program start
  dd   I_END	    ; program image size
  dd   0xA000	    ; reguired amount of memory - 10 Kb
  dd   0xA000	    ; esp
  dd   0x0,0x0	    ; param, icon

......

I_END:
screen_size:
  .height dw ?
  .width  dw ?
this_slot      dd 0	      ; Slot of this process
max_slot       dd 255
system_colours	system_colors ; rd 10
app_list rd 50
alt_tab_list	rd	256*2
alt_tab_list_size dd	?
process_info_buffer  rb 1024
procinfo_for_detect  rb 1024
tictable:
  rd 256
  rb 256
detect_stack:
	rb	256
ctx_menu_stack:
panel_x_pos	rd	1
panel_y_pos	rd	1
last_active_window	dd	0
prev_active_window	dd	0
active_window_changed	dd	0
app_tab_count		dd	0
image:

А в примерах по libimg нечто вроде:

Code: Select all

dd   start	    ; program start
dd   i_end	    ; program image size
dd   mem	    ; reguired amount of memory
dd stacktop
dd 0x0
dd sys_path
...
i_end:
    rb 1024
stacktop:
    sys_path rb 4096
    file_name:
        rb 4096
    plugin_path:
        rb 4096
    openfile_path:
        rb 4096
    filename_area:
        rb 256
mem:

Re: Прикручивание скинов к panel

Posted: Thu Sep 30, 2010 5:52 pm
by Asper
Это скорее всего не решает проблему, но после I_END принято помещать только неинициализированные данные, а инициализированные данные и код должны располагаться до I_END.

Re: Прикручивание скинов к panel

Posted: Thu Sep 30, 2010 5:55 pm
by IgorA
1) По идее вся область между метками i_end и mem это данные, которые в бинарник не включаются но выделяются в процессе запуска приложения
т.е. men всегда в самом конце файла
2) Перед меткой stacktop должна быть память, выделяемая для стека. Эту область обычно ставят в середину между метками i_end и mem. Иногда и в самый конец отрезка, тогда mem и stacktop совпадают
3) Если sys_path был установлен в 0, значит он в программе не использовался, это указатель по которому будет записан путь к открытому файлу.
Я не системный программист, может я в чем-то ошибаюсь. Так я это понимаю.

Re: Прикручивание скинов к panel

Posted: Thu Sep 30, 2010 7:31 pm
by Mario
IgorA wrote: 2) Перед меткой stacktop должна быть память, выделяемая для стека. Эту область обычно ставят в середину между метками i_end и mem. Иногда и в самый конец отрезка, тогда mem и stacktop совпадают
Все правильно сказал, лишь поясню - стек он растет из старших адресов к младшим. Следовательно начальная метка всегда в конец области ставится. В том числе и стеки потоков в 51 функции. Я сам в свое время этого не знал (лет 7 назад, пока товарищ Trans на первом русском форуме Menuet глаза не раскрыл) и накалывался.

Re: Прикручивание скинов к panel

Posted: Thu Sep 30, 2010 8:09 pm
by Serge
Максимальная длина пути в Колибри 1024 байта включая завершающий ноль.

Re: Прикручивание скинов к panel

Posted: Thu Sep 30, 2010 8:17 pm
by Mario
Serge wrote:Максимальная длина пути в Колибри 1024 байта включая завершающий ноль.
Стоп - я чего-то не знаю? Кто-то урезал специально? Вроде как планировалось столько, сколько есть помещать, а то это получается только файлы и директории 4-й вложенности при максимальной длине имени.
По крайней мере я все свои буферы на 4 Кб делаю про запас.

Re: Прикручивание скинов к panel

Posted: Fri Mar 13, 2015 12:33 pm
by Leency
Привет!

Изначально это была готическая буква М, смотри тут первый скрин http://kolibri-n.org/inf/let_it_fly/index

Сейчас Гугл выдает такие картинки https://www.google.com.ua/search?q=menu ... uetos+logo

Re: Прикручивание скинов к panel

Posted: Fri Mar 13, 2015 12:41 pm
by hidnplayr
Dear Leency, You are talking to a copy-bot.
viewtopic.php?f=26&t=89&p=833&#p833