diff --git a/programs/develop/libraries/buf2d/trunk/about.htm b/programs/develop/libraries/buf2d/trunk/about.htm index 02bf7c31ee..facb6c31b1 100644 --- a/programs/develop/libraries/buf2d/trunk/about.htm +++ b/programs/develop/libraries/buf2d/trunk/about.htm @@ -62,7 +62,7 @@ table { font-size: 15px; } ╤ хх яюью∙№■ ьюцэю ёючфртрЄ№ сєЇхЁр ё шчюсЁрцхэш ьш т ярь Єш, ш яЁш эхюсїюфшьюёЄш т√тюфшЄ№ шї эр ¤ъЁрэ. ╚чюсЁрцхэш  ьюцэю эръырф√трЄ№ юфэю эр фЁєуюх, яюффхЁцштрхЄё  ЁрсюЄр ё яЁючЁрўэ√ьш шчюсЁрцхэш ьш, хёЄ№ ЇєэъЎш  Ёшёютрэш  ышэш яюър эр ¤Єюь тёх.

-

╧юёыхфэхх юсэютыхэшх сшсышюЄхъш 25.03.11.

+

╧юёыхфэхх юсэютыхэшх сшсышюЄхъш 13.09.11.

╘юЁьрЄ√ сєЇхЁют

╧юффхЁцштрхЄё  3 ЇюЁьрЄр сєЇхЁют. @@ -293,5 +293,6 @@ import_buf2d_lib:

22.12.10 - шчьхэхэю шь  ЇєэъЎшш buf2d_cruve_bezier эр buf2d_curve_bezier.

25.03.11 - фюсртыхэр ЇєэъЎш  Ёшёютрэш  фы  Єюўъш buf2d_set_pixel.

30.08.11 - фюсртыхэр ЇєэъЎш  шчьхэхэш  ЁрчьхЁют сєЇхЁр buf2d_resize.

+

13.09.11 - юяЄшьшчшЁютрэр ЁрсюЄр ЇєэъЎшщ buf_filled_rect_by_size buf_rect_by_size, фюсртыхэ√ яЁшьхЁ√ шёяюы№чютрэш  сшсышюЄхъш.

\ No newline at end of file diff --git a/programs/develop/libraries/buf2d/trunk/buf2d.asm b/programs/develop/libraries/buf2d/trunk/buf2d.asm index d526caff48..480d827605 100644 --- a/programs/develop/libraries/buf2d/trunk/buf2d.asm +++ b/programs/develop/libraries/buf2d/trunk/buf2d.asm @@ -1080,11 +1080,19 @@ proc buf_line_h, buf_struc:dword, coord_x0:dword, coord_y0:dword, coord_x1:dword jle @f xchg ebx,esi ;если x0 > x1 то меняем местами x0 и x1 @@: + bt ebx,31 + jae @f + ;если координата x0 отрицательная + xor ebx,ebx + @@: cmp esi,buf2d_w jl @f + ;если координата x0 больше ширины буфера mov esi,buf2d_w ;dec esi @@: + cmp ebx,esi + jge .end24 ;если x0 >= x1 может возникнуть когда обе координаты x0, x1 находились за одним из пределов буфера ;в eax вычисляем начало 1-й точки линии в буфере изображения mov eax,buf2d_w ;size x @@ -1093,21 +1101,17 @@ proc buf_line_h, buf_struc:dword, coord_x0:dword, coord_y0:dword, coord_x1:dword lea eax,[eax+eax*2] ;(size_x*y+x)*3 add eax,buf2d_data ;ptr+(size_x*y+x)*3 + mov ecx,esi + sub ecx,ebx ;в ecx колличество точек линии выводимых в буфер mov edx,dword[color] + mov ebx,edx ;координата x0 в ebx уже не нужна + ror edx,16 ;поворачиваем регистр что бы 3-й байт попал в dl + cld @@: ;цикл по оси x от x0 до x1 - cmp ebx,esi - jge @f - bt ebx,31 - jc .otr_x - mov word[eax],dx ;copy pixel color - ror edx,16 - mov byte[eax+2],dl - ror edx,16 - .otr_x: - add eax,3 - inc ebx - jmp @b - @@: + mov word[eax],bx ;copy pixel color + mov byte[eax+2],dl + add eax,3 + loop @b .end24: popad ret diff --git a/programs/develop/libraries/buf2d/trunk/examples/build.bat b/programs/develop/libraries/buf2d/trunk/examples/build.bat new file mode 100644 index 0000000000..0f5a8f7e32 --- /dev/null +++ b/programs/develop/libraries/buf2d/trunk/examples/build.bat @@ -0,0 +1,21 @@ +if not exist bin mkdir bin +@fasm.exe -m 16384 ..\buf2d.asm bin\buf2d.obj +@kpack bin\buf2d.obj + +if not exist bin\font8x9.bmp @copy ..\..\..\..\..\fs\kfar\trunk\font8x9.bmp bin\font8x9.bmp +@copy foto.jpg bin\foto.jpg +@copy img0.png bin\img0.png +@copy img1.png bin\img1.png + +@fasm.exe -m 16384 e0_dr_lines.asm bin\e0_dr_lines.kex +@fasm.exe -m 16384 e1_scaling.asm bin\e1_scaling.kex +@fasm.exe -m 16384 e2_images.asm bin\e2_images.kex +@fasm.exe -m 16384 e3_text.asm bin\e3_text.kex +@fasm.exe -m 16384 e4_graf_ed.asm bin\e4_graf_ed.kex + +@kpack bin\e0_dr_lines.kex +@kpack bin\e1_scaling.kex +@kpack bin\e2_images.kex +@kpack bin\e3_text.kex +@kpack bin\e4_graf_ed.kex +pause \ No newline at end of file diff --git a/programs/develop/libraries/buf2d/trunk/examples/dll.inc b/programs/develop/libraries/buf2d/trunk/examples/dll.inc new file mode 100644 index 0000000000..5f13fbbc16 --- /dev/null +++ b/programs/develop/libraries/buf2d/trunk/examples/dll.inc @@ -0,0 +1,99 @@ + +proc dll.Load, import_table:dword + mov esi,[import_table] + .next_lib: mov edx,[esi] + or edx,edx + jz .exit + push esi + mov esi,[esi+4] + mov edi,s_libdir.fname + @@: lodsb + stosb + or al,al + jnz @b + mcall 68,19,s_libdir + or eax,eax + jz .fail + stdcall dll.Link,eax,edx + push eax + mov eax, [eax] + cmp dword [eax], 'lib_' + pop eax + jnz @f + stdcall dll.Init,[eax+4] + @@: + pop esi + add esi,8 + jmp .next_lib + .exit: xor eax,eax + ret + .fail: add esp,4 + xor eax,eax + inc eax + ret +endp + +proc dll.Link, exp:dword,imp:dword + push eax + mov esi,[imp] + test esi,esi + jz .done + .next: lodsd + test eax,eax + jz .done + stdcall dll.GetProcAddress,[exp],eax + or eax,eax + jz @f + mov [esi-4],eax + jmp .next + @@: mov dword[esp],0 + .done: pop eax + ret +endp + +proc dll.Init, dllentry:dword + pushad + mov eax,mem.Alloc + mov ebx,mem.Free + mov ecx,mem.ReAlloc + mov edx,dll.Load + stdcall [dllentry] + popad + ret +endp + +proc dll.GetProcAddress, exp:dword,sz_name:dword + mov edx,[exp] + xor eax,eax + .next: or edx,edx + jz .end + cmp dword[edx],0 + jz .end + stdcall strcmp,[edx],[sz_name] + test eax,eax + jz .ok + add edx,8 + jmp .next + .ok: mov eax,[edx+4] + .end: ret +endp + +proc strcmp, str1:dword,str2:dword + push esi edi + mov esi,[str1] + mov edi,[str2] + xor eax,eax + @@: lodsb + scasb + jne .fail + or al,al + jnz @b + jmp .ok + .fail: or eax,-1 + .ok: pop edi esi + ret +endp + +s_libdir: + db '/sys/lib/' + .fname rb 32 diff --git a/programs/develop/libraries/buf2d/trunk/examples/e0_dr_lines.asm b/programs/develop/libraries/buf2d/trunk/examples/e0_dr_lines.asm new file mode 100644 index 0000000000..c2cbdb8b10 --- /dev/null +++ b/programs/develop/libraries/buf2d/trunk/examples/e0_dr_lines.asm @@ -0,0 +1,150 @@ +use32 + org 0x0 + db 'MENUET01' ;идентиф. исполняемого файла всегда 8 байт + dd 0x1 + dd start + dd i_end ;размер приложения + dd mem,stacktop + dd 0,cur_dir_path + +include '../../../../../macros.inc' +include '../../../../../proc32.inc' +include '../../../../../develop/libraries/box_lib/load_lib.mac' +include 'mem.inc' + +@use_library_mem mem.Alloc,mem.Free,mem.ReAlloc, 0 ;dll.Load + +align 4 +start: + load_library vectors_name, cur_dir_path, library_path, system_path, \ + err_message_found_lib, head_f_l, import_buf2d_lib, err_message_import, head_f_i + cmp eax,-1 + jz button.exit + + mcall 40,0x27 + stdcall [buf2d_create], buf_0 ;создаем буфер + stdcall [buf2d_line], buf_0, 110, 20, 125, 90, 0xffff00 ;рисуем линию + stdcall [buf2d_line], buf_0, 60, 120, 110, 20, 0xd000 ;рисуем линию + stdcall [buf2d_curve_bezier], buf_0, (10 shl 16)+20,(110 shl 16)+10,(50 shl 16)+90, dword 0xff + stdcall [buf2d_circle], buf_0, 125, 90, 30, 0xffffff ;рисуем окружность + stdcall [buf2d_circle], buf_0, 25, 70, 15, 0xff0000 ;рисуем окружность + +align 4 +red_win: + call draw_window + +align 4 +still: + mcall 10 + cmp al,1 ;изменилось положение окна + jz red_win + cmp al,2 + jz key + cmp al,3 + jz button + jmp still + +align 4 +draw_window: + pushad + mcall 12,1 + + ;mov edx,0x32000000 + mov edx,0x33000000 + mcall 0,(50 shl 16)+330,(30 shl 16)+275,,,caption + + stdcall [buf2d_draw], buf_0 + + mcall 12,2 + popad + ret + +align 4 +key: + mcall 2 + + cmp ah,27 ;Esc + je button.exit + + jmp still + +align 4 +button: + mcall 17 ;получить код нажатой кнопки + cmp ah,1 + jne still +.exit: + stdcall [buf2d_delete],buf_0 ;удаляем буфер + mcall -1 ;выход из программы + +caption db 'Test buf2d library, [Esc] - exit',0 + +;-------------------------------------------------- +align 4 +import_buf2d_lib: + dd sz_lib_init + buf2d_create dd sz_buf2d_create + buf2d_create_f_img dd sz_buf2d_create_f_img + buf2d_clear dd sz_buf2d_clear + buf2d_draw dd sz_buf2d_draw + buf2d_delete dd sz_buf2d_delete + buf2d_line dd sz_buf2d_line + buf2d_circle dd sz_buf2d_circle + buf2d_img_hdiv2 dd sz_buf2d_img_hdiv2 + buf2d_img_wdiv2 dd sz_buf2d_img_wdiv2 + buf2d_conv_24_to_8 dd sz_buf2d_conv_24_to_8 + buf2d_conv_24_to_32 dd sz_buf2d_conv_24_to_32 + buf2d_bit_blt dd sz_buf2d_bit_blt + buf2d_bit_blt_transp dd sz_buf2d_bit_blt_transp + buf2d_bit_blt_alpha dd sz_buf2d_bit_blt_alpha + buf2d_curve_bezier dd sz_buf2d_curve_bezier + buf2d_convert_text_matrix dd sz_buf2d_convert_text_matrix + buf2d_draw_text dd sz_buf2d_draw_text + dd 0,0 + sz_lib_init db 'lib_init',0 + sz_buf2d_create db 'buf2d_create',0 + sz_buf2d_create_f_img db 'buf2d_create_f_img',0 + sz_buf2d_clear db 'buf2d_clear',0 + sz_buf2d_draw db 'buf2d_draw',0 + sz_buf2d_delete db 'buf2d_delete',0 + sz_buf2d_line db 'buf2d_line',0 + sz_buf2d_circle db 'buf2d_circle',0 ;рисование окружности + sz_buf2d_img_hdiv2 db 'buf2d_img_hdiv2',0 + sz_buf2d_img_wdiv2 db 'buf2d_img_wdiv2',0 + sz_buf2d_conv_24_to_8 db 'buf2d_conv_24_to_8',0 + sz_buf2d_conv_24_to_32 db 'buf2d_conv_24_to_32',0 + sz_buf2d_bit_blt db 'buf2d_bit_blt',0 + sz_buf2d_bit_blt_transp db 'buf2d_bit_blt_transp',0 + sz_buf2d_bit_blt_alpha db 'buf2d_bit_blt_alpha',0 + sz_buf2d_curve_bezier db 'buf2d_curve_bezier',0 + sz_buf2d_convert_text_matrix db 'buf2d_convert_text_matrix',0 + sz_buf2d_draw_text db 'buf2d_draw_text',0 + +align 4 +buf_0: + dd 0 ;указатель на буфер изображения + dw 20 ;+4 left + dw 10 ;+6 top + dd 160 ;+8 w + dd 128 ;+12 h + dd 0x80 ;+16 color + db 24 ;+20 bit in pixel + +;-------------------------------------------------- +system_path db '/sys/lib/' +vectors_name db 'buf2d.obj',0 +err_message_found_lib db 'Sorry I cannot load library buf2d.obj',0 +head_f_i: +head_f_l db 'System error',0 +err_message_import db 'Error on load import library buf2d.obj',0 +;-------------------------------------------------- + +i_end: ;конец кода + rb 1024 +stacktop: +cur_dir_path: + rb 4096 +library_path: + rb 4096 +mem: + diff --git a/programs/develop/libraries/buf2d/trunk/examples/e1_scaling.asm b/programs/develop/libraries/buf2d/trunk/examples/e1_scaling.asm new file mode 100644 index 0000000000..8ba752afa8 --- /dev/null +++ b/programs/develop/libraries/buf2d/trunk/examples/e1_scaling.asm @@ -0,0 +1,182 @@ +use32 + org 0x0 + db 'MENUET01' ;идентиф. исполняемого файла всегда 8 байт + dd 0x1 + dd start + dd i_end ;размер приложения + dd mem,stacktop + dd 0,cur_dir_path + +include '../../../../../macros.inc' +include '../../../../../proc32.inc' +include '../../../../../develop/libraries/box_lib/load_lib.mac' +include 'mem.inc' + +@use_library_mem mem.Alloc,mem.Free,mem.ReAlloc, 0 ;dll.Load + +align 4 +start: + load_library vectors_name, cur_dir_path, library_path, system_path, \ + err_message_found_lib, head_f_l, import_buf2d_lib, err_message_import, head_f_i + cmp eax,-1 + jz button.exit + + mcall 40,0x27 + stdcall [buf2d_create], buf_0 ;создаем буфер + stdcall [buf2d_line], buf_0, 110, 20, 125, 90, 0xffff00 ;рисуем линию + stdcall [buf2d_line], buf_0, 60, 120, 110, 20, 0xd000 ;рисуем линию + stdcall [buf2d_curve_bezier], buf_0, (10 shl 16)+20,(110 shl 16)+10,(50 shl 16)+90, dword 0xff + stdcall [buf2d_circle], buf_0, 125, 90, 30, 0xffffff ;рисуем окружность + stdcall [buf2d_circle], buf_0, 25, 70, 15, 0xff0000 ;рисуем окружность + + stdcall [buf2d_img_hdiv2], buf_0 ;сжимаем изображение в буфере по высоте в 2 раза + stdcall [buf2d_img_wdiv2], buf_0 ;сжимаем изображение в буфере по ширине в 2 раза + stdcall [buf2d_create_f_img], buf_1,[buf_0] ;создаем маленький буфер buf_1, на основе сжатого изображения из buf_0 + + ;если бы использовалась функция buf2d_create, тогда биты изображения + ;пришлось бы копировать следущими строками: + ;xor ecx,ecx + ;xor eax,eax + ;mov cx,word[buf_1.size_x] + ;mov ax,word[buf_1.size_y] + ;imul ecx,eax + ;imul ecx,3 ;ecx - колличество байт в маленьком буфере + ;stdcall mem_copy, dword[buf_0],dword[buf_1],ecx + + stdcall [buf2d_clear], buf_0,0xffffff + stdcall [buf2d_bit_blt], buf_0, 15,10, buf_1 + stdcall [buf2d_bit_blt], buf_0, 110,65, buf_1 + + stdcall [buf2d_conv_24_to_8], buf_1 + ;stdcall [buf2d_bit_blt_alpha], buf_0, 1,1, buf_1,0xff8080 ;рисуем контуры изображения на фотографии + +align 4 +red_win: + call draw_window + +align 4 +still: + mcall 10 + cmp al,1 ;изм. положение окна + jz red_win + cmp al,2 + jz key + cmp al,3 + jz button + jmp still + +align 4 +draw_window: + pushad + mcall 12,1 + + ;mov edx,0x32000000 + mov edx,0x33000000 + mcall 0,(50 shl 16)+330,(30 shl 16)+275,,,caption + + stdcall [buf2d_draw], buf_0 + + mcall 12,2 + popad + ret + +align 4 +key: + mcall 2 + + cmp ah,27 ;Esc + je button.exit + + jmp still + +align 4 +button: + mcall 17 ;получить код нажатой кнопки + cmp ah,1 + jne still +.exit: + stdcall [buf2d_delete],buf_0 ;удаляем буфер + stdcall [buf2d_delete],buf_1 ;удаляем буфер + mcall -1 ;выход из программы + +caption db 'Test buf2d library, [Esc] - exit',0 + +;-------------------------------------------------- +align 4 +import_buf2d_lib: + dd sz_lib_init + buf2d_create dd sz_buf2d_create + buf2d_create_f_img dd sz_buf2d_create_f_img + buf2d_clear dd sz_buf2d_clear + buf2d_draw dd sz_buf2d_draw + buf2d_delete dd sz_buf2d_delete + buf2d_line dd sz_buf2d_line + buf2d_circle dd sz_buf2d_circle + buf2d_img_hdiv2 dd sz_buf2d_img_hdiv2 + buf2d_img_wdiv2 dd sz_buf2d_img_wdiv2 + buf2d_conv_24_to_8 dd sz_buf2d_conv_24_to_8 + buf2d_conv_24_to_32 dd sz_buf2d_conv_24_to_32 + buf2d_bit_blt dd sz_buf2d_bit_blt + buf2d_bit_blt_transp dd sz_buf2d_bit_blt_transp + buf2d_bit_blt_alpha dd sz_buf2d_bit_blt_alpha + buf2d_curve_bezier dd sz_buf2d_curve_bezier + buf2d_convert_text_matrix dd sz_buf2d_convert_text_matrix + buf2d_draw_text dd sz_buf2d_draw_text + dd 0,0 + sz_lib_init db 'lib_init',0 + sz_buf2d_create db 'buf2d_create',0 + sz_buf2d_create_f_img db 'buf2d_create_f_img',0 + sz_buf2d_clear db 'buf2d_clear',0 + sz_buf2d_draw db 'buf2d_draw',0 + sz_buf2d_delete db 'buf2d_delete',0 + sz_buf2d_line db 'buf2d_line',0 + sz_buf2d_circle db 'buf2d_circle',0 ;рисование окружности + sz_buf2d_img_hdiv2 db 'buf2d_img_hdiv2',0 + sz_buf2d_img_wdiv2 db 'buf2d_img_wdiv2',0 + sz_buf2d_conv_24_to_8 db 'buf2d_conv_24_to_8',0 + sz_buf2d_conv_24_to_32 db 'buf2d_conv_24_to_32',0 + sz_buf2d_bit_blt db 'buf2d_bit_blt',0 + sz_buf2d_bit_blt_transp db 'buf2d_bit_blt_transp',0 + sz_buf2d_bit_blt_alpha db 'buf2d_bit_blt_alpha',0 + sz_buf2d_curve_bezier db 'buf2d_curve_bezier',0 + sz_buf2d_convert_text_matrix db 'buf2d_convert_text_matrix',0 + sz_buf2d_draw_text db 'buf2d_draw_text',0 + +align 4 +buf_0: + dd 0 ;указатель на буфер изображения + dw 20 ;+4 left + dw 10 ;+6 top + dd 160 ;+8 w + dd 128 ;+12 h + dd 0x80 ;+16 color + db 24 ;+20 bit in pixel + +align 4 +buf_1: + dd 0 ;указатель на буфер изображения + dw 10 ;+4 left + dw 10 ;+6 top +.size_x: dd 80 ;+8 w +.size_y: dd 64 ;+12 h + dd 0x80 ;+16 color + db 24 ;+20 bit in pixel + +;-------------------------------------------------- +system_path db '/sys/lib/' +vectors_name db 'buf2d.obj',0 +err_message_found_lib db 'Sorry I cannot load library buf2d.obj',0 +head_f_i: +head_f_l db 'System error',0 +err_message_import db 'Error on load import library buf2d.obj',0 +;-------------------------------------------------- + +i_end: ;конец кода + rb 1024 +stacktop: +cur_dir_path: + rb 4096 +library_path: + rb 4096 +mem: + diff --git a/programs/develop/libraries/buf2d/trunk/examples/e2_images.asm b/programs/develop/libraries/buf2d/trunk/examples/e2_images.asm new file mode 100644 index 0000000000..661d3011e5 --- /dev/null +++ b/programs/develop/libraries/buf2d/trunk/examples/e2_images.asm @@ -0,0 +1,318 @@ +use32 + org 0x0 + db 'MENUET01' ;идентиф. исполняемого файла всегда 8 байт + dd 0x1 + dd start + dd i_end ;размер приложения + dd mem,stacktop + dd 0,sys_path + +include '../../../../../macros.inc' +include '../../../../../proc32.inc' +include '../../../../../develop/libraries/box_lib/load_lib.mac' +include 'mem.inc' +include 'dll.inc' + +@use_library_mem mem.Alloc,mem.Free,mem.ReAlloc, dll.Load + +struct FileInfoBlock + Function dd ? + Position dd ? + Flags dd ? + Count dd ? + Buffer dd ? + db ? + FileName dd ? +ends + +IMAGE_FILE0_SIZE equ 640*480*3 ;размер файла с изображением 640 x 480 +IMAGE_FILE1_SIZE equ 200*186*3 ;размер файла с изображением 200 x 100 +fn_foto db 'foto.jpg',0 + +macro load_image_file path,buf,size { ;макрос для загрузки изображений + ;path - может быть переменной или строковым параметром + if path eqtype '' ;проверяем задан ли строкой параметр path + jmp @f + local .path_str + .path_str db path ;формируем локальную переменную + db 0 + @@: + ;32 - стандартный адрес по которому должен быть буфер с системным путем + copy_path .path_str,[32],file_name,0x0 + else + copy_path path,[32],file_name,0x0 ;формируем полный путь к файлу изображения, подразумеваем что он в одной папке с программой + end if + + stdcall mem.Alloc, dword size ;выделяем память для изображения + mov [buf],eax + + mov eax,70 ;70-я функция работа с файлами + mov [run_file_70.Function], 0 + mov [run_file_70.Position], 0 + mov [run_file_70.Flags], 0 + mov [run_file_70.Count], dword size + m2m [run_file_70.Buffer], [buf] + mov byte[run_file_70+20], 0 + mov [run_file_70.FileName], file_name + mov ebx,run_file_70 + int 0x40 ;загружаем файл изображения + cmp ebx,0xffffffff + je @f + ;определяем вид изображения и переводим его во временный буфер image_data + stdcall dword[img_decode], dword[buf],ebx,0 + mov dword[image_data],eax + ;преобразуем изображение к формату rgb + stdcall dword[img_to_rgb2], dword[image_data],dword[buf] + ;удаляем временный буфер image_data + stdcall dword[img_destroy], dword[image_data] + @@: +} + +align 4 +start: + load_libraries l_libs_start,load_lib_end + + ;проверка на сколько удачно загузилась наша либа + mov ebp,lib0 + cmp dword [ebp+ll_struc_size-4],0 + jz @f + mcall -1 ;exit not correct + @@: + mov ebp,lib1 + cmp dword [ebp+ll_struc_size-4],0 + jz @f + mcall -1 ;exit not correct + @@: + + mcall 40,0x27 + mcall 48,3,sc,sizeof.system_colors ;получаем системные цвета + + load_image_file fn_foto, image_data_foto,IMAGE_FILE0_SIZE + stdcall [buf2d_create_f_img], buf_0,[image_data_foto] ;создаем буфер + stdcall mem.Free,[image_data_foto] ;освобождаем память + + load_image_file 'img0.png',image_data_gray,IMAGE_FILE1_SIZE + stdcall [buf2d_create_f_img], buf_1,[image_data_gray] ;создаем буфер + stdcall mem.Free,[image_data_gray] ;освобождаем память + + load_image_file 'img1.png',image_data_rgb, IMAGE_FILE1_SIZE + stdcall [buf2d_create_f_img], buf_2,[image_data_rgb] ;создаем буфер + stdcall mem.Free,[image_data_rgb] ;освобождаем память + + stdcall [buf2d_conv_24_to_8], buf_1,1 ;делаем буфер прозрачности 8бит + stdcall [buf2d_conv_24_to_32],buf_2,buf_1 ;делаем буфер rgba 32бит + + stdcall [buf2d_bit_blt], buf_0, 10,170, buf_2 ;рисуем изображение на фотографии + stdcall [buf2d_bit_blt_transp], buf_0, 210,270, buf_2 ;рисуем прозрачное изображение на фотографии + stdcall [buf2d_bit_blt_alpha], buf_0, 410,170, buf_1,0xff8080 ;рисуем контуры изображения на фотографии + +align 4 +red_win: + call draw_window + +align 4 +still: ;главный цикл + mcall 10 + + cmp al,0x1 ;изменилось положение окна + jz red_win + cmp al,0x2 + jz key + cmp al,0x3 + jz button + + jmp still + +align 4 +key: + push eax ebx + mcall 2 +;... + pop ebx eax + jmp still + + +align 4 +draw_window: + pushad + mcall 12,1 + + mov edx,[sc.work] + or edx,0x33000000 + mcall 0,(20 shl 16)+670,(20 shl 16)+520,,,caption ;создание окна + + stdcall [buf2d_draw], buf_0 + + mcall 12,2 + popad + ret + +head_f_i: +head_f_l db 'Системная ошибка',0 + +system_dir0 db '/sys/lib/' +name_buf2d db 'buf2d.obj',0 +err_message_found_lib0 db 'Не удалось найти библиотеку buf2d.obj',0 +err_message_import0 db 'Ошибка при импорте библиотеки buf2d.obj',0 + +system_dir1 db '/sys/lib/' +name_libimg db 'libimg.obj',0 +err_message_found_lib1 db 'Не удалось найти библиотеку libimg.obj',0 +err_message_import1 db 'Ошибка при импорте библиотеки libimg.obj',0 + +;library structures +l_libs_start: + lib0 l_libs name_buf2d, sys_path, file_name, system_dir0, err_message_found_lib0, head_f_l, import_buf2d_lib, err_message_import0, head_f_i + lib1 l_libs name_libimg, sys_path, file_name, system_dir1, err_message_found_lib1, head_f_l, import_libimg, err_message_import1, head_f_i +load_lib_end: + +align 4 +button: + mcall 17 ;получить код нажатой кнопки + cmp ah,1 + jne still +.exit: + stdcall [buf2d_delete],buf_0 ;удаляем буфер + stdcall [buf2d_delete],buf_1 ;удаляем буфер + stdcall [buf2d_delete],buf_2 ;удаляем буфер + mcall -1 ;выход из программы + +image_data dd 0 ;память для преобразования картинки функциями libimg +image_data_gray dd 0 ;память с преобразованным изображением в формате 8-bit +image_data_rgb dd 0 ;память с преобразованным изображением в формате rgb +image_data_foto dd 0 + +run_file_70 FileInfoBlock +caption db 'Draw images 13.09.11',0 ;подпись окна +sc system_colors ;системные цвета + +align 4 +buf_0: + dd 0 ;указатель на буфер изображения + dw 5 ;+4 left + dw 5 ;+6 top + dd 640 ;+8 w + dd 480 ;+12 h + dd 0xffffff ;+16 color + db 24 ;+20 bit in pixel + +align 4 +buf_1: + dd 0 ;указатель на буфер изображения + dw 25 ;+4 left + dw 25 ;+6 top + dd 200 ;+8 w + dd 186 ;+12 h + dd 0 ;+16 color + db 24 ;+20 bit in pixel + +align 4 +buf_2: + dd 0 ;указатель на буфер изображения + dw 235 ;+4 left + dw 25 ;+6 top + dd 200 ;+8 w + dd 186 ;+12 h + dd 0 ;+16 color + db 24 ;+20 bit in pixel + +align 4 +import_libimg: + dd alib_init1 + img_is_img dd aimg_is_img + img_info dd aimg_info + img_from_file dd aimg_from_file + img_to_file dd aimg_to_file + img_from_rgb dd aimg_from_rgb + img_to_rgb dd aimg_to_rgb + img_to_rgb2 dd aimg_to_rgb2 + img_decode dd aimg_decode + img_encode dd aimg_encode + img_create dd aimg_create + img_destroy dd aimg_destroy + img_destroy_layer dd aimg_destroy_layer + img_count dd aimg_count + img_lock_bits dd aimg_lock_bits + img_unlock_bits dd aimg_unlock_bits + img_flip dd aimg_flip + img_flip_layer dd aimg_flip_layer + img_rotate dd aimg_rotate + img_rotate_layer dd aimg_rotate_layer + img_draw dd aimg_draw + + dd 0,0 + alib_init1 db 'lib_init',0 + aimg_is_img db 'img_is_img',0 ;определяет по данным, может ли библиотека сделать из них изображение + aimg_info db 'img_info',0 + aimg_from_file db 'img_from_file',0 + aimg_to_file db 'img_to_file',0 + aimg_from_rgb db 'img_from_rgb',0 + aimg_to_rgb db 'img_to_rgb',0 ;преобразование изображения в данные RGB + aimg_to_rgb2 db 'img_to_rgb2',0 + aimg_decode db 'img_decode',0 ;автоматически определяет формат графических данных + aimg_encode db 'img_encode',0 + aimg_create db 'img_create',0 + aimg_destroy db 'img_destroy',0 + aimg_destroy_layer db 'img_destroy_layer',0 + aimg_count db 'img_count',0 + aimg_lock_bits db 'img_lock_bits',0 + aimg_unlock_bits db 'img_unlock_bits',0 + aimg_flip db 'img_flip',0 + aimg_flip_layer db 'img_flip_layer',0 + aimg_rotate db 'img_rotate',0 + aimg_rotate_layer db 'img_rotate_layer',0 + aimg_draw db 'img_draw',0 + +align 4 +import_buf2d_lib: + dd sz_lib_init + buf2d_create dd sz_buf2d_create + buf2d_create_f_img dd sz_buf2d_create_f_img + buf2d_clear dd sz_buf2d_clear + buf2d_draw dd sz_buf2d_draw + buf2d_delete dd sz_buf2d_delete + buf2d_line dd sz_buf2d_line + buf2d_circle dd sz_buf2d_circle + buf2d_img_hdiv2 dd sz_buf2d_img_hdiv2 + buf2d_img_wdiv2 dd sz_buf2d_img_wdiv2 + buf2d_conv_24_to_8 dd sz_buf2d_conv_24_to_8 + buf2d_conv_24_to_32 dd sz_buf2d_conv_24_to_32 + buf2d_bit_blt dd sz_buf2d_bit_blt + buf2d_bit_blt_transp dd sz_buf2d_bit_blt_transp + buf2d_bit_blt_alpha dd sz_buf2d_bit_blt_alpha + buf2d_curve_bezier dd sz_buf2d_curve_bezier + buf2d_convert_text_matrix dd sz_buf2d_convert_text_matrix + buf2d_draw_text dd sz_buf2d_draw_text + dd 0,0 + sz_lib_init db 'lib_init',0 + sz_buf2d_create db 'buf2d_create',0 + sz_buf2d_create_f_img db 'buf2d_create_f_img',0 + sz_buf2d_clear db 'buf2d_clear',0 + sz_buf2d_draw db 'buf2d_draw',0 + sz_buf2d_delete db 'buf2d_delete',0 + sz_buf2d_line db 'buf2d_line',0 + sz_buf2d_circle db 'buf2d_circle',0 ;рисование окружности + sz_buf2d_img_hdiv2 db 'buf2d_img_hdiv2',0 + sz_buf2d_img_wdiv2 db 'buf2d_img_wdiv2',0 + sz_buf2d_conv_24_to_8 db 'buf2d_conv_24_to_8',0 + sz_buf2d_conv_24_to_32 db 'buf2d_conv_24_to_32',0 + sz_buf2d_bit_blt db 'buf2d_bit_blt',0 + sz_buf2d_bit_blt_transp db 'buf2d_bit_blt_transp',0 + sz_buf2d_bit_blt_alpha db 'buf2d_bit_blt_alpha',0 + sz_buf2d_curve_bezier db 'buf2d_curve_bezier',0 + sz_buf2d_convert_text_matrix db 'buf2d_convert_text_matrix',0 + sz_buf2d_draw_text db 'buf2d_draw_text',0 + +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: \ No newline at end of file diff --git a/programs/develop/libraries/buf2d/trunk/examples/e3_text.asm b/programs/develop/libraries/buf2d/trunk/examples/e3_text.asm new file mode 100644 index 0000000000..dc5fa8b313 --- /dev/null +++ b/programs/develop/libraries/buf2d/trunk/examples/e3_text.asm @@ -0,0 +1,318 @@ +use32 + org 0x0 + db 'MENUET01' ;идентиф. исполняемого файла всегда 8 байт + dd 0x1 + dd start + dd i_end ;размер приложения + dd mem,stacktop + dd 0,sys_path + +include '../../../../../macros.inc' +include '../../../../../proc32.inc' +include '../../../../../develop/libraries/box_lib/load_lib.mac' +include 'mem.inc' +include 'dll.inc' + +@use_library_mem mem.Alloc,mem.Free,mem.ReAlloc, dll.Load + +struct FileInfoBlock + Function dd ? + Position dd ? + Flags dd ? + Count dd ? + Buffer dd ? + db ? + FileName dd ? +ends + +IMAGE_FILE1_SIZE equ 128*144*3 ;размер файла с изображением 128 x 144 + +macro load_image_file path,buf,size { ;макрос для загрузки изображений + ;path - может быть переменной или строковым параметром + if path eqtype '' ;проверяем задан ли строкой параметр path + jmp @f + local .path_str + .path_str db path ;формируем локальную переменную + db 0 + @@: + ;32 - стандартный адрес по которому должен быть буфер с системным путем + copy_path .path_str,[32],file_name,0x0 + else + copy_path path,[32],file_name,0x0 ;формируем полный путь к файлу изображения, подразумеваем что он в одной папке с программой + end if + + stdcall mem.Alloc, dword size ;выделяем память для изображения + mov [buf],eax + + mov eax,70 ;70-я функция работа с файлами + mov [run_file_70.Function], 0 + mov [run_file_70.Position], 0 + mov [run_file_70.Flags], 0 + mov [run_file_70.Count], dword size + m2m [run_file_70.Buffer], [buf] + mov byte[run_file_70+20], 0 + mov [run_file_70.FileName], file_name + mov ebx,run_file_70 + int 0x40 ;загружаем файл изображения + cmp ebx,0xffffffff + je @f + ;определяем вид изображения и переводим его во временный буфер image_data + stdcall dword[img_decode], dword[buf],ebx,0 + mov dword[image_data],eax + ;преобразуем изображение к формату rgb + stdcall dword[img_to_rgb2], dword[image_data],dword[buf] + ;удаляем временный буфер image_data + stdcall dword[img_destroy], dword[image_data] + @@: +} + +align 4 +start: + load_libraries l_libs_start,load_lib_end + + ;проверка на сколько удачно загузилась наша либа + mov ebp,lib0 + cmp dword [ebp+ll_struc_size-4],0 + jz @f + mcall -1 ;exit not correct + @@: + mov ebp,lib1 + cmp dword [ebp+ll_struc_size-4],0 + jz @f + mcall -1 ;exit not correct + @@: + + mcall 40,0x27 + mcall 48,3,sc,sizeof.system_colors ;получаем системные цвета + + stdcall [buf2d_create], buf_0 ;создаем буфер + + load_image_file 'font8x9.bmp', image_data_foto,IMAGE_FILE1_SIZE + stdcall [buf2d_create_f_img], buf_1,[image_data_foto] ;создаем буфер + stdcall mem.Free,[image_data_foto] ;освобождаем память + + stdcall [buf2d_conv_24_to_8], buf_1,1 ;делаем буфер прозрачности 8 бит + stdcall [buf2d_bit_blt_alpha], buf_0, 70,10, buf_1,0x20d020 ;рисуем исходную текстовую матрицу 16*16 + stdcall [buf2d_convert_text_matrix], buf_1 + stdcall [buf2d_bit_blt_alpha], buf_0, 10,10, buf_1,0xff8080 ;рисуем преобразованную текстовую матрицу 1*256 + stdcall [buf2d_draw_text], buf_0, buf_1,some_text,70,170,0x4040ff ;рисуем строку с текстом + +align 4 +red_win: + call draw_window + +align 4 +still: ;главный цикл + mcall 10 + + cmp al,0x1 ;изменилось положение окна + jz red_win + cmp al,0x2 + jz key + cmp al,0x3 + jz button + + jmp still + +align 4 +key: + push eax ebx + mcall 2 +;... + pop ebx eax + jmp still + + +align 4 +draw_window: + pushad + mcall 12,1 + + mov edx,[sc.work] + or edx,0x33000000 + mcall 0,(20 shl 16)+670,(20 shl 16)+520,,,caption ;создание окна + + stdcall [buf2d_draw], buf_0 + + mcall 12,2 + popad + ret + +head_f_i: +head_f_l db 'Системная ошибка',0 + +system_dir0 db '/sys/lib/' +name_buf2d db 'buf2d.obj',0 +err_message_found_lib0 db 'Не удалось найти библиотеку buf2d.obj',0 +err_message_import0 db 'Ошибка при импорте библиотеки buf2d.obj',0 + +system_dir1 db '/sys/lib/' +name_libimg db 'libimg.obj',0 +err_message_found_lib1 db 'Не удалось найти библиотеку libimg.obj',0 +err_message_import1 db 'Ошибка при импорте библиотеки libimg.obj',0 + +;library structures +l_libs_start: + lib0 l_libs name_buf2d, sys_path, file_name, system_dir0, err_message_found_lib0, head_f_l, import_buf2d_lib, err_message_import0, head_f_i + lib1 l_libs name_libimg, sys_path, file_name, system_dir1, err_message_found_lib1, head_f_l, import_libimg, err_message_import1, head_f_i +load_lib_end: + +align 4 +button: + mcall 17 ;получить код нажатой кнопки + cmp ah,1 + jne still +.exit: + stdcall [buf2d_delete],buf_0 ;удаляем буфер + stdcall [buf2d_delete],buf_1 ;удаляем буфер + mcall -1 ;выход из программы + +image_data dd 0 ;память для преобразования картинки функциями libimg +image_data_gray dd 0 ;память с преобразованным изображением в формате 8-bit +image_data_rgb dd 0 ;память с преобразованным изображением в формате rgb +image_data_foto dd 0 + +run_file_70 FileInfoBlock +caption db 'Draw text 13.09.11',0 ;подпись окна +sc system_colors ;системные цвета + +align 4 +buf_0: + dd 0 ;указатель на буфер изображения + dw 5 ;+4 left + dw 5 ;+6 top + dd 640 ;+8 w + dd 480 ;+12 h + dd 0xffffff ;+16 color + db 24 ;+20 bit in pixel + +align 4 +buf_1: + dd 0 ;указатель на буфер изображения + dw 25 ;+4 left + dw 25 ;+6 top + dd 128 ;+8 w + dd 144 ;+12 h + dd 0 ;+16 color + db 24 ;+20 bit in pixel + +some_text db 'Пример вывода теста в буфер, возможен вывод:',13,13 +db ' * в несколько строк',13 +db ' * можно задавать цвет текста',13,13 +db 'Сегодня 13 сентября 2011.',0 + +align 4 +import_libimg: + dd alib_init1 + img_is_img dd aimg_is_img + img_info dd aimg_info + img_from_file dd aimg_from_file + img_to_file dd aimg_to_file + img_from_rgb dd aimg_from_rgb + img_to_rgb dd aimg_to_rgb + img_to_rgb2 dd aimg_to_rgb2 + img_decode dd aimg_decode + img_encode dd aimg_encode + img_create dd aimg_create + img_destroy dd aimg_destroy + img_destroy_layer dd aimg_destroy_layer + img_count dd aimg_count + img_lock_bits dd aimg_lock_bits + img_unlock_bits dd aimg_unlock_bits + img_flip dd aimg_flip + img_flip_layer dd aimg_flip_layer + img_rotate dd aimg_rotate + img_rotate_layer dd aimg_rotate_layer + img_draw dd aimg_draw + + dd 0,0 + alib_init1 db 'lib_init',0 + aimg_is_img db 'img_is_img',0 ;определяет по данным, может ли библиотека сделать из них изображение + aimg_info db 'img_info',0 + aimg_from_file db 'img_from_file',0 + aimg_to_file db 'img_to_file',0 + aimg_from_rgb db 'img_from_rgb',0 + aimg_to_rgb db 'img_to_rgb',0 ;преобразование изображения в данные RGB + aimg_to_rgb2 db 'img_to_rgb2',0 + aimg_decode db 'img_decode',0 ;автоматически определяет формат графических данных + aimg_encode db 'img_encode',0 + aimg_create db 'img_create',0 + aimg_destroy db 'img_destroy',0 + aimg_destroy_layer db 'img_destroy_layer',0 + aimg_count db 'img_count',0 + aimg_lock_bits db 'img_lock_bits',0 + aimg_unlock_bits db 'img_unlock_bits',0 + aimg_flip db 'img_flip',0 + aimg_flip_layer db 'img_flip_layer',0 + aimg_rotate db 'img_rotate',0 + aimg_rotate_layer db 'img_rotate_layer',0 + aimg_draw db 'img_draw',0 + +align 4 +import_buf2d_lib: + dd sz_lib_init + buf2d_create dd sz_buf2d_create + buf2d_create_f_img dd sz_buf2d_create_f_img + buf2d_clear dd sz_buf2d_clear + buf2d_draw dd sz_buf2d_draw + buf2d_delete dd sz_buf2d_delete + buf2d_resize dd sz_buf2d_resize + buf2d_line dd sz_buf2d_line + buf2d_rect_by_size dd sz_buf2d_rect_by_size + buf2d_filled_rect_by_size dd sz_buf2d_filled_rect_by_size + buf2d_circle dd sz_buf2d_circle + buf2d_img_hdiv2 dd sz_buf2d_img_hdiv2 + buf2d_img_wdiv2 dd sz_buf2d_img_wdiv2 + buf2d_conv_24_to_8 dd sz_buf2d_conv_24_to_8 + buf2d_conv_24_to_32 dd sz_buf2d_conv_24_to_32 + buf2d_bit_blt dd sz_buf2d_bit_blt + buf2d_bit_blt_transp dd sz_buf2d_bit_blt_transp + buf2d_bit_blt_alpha dd sz_buf2d_bit_blt_alpha + buf2d_curve_bezier dd sz_buf2d_curve_bezier + buf2d_convert_text_matrix dd sz_buf2d_convert_text_matrix + buf2d_draw_text dd sz_buf2d_draw_text + buf2d_crop_color dd sz_buf2d_crop_color + buf2d_offset_h dd sz_buf2d_offset_h + buf2d_flood_fill dd sz_buf2d_flood_fill + buf2d_set_pixel dd sz_buf2d_set_pixel + + dd 0,0 + sz_lib_init db 'lib_init',0 + sz_buf2d_create db 'buf2d_create',0 + sz_buf2d_create_f_img db 'buf2d_create_f_img',0 + sz_buf2d_clear db 'buf2d_clear',0 + sz_buf2d_draw db 'buf2d_draw',0 + sz_buf2d_delete db 'buf2d_delete',0 + sz_buf2d_resize db 'buf2d_resize',0 + sz_buf2d_line db 'buf2d_line',0 + sz_buf2d_rect_by_size db 'buf2d_rect_by_size',0 + sz_buf2d_filled_rect_by_size db 'buf2d_filled_rect_by_size',0 + sz_buf2d_circle db 'buf2d_circle',0 + sz_buf2d_img_hdiv2 db 'buf2d_img_hdiv2',0 + sz_buf2d_img_wdiv2 db 'buf2d_img_wdiv2',0 + sz_buf2d_conv_24_to_8 db 'buf2d_conv_24_to_8',0 + sz_buf2d_conv_24_to_32 db 'buf2d_conv_24_to_32',0 + sz_buf2d_bit_blt db 'buf2d_bit_blt',0 + sz_buf2d_bit_blt_transp db 'buf2d_bit_blt_transp',0 + sz_buf2d_bit_blt_alpha db 'buf2d_bit_blt_alpha',0 + sz_buf2d_curve_bezier db 'buf2d_curve_bezier',0 + sz_buf2d_convert_text_matrix db 'buf2d_convert_text_matrix',0 + sz_buf2d_draw_text db 'buf2d_draw_text',0 + sz_buf2d_crop_color db 'buf2d_crop_color',0 + sz_buf2d_offset_h db 'buf2d_offset_h',0 + sz_buf2d_flood_fill db 'buf2d_flood_fill',0 + sz_buf2d_set_pixel db 'buf2d_set_pixel',0 + +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: \ No newline at end of file diff --git a/programs/develop/libraries/buf2d/trunk/examples/e4_graf_ed.asm b/programs/develop/libraries/buf2d/trunk/examples/e4_graf_ed.asm new file mode 100644 index 0000000000..2a54c361bd --- /dev/null +++ b/programs/develop/libraries/buf2d/trunk/examples/e4_graf_ed.asm @@ -0,0 +1,189 @@ +use32 + org 0x0 + db 'MENUET01' ;шфхэЄшЇ. шёяюыэ хьюую Їрщыр тёхуфр 8 срщЄ + dd 0x1 + dd start + dd i_end ;ЁрчьхЁ яЁшыюцхэш  + dd mem,stacktop + dd 0,cur_dir_path + +include '../../../../../macros.inc' +include '../../../../../proc32.inc' +include '../../../../../develop/libraries/box_lib/load_lib.mac' +include 'mem.inc' + +@use_library_mem mem.Alloc,mem.Free,mem.ReAlloc, 0 ;dll.Load + +buf2d_l equ word[edi+4] ;юЄёЄєя ёыхтр +buf2d_t equ word[edi+6] ;юЄёЄєя ётхЁїє + +align 4 +start: + load_library vectors_name, cur_dir_path, library_path, system_path, \ + err_message_found_lib, head_f_l, import_buf2d_lib, err_message_import, head_f_i + cmp eax,-1 + jz button.exit + + mcall 40,0x27 + mcall 48,3,sc,sizeof.system_colors ;яюыєўрхь ёшёЄхьэ√х ЎтхЄр + stdcall [buf2d_create], buf_0 ;ёючфрхь сєЇхЁ + +align 4 +red_win: + call draw_window + +align 4 +still: + mcall 10 + cmp al,0x1 ;шчь. яюыюцхэшх юъэр + jz red_win + cmp al,0x2 + jz key + cmp al,0x3 + jz button + cmp al,0x6 + jz mouse + jmp still + +align 4 +draw_window: + pushad + mcall 12,1 + + mov edx,[sc.work] + or edx,0x33000000 + mcall 0,(50 shl 16)+500,(30 shl 16)+370,,,caption + + stdcall [buf2d_draw], buf_0 + + mcall 12,2 + popad + ret + +align 4 +key: + mcall 2 +; cmp ah,27 ;Esc +; je button.exit + jmp still + +align 4 +button: + mcall 17 ;яюыєўшЄ№ ъюф эрцрЄющ ъэюяъш + cmp ah,1 + jne still +.exit: + stdcall [buf2d_delete],buf_0 ;єфры хь сєЇхЁ + mcall -1 ;т√їюф шч яЁюуЁрьь√ + +align 4 +mouse: + ;юсЁрсрЄ√трхь юъэю ЁхфръЄюЁр + mcall 37,2 ;get mouse buttons + cmp al,1 + jne @f + mcall 37,1 ;get mouse coords + mov ebx,eax + shr ebx,16 ;т eax ъююЁфшэрЄр ьш°ш яю юёш 'x' + and eax,0xffff ;т eax ъююЁфшэрЄр ьш°ш яю юёш 'y' + mov edi,buf_0 + sub ax,buf2d_t ;ёфтшурхь ъююЁфшэрЄ√ єўшЄ√тр  ёьх∙хэшх сєЇхЁр + sub bx,buf2d_l + + ;Ёшёютрэшх яЁш эрцрЄшш + ;stdcall [buf2d_circle], edi, ebx, eax, 20, 0xff0000 ;Ёшёєхь юъЁєцэюёЄ№ + ;stdcall [buf2d_flood_fill], edi, ebx, eax, 0, 0xff,0xff0000 ;чрыштър ЎтхЄюь + sub eax,5 + sub ebx,5 + stdcall [buf2d_filled_rect_by_size], edi, ebx,eax, 10,10, 0xff0000 ;Ёшёєхь яЁ ьюєуюы№эшъ + stdcall [buf2d_draw], edi ;юсэюты хь ¤ъЁрэ + @@: + jmp still + +caption db 'Press left mouse button',0 +sc system_colors ;ёшёЄхьэ√х ЎтхЄр + +;-------------------------------------------------- +align 4 +import_buf2d_lib: + dd sz_lib_init + buf2d_create dd sz_buf2d_create + buf2d_create_f_img dd sz_buf2d_create_f_img + buf2d_clear dd sz_buf2d_clear + buf2d_draw dd sz_buf2d_draw + buf2d_delete dd sz_buf2d_delete + buf2d_resize dd sz_buf2d_resize + buf2d_line dd sz_buf2d_line + buf2d_rect_by_size dd sz_buf2d_rect_by_size + buf2d_filled_rect_by_size dd sz_buf2d_filled_rect_by_size + buf2d_circle dd sz_buf2d_circle + buf2d_img_hdiv2 dd sz_buf2d_img_hdiv2 + buf2d_img_wdiv2 dd sz_buf2d_img_wdiv2 + buf2d_conv_24_to_8 dd sz_buf2d_conv_24_to_8 + buf2d_conv_24_to_32 dd sz_buf2d_conv_24_to_32 + buf2d_bit_blt dd sz_buf2d_bit_blt + buf2d_bit_blt_transp dd sz_buf2d_bit_blt_transp + buf2d_bit_blt_alpha dd sz_buf2d_bit_blt_alpha + buf2d_curve_bezier dd sz_buf2d_curve_bezier + buf2d_convert_text_matrix dd sz_buf2d_convert_text_matrix + buf2d_draw_text dd sz_buf2d_draw_text + buf2d_crop_color dd sz_buf2d_crop_color + buf2d_offset_h dd sz_buf2d_offset_h + buf2d_flood_fill dd sz_buf2d_flood_fill + buf2d_set_pixel dd sz_buf2d_set_pixel + + dd 0,0 + sz_lib_init db 'lib_init',0 + sz_buf2d_create db 'buf2d_create',0 + sz_buf2d_create_f_img db 'buf2d_create_f_img',0 + sz_buf2d_clear db 'buf2d_clear',0 + sz_buf2d_draw db 'buf2d_draw',0 + sz_buf2d_delete db 'buf2d_delete',0 + sz_buf2d_resize db 'buf2d_resize',0 + sz_buf2d_line db 'buf2d_line',0 + sz_buf2d_rect_by_size db 'buf2d_rect_by_size',0 + sz_buf2d_filled_rect_by_size db 'buf2d_filled_rect_by_size',0 + sz_buf2d_circle db 'buf2d_circle',0 + sz_buf2d_img_hdiv2 db 'buf2d_img_hdiv2',0 + sz_buf2d_img_wdiv2 db 'buf2d_img_wdiv2',0 + sz_buf2d_conv_24_to_8 db 'buf2d_conv_24_to_8',0 + sz_buf2d_conv_24_to_32 db 'buf2d_conv_24_to_32',0 + sz_buf2d_bit_blt db 'buf2d_bit_blt',0 + sz_buf2d_bit_blt_transp db 'buf2d_bit_blt_transp',0 + sz_buf2d_bit_blt_alpha db 'buf2d_bit_blt_alpha',0 + sz_buf2d_curve_bezier db 'buf2d_curve_bezier',0 + sz_buf2d_convert_text_matrix db 'buf2d_convert_text_matrix',0 + sz_buf2d_draw_text db 'buf2d_draw_text',0 + sz_buf2d_crop_color db 'buf2d_crop_color',0 + sz_buf2d_offset_h db 'buf2d_offset_h',0 + sz_buf2d_flood_fill db 'buf2d_flood_fill',0 + sz_buf2d_set_pixel db 'buf2d_set_pixel',0 + +align 4 +buf_0: + dd 0 ;єърчрЄхы№ эр сєЇхЁ шчюсЁрцхэш  + dw 5 ;+4 left + dw 5 ;+6 top + dd 480 ;+8 w + dd 320 ;+12 h +.color: dd 0xffffff ;+16 color + db 24 ;+20 bit in pixel + +;-------------------------------------------------- +system_path db '/sys/lib/' +vectors_name db 'buf2d.obj',0 +err_message_found_lib db 'Sorry I cannot load library buf2d.obj',0 +head_f_i: +head_f_l db 'System error',0 +err_message_import db 'Error on load import library buf2d.obj',0 +;-------------------------------------------------- + +i_end: ;ъюэхЎ ъюфр + rb 2*4096 +stacktop: + cur_dir_path: + rb 4096 + library_path: + rb 4096 +mem: + diff --git a/programs/develop/libraries/buf2d/trunk/examples/foto.jpg b/programs/develop/libraries/buf2d/trunk/examples/foto.jpg new file mode 100644 index 0000000000..10fd26979d Binary files /dev/null and b/programs/develop/libraries/buf2d/trunk/examples/foto.jpg differ diff --git a/programs/develop/libraries/buf2d/trunk/examples/img0.png b/programs/develop/libraries/buf2d/trunk/examples/img0.png new file mode 100644 index 0000000000..032884eaf7 Binary files /dev/null and b/programs/develop/libraries/buf2d/trunk/examples/img0.png differ diff --git a/programs/develop/libraries/buf2d/trunk/examples/img1.png b/programs/develop/libraries/buf2d/trunk/examples/img1.png new file mode 100644 index 0000000000..86db935c94 Binary files /dev/null and b/programs/develop/libraries/buf2d/trunk/examples/img1.png differ diff --git a/programs/develop/libraries/buf2d/trunk/examples/mem.inc b/programs/develop/libraries/buf2d/trunk/examples/mem.inc new file mode 100644 index 0000000000..ec78fbf7f6 --- /dev/null +++ b/programs/develop/libraries/buf2d/trunk/examples/mem.inc @@ -0,0 +1,48 @@ +;----------------------------------------------------------------------------- +proc mem.Alloc,size ;///////////////////////////////////////////////////////// +;----------------------------------------------------------------------------- + push ebx ecx + mov ecx,[size] + ;*** add ecx,4 + mcall 68,12 + ;*** add ecx,-4 + ;*** mov [eax],ecx + ;*** add eax,4 + pop ecx ebx + ret +endp + +;----------------------------------------------------------------------------- +proc mem.ReAlloc,mptr,size ;////////////////////////////////////////////////// +;----------------------------------------------------------------------------- + push ebx ecx edx + mov ecx,[size] + or ecx,ecx + jz @f + ;*** add ecx,4 + @@: mov edx,[mptr] + or edx,edx + jz @f + ;*** add edx,-4 + @@: mcall 68,20 + or eax,eax + jz @f + ;*** add ecx,-4 + ;*** mov [eax],ecx + ;*** add eax,4 + @@: pop edx ecx ebx + ret +endp + +;----------------------------------------------------------------------------- +proc mem.Free,mptr ;////////////////////////////////////////////////////////// +;----------------------------------------------------------------------------- + push ebx ecx + mov ecx,[mptr] + or ecx,ecx + jz @f + ;*** add ecx,-4 + @@: mcall 68,13 + pop ecx ebx + ret +endp