/programs/media/animage/trunk/animage.asm |
---|
1,6 → 1,10 |
;******************************************************* |
;**************GRAPHICS EDITOR ANIMAGE ***************** |
;******************************************************* |
; version: 1.4 |
; last update: 12/03/2016 |
; changes: Use library 'libimg.obj' |
;-------------------------------------------------------- |
; version: 1.3 |
; last update: 05/10/2010 |
; written by: Marat Zakiyanov aka Mario79, aka Mario |
20,25 → 24,28 |
use32 |
org 0x0 |
db 'MENUET01' |
dd 0x1 |
dd START |
dd IM_END |
dd I_END ;0x19000;100 kb |
dd stacktop ;0x19000; |
dd I_END |
dd stacktop |
dd file_path ;parameters |
dd cur_dir_path |
include '../../../config.inc' ;for nightbuild |
include '..\..\..\macros.inc' |
include '../../../macros.inc' |
include '../../../proc32.inc' |
include '../../../KOSfuncs.inc' |
include '../../../develop/libraries/box_lib/load_lib.mac' |
@use_library |
include '../../../dll.inc' |
include '../../../libio.inc' |
@use_library_mem mem.Alloc,mem.Free,mem.ReAlloc,dll.Load |
COLOR_ORDER equ MENUETOS |
include 'gif_lite.inc' |
include 'bmplib.inc' |
;include 'dialog.inc' |
include 'dialog2.inc' |
include 'design.inc' |
include 'graphlib.inc' |
78,13 → 85,13 |
;--------------------------------------------------------- |
;---------Check loading of file from parameters----------- |
;--------------------------------------------------------- |
; mov eax,parameters |
; mov ebx,file_path |
; call check_loading_from_parameters |
mov eax,file_path |
cmp [eax],byte 0 |
jz @f |
call load_picture |
call MovePictureToWorkScreen |
mov [Scroll1CoordinatX],9 |
mov [Scroll2CoordinatY],89 |
@@: |
;--------------------------------------------------------------------- |
171,6 → 178,7 |
dd 0 |
panel_picture: |
file 'panel_buttons.gif' |
.end: |
;****************cursors****************** |
brush_cursor: |
file 'brush.cur' |
314,31 → 322,15 |
CursorsID rd 10 |
;--------------------------------------------------------------------- |
align 4 |
file_path: |
rb 4096 |
file_path rb 4096 |
filename_area rb 256 |
temp_dir_pach rb 4096 |
library_path rb 4096 |
cur_dir_path rb 4096 |
procinfo: rb 1024 |
;--------------------------------------------------------------------- |
align 4 |
filename_area: |
rb 256 |
;--------------------------------------------------------------------- |
align 4 |
temp_dir_pach: |
rb 4096 |
;--------------------------------------------------------------------- |
align 4 |
library_path: |
rb 4096 |
;--------------------------------------------------------------------- |
align 4 |
cur_dir_path: |
rb 4096 |
;--------------------------------------------------------------------- |
align 4 |
procinfo: |
rb 1024 |
;--------------------------------------------------------------------- |
align 4 |
rb 4096 |
stacktop: |
;--------------------------------------------------------------------- |
I_END: |
/programs/media/animage/trunk/bmplib.inc |
---|
1,236 → 1,4 |
;************************************************************************** |
;**********************DECODING BMP FILE(1,4,8,24 bits)********************* |
;*************************************************************************** |
; BMPTOIMG -Convert BMP format TO IMG format |
;*************************************************************************** |
bmptoimg: |
mov [bmp_load_area],esi |
mov [img_dest_area],edi |
xor eax,eax |
mov ax,word[esi+28] |
mov ebx,[esi+14] |
mov ecx,[esi+18] |
mov edx,[esi+22] |
mov [bmp_bits_per_pixel],ax |
mov [bmp_first_structure_size],ebx |
mov [Bmp_SizeY],edx |
mov [Bmp_SizeX],ecx |
xor eax,eax |
mov ax,[esi+28] |
mul dword [esi+18] |
add eax,31 |
shr eax,5 |
mov dword [bmptoimg_data_area_dwps],eax ;dwps-doublewords per string |
shl eax,2 |
mov dword [bmptoimg_data_area_bps],eax ;bps-bytes per string |
cmp dword [esi+34],0 |
jne yespicsize ;if picture size is defined |
mul dword [esi+22] |
mov dword [esi+34],eax |
yespicsize: |
mov eax,[bmp_load_area] |
add eax, [esi+10] ;how mach bytes to begin bitmap |
add eax, [esi+34] ;size of bitmap in BMP file |
mov dword [bmptoimg_data_area_eop],eax ;eop-end of picture in file |
;calculate bytes per string |
mov eax, [esi+18] |
lea eax,[eax+2*eax] ;3x pixels in eax |
mov [bmp_bytes_per_string],eax |
mov esi,dword [bmptoimg_data_area_eop] |
sub esi,dword [bmptoimg_data_area_bps] |
mov ebp,[img_dest_area] |
mov edi,[img_dest_area] |
mov ebx,[bmp_load_area] |
add ebx, [bmp_first_structure_size] |
add ebx,14 ;in ebx start of color table |
cmp [bmp_bits_per_pixel],24 |
je convert_to_24bpp |
cmp [bmp_bits_per_pixel],8 |
je convert_to_8bpp |
cmp [bmp_bits_per_pixel],4 |
je convert_to_4bpp |
cmp [bmp_bits_per_pixel],1 |
je convert_to_1bpp |
jmp end_bmp |
;-------------------------------------------------- |
;-----------Decoding 24 bit BMP file--------------- |
;-------------------------------------------------- |
convert_to_24bpp: |
mov ebx,[Bmp_SizeY] |
loop_convert_to_24bpp_y: |
mov edi,ebp |
mov ecx,[bmptoimg_data_area_dwps] |
cld |
rep movsd |
sub esi,[bmptoimg_data_area_bps] |
sub esi,[bmptoimg_data_area_bps] |
add ebp,eax |
dec ebx |
jnz loop_convert_to_24bpp_y |
jmp end_bmp |
;----------------------------------------------------- |
;--------------Decoding 8 bits BMP file--------------- |
;----------------------------------------------------- |
convert_to_8bpp: |
mov ebp,[Bmp_SizeY] |
loop_convert_8bpp_y: |
mov ecx,[bmptoimg_data_area_bps] |
push edi |
loop_convert_8bpp_x: |
xor eax,eax |
mov al,byte [esi] |
call converttable |
inc esi |
add edi,3 |
dec ecx |
jnz loop_convert_8bpp_x |
pop edi |
add edi,[bmp_bytes_per_string] |
sub esi,[bmptoimg_data_area_bps] |
sub esi,[bmptoimg_data_area_bps] |
dec ebp |
jnz loop_convert_8bpp_y |
jmp end_bmp |
;----------------------------------------------------- |
;--------------Decoding 4 bits BMP file--------------- |
;----------------------------------------------------- |
convert_to_4bpp: |
mov ebp,[Bmp_SizeY] |
loop_convert_4bpp_y: |
mov ecx,[bmptoimg_data_area_bps] |
push edi |
loop_convert_4bpp_x: |
mov [Bmp_save1],ecx |
xor eax,eax |
mov al,byte [esi] |
xor ecx,ecx |
mov cl,al |
shr al,4 ;first pixel in byte |
and cl,0xf ;second pixel in byte |
call converttable ;draw first pixel of byte |
mov eax,ecx ;move second pixel to register al and draw |
add edi,3 |
call converttable ;draw second pixel of byte |
add edi,3 |
mov ecx,[Bmp_save1] |
inc esi |
dec ecx |
jnz loop_convert_4bpp_x |
pop edi |
add edi,[bmp_bytes_per_string] |
sub esi,[bmptoimg_data_area_bps] |
sub esi,[bmptoimg_data_area_bps] |
dec ebp |
jnz loop_convert_4bpp_y |
jmp end_bmp |
;----------------------------------------------------- |
;---------------Decoding 1 bit BMP file--------------- |
;----------------------------------------------------- |
convert_to_1bpp: |
mov ebp,[Bmp_SizeY] |
loop_convert_1bpp_y: |
mov ecx,[bmptoimg_data_area_bps] |
push edi |
loop_convert_1bpp_x: |
xor eax,eax |
mov al,byte [esi] |
mov [Bmp_save1],ecx |
mov ecx,eax |
mov edx,7 |
nextbit: |
xor eax,eax |
bt ecx,edx |
jnc noaddelem |
inc eax |
noaddelem: |
push edx |
call converttable |
pop edx |
add edi,3 |
dec edx |
jns nextbit |
mov ecx,[Bmp_save1] |
inc esi |
dec ecx |
jnz loop_convert_1bpp_x |
pop edi |
add edi,[bmp_bytes_per_string] |
sub esi,[bmptoimg_data_area_bps] |
sub esi,[bmptoimg_data_area_bps] |
dec ebp |
jnz loop_convert_1bpp_y |
jmp end_bmp |
;----------------------------------------------------- |
converttable: |
shl eax,2 |
add eax,ebx |
mov edx, dword [eax] |
mov [edi],edx |
ret |
;----------------------------------------------------- |
; DATA AREA |
bmptoimg_data_area_bps dd 0 |
bmptoimg_data_area_dwps dd 0 |
bmptoimg_data_area_eop dd 0 |
bmp_load_area dd 0 |
img_dest_area dd 0 |
bmp_bits_per_pixel dw 0 |
bmp_first_structure_size dd 0 |
bmp_bytes_per_string dd 0 |
end_bmp: |
ret |
;*************************************************************************** |
;*******************CODING BMP FILE(1,4,8,24 bits)************************** |
;*************************************************************************** |
/programs/media/animage/trunk/files.inc |
---|
116,16 → 116,8 |
;-------------file information structure------------------- |
;---------------------------------------------------------- |
file_information: |
file_information FileInfoBlock 5,0,0,0,bufer_for_info,0,filepath |
dd 5 |
dd 0 |
dd 0 |
dd 0 |
dd bufer_for_info |
dd 0 |
dd filepath |
filepath rb 1040 |
bufer_for_info rd 10 |
/programs/media/animage/trunk/icons.inc |
---|
2,12 → 2,12 |
;---load icons in memory and draw icons on panel----------- |
;----------------------------------------------------------- |
load_icons: |
mov esi,panel_picture |
stdcall [img_decode], panel_picture, panel_picture.end-panel_picture, 0 |
mov ebx,eax |
mov edi,[ScreenPointer] |
add edi,(1200*1000*3) |
;mov edi,[PointerToIcons] |
call ReadGIF |
add edi,(1200*1000*3)+8 |
stdcall [img_to_rgb2], ebx,edi ;преобразуем изображение к формату rgb |
stdcall [img_destroy], ebx ;удаляем временный буфер с параметрами изображения |
ret |
draw_icons: |
/programs/media/animage/trunk/lib_data.inc |
---|
1,19 → 1,27 |
;--------------------------------------------------------------------- |
system_dir_ProcLib db '/sys/lib/proc_lib.obj',0 |
;--------------------------------------------------------------------- |
head_f_i: |
head_f_l db 'System error',0 |
;--------------------------------------------------------------------- |
system_dir_1: db '/sys/lib/libimg.obj',0 |
err_message_found_lib_1 db 39,'libimg.obj',39,' - Not found!',0 |
err_message_import_1 db 39,'libimg.obj',39,' - Wrong import!',0 |
err_message_found_lib2 db 'proc_lib.obj - Not found!',0 |
system_dir_ProcLib db '/sys/lib/proc_lib.obj',0 |
err_message_found_lib2 db 39,'proc_lib.obj',39,' - Not found!',0 |
err_message_import2 db 39,'proc_lib.obj',39,' - Wrong import!',0 |
err_message_import2 db 'proc_lib.obj - Wrong import!',0 |
system_dir_3: db '/sys/lib/kmenu.obj',0 |
err_message_found_lib_3 db 39,'kmenu.obj',39,' - Not found!',0 |
err_message_import_3 db 39,'kmenu.obj',39,' - Wrong import!',0 |
;--------------------------------------------------------------------- |
align 4 |
l_libs_start: |
library02 l_libs system_dir_ProcLib+9, cur_dir_path, library_path, system_dir_ProcLib, \ |
lib1 l_libs system_dir_1+9, cur_dir_path, library_path, system_dir_1,\ |
err_message_found_lib_1, head_f_l, import_libimg, err_message_import_1, head_f_i |
lib2 l_libs system_dir_ProcLib+9, cur_dir_path, library_path, system_dir_ProcLib, \ |
err_message_found_lib2, head_f_l, ProcLib_import, err_message_import2, head_f_i |
lib3 l_libs system_dir_3+9, cur_dir_path, library_path, system_dir_3,\ |
err_message_found_lib_3, head_f_l, import_libkmenu, err_message_import_3, head_f_i |
end_l_libs: |
;--------------------------------------------------------------------- |
align 4 |
53,6 → 61,8 |
.1: |
db 'BMP',0 |
db 'GIF',0 |
db 'JPG',0 |
db 'PNG',0 |
.end: |
db 0 |
61,6 → 71,52 |
path4 db '/sys/noname.bmp',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 |
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 |
ProcLib_import: |
OpenDialog_Init dd aOpenDialog_Init |
OpenDialog_Start dd aOpenDialog_Start |
70,4 → 126,28 |
aOpenDialog_Init db 'OpenDialog_init',0 |
aOpenDialog_Start db 'OpenDialog_start',0 |
;aOpenDialog_Version db 'Version_OpenDialog',0 |
align 4 |
import_libkmenu: |
kmenu_init dd akmenu_init |
kmainmenu_draw dd akmainmenu_draw |
kmainmenu_dispatch_cursorevent dd akmainmenu_dispatch_cursorevent |
ksubmenu_new dd aksubmenu_new |
ksubmenu_delete dd aksubmenu_delete |
ksubmenu_draw dd aksubmenu_draw |
ksubmenu_add dd aksubmenu_add |
kmenuitem_new dd akmenuitem_new |
kmenuitem_delete dd akmenuitem_delete |
kmenuitem_draw dd akmenuitem_draw |
dd 0,0 |
akmenu_init db 'kmenu_init',0 |
akmainmenu_draw db 'kmainmenu_draw',0 |
akmainmenu_dispatch_cursorevent db 'kmainmenu_dispatch_cursorevent',0 |
aksubmenu_new db 'ksubmenu_new',0 |
aksubmenu_delete db 'ksubmenu_delete',0 |
aksubmenu_draw db 'ksubmenu_draw',0 |
aksubmenu_add db 'ksubmenu_add',0 |
akmenuitem_new db 'kmenuitem_new',0 |
akmenuitem_delete db 'kmenuitem_delete',0 |
akmenuitem_draw db 'kmenuitem_draw',0 |
;--------------------------------------------------------------------- |
/programs/media/animage/trunk/load_from_parameters.inc |
---|
1,88 → 1,54 |
; load picture from file to memory |
align 4 |
open_b rb 560 |
load_picture: |
mov eax,file_path |
mov ebx,[ScreenPointer] |
add ebx,0x10000 |
mov [file_information.Function], SSF_GET_INFO |
mov [file_information.Position], 0 |
mov [file_information.Flags], 0 |
mov dword[file_information.Count], 0 |
mov dword[file_information.Buffer], open_b |
mov byte[file_information+20], 0 |
mov dword[file_information.FileName], file_path |
mcall SF_FILE,file_information |
or eax,eax |
jnz .end_open |
call load_heading_of_file |
mov esi,[ScreenPointer] |
add esi,0x10000 |
;-------------is this BMP file ?---------------- |
xor eax,eax |
mov ax,[esi] |
mov [type],ax |
cmp [type],word 'BM' |
jne no_bmp_file_1 |
xor eax,eax |
xor ebx,ebx |
mov eax,[esi+18] |
mov ebx,[esi+22] |
mov [Picture_SizeX],eax |
mov [Picture_SizeY],ebx |
jmp exit_type_1 |
no_bmp_file_1: |
;-------------is this GIF file ?---------------- |
xor eax,eax |
mov ax,[esi] |
mov [type],ax |
cmp [type],'GI' |
jne no_gif_file_1 |
add esi,6 |
xor eax,eax |
xor ebx,ebx |
mov ax,word[esi] |
mov bx,word[esi+2] |
mov [Picture_SizeX],eax |
mov [Picture_SizeY],ebx |
jmp exit_type_1 |
no_gif_file_1: |
jmp no_unpakcing_file_1 |
exit_type_1: |
;---------------------------------------------------------- |
;Get momory for unpacking picture and for picture's bufers |
;---------------------------------------------------------- |
call GetMemory |
;---------------------------------------------------------- |
;--------------------Load file in memory------------------- |
;---------------------------------------------------------- |
mov eax,file_path |
mov ebx,[PointerToCopyPicture] |
add ebx,1000 |
call load_file |
;---------------------------------------------------------- |
;-------------------Unpacking picture---------------------- |
;---------------------------------------------------------- |
mov esi,[PointerToCopyPicture] |
add esi,1000 |
mov edi,[PointerToPicture] |
mov ecx,dword[open_b+32] ;+32 qword: размер файла в байтах |
add ecx,(1200*1000)*3+50*(20*20*3)+500000+16000+0x4000 |
mcall SF_SYS_MISC,SSF_MEM_REALLOC,,[ScreenPointer] |
mov [ScreenPointer],eax |
add eax,0x10000 |
sub ecx,(1200*1000)*3+50*(20*20*3)+500000+16000+0x4000 |
mov [file_information.Function], SSF_READ_FILE |
mov [file_information.Position], 0 |
mov [file_information.Flags], 0 |
mov [file_information.Count], ecx |
mov [file_information.Buffer], eax |
mov byte[file_information+20], 0 |
mov [file_information.FileName], file_path |
mcall SF_FILE,file_information ;загружаем файл изображения |
cmp ebx,0xffffffff |
je .end_open |
;определяем вид изображения и пишем его параметры |
mov eax,[ScreenPointer] |
cmp [type],'BM' |
jne no_unpakcing_bmp_file_1 |
;BMP DECODER |
call bmptoimg |
add eax,0x10000 |
stdcall [img_decode], eax,ebx,0 |
push eax |
;определяем размер декодированного изображения |
mov ecx,[eax+4] ;+4 = image width |
mov dword[Picture_SizeX],ecx |
mov eax,[eax+8] ;+8 = image height |
mov dword[Picture_SizeY],eax |
imul ecx,eax |
imul ecx,15 |
add ecx,(1200*1000)*3+50*(20*20*3)+500000+16000+0x4000 |
mcall SF_SYS_MISC,SSF_MEM_REALLOC,,[ScreenPointer] |
mov [ScreenPointer],eax |
call prepare_data_pointers |
pop ebx |
stdcall [img_to_rgb2], ebx,[PointerToPicture] ;преобразуем изображение к формату rgb |
stdcall [img_destroy], ebx ;удаляем временный буфер с параметрами изображения |
mov [save_flag],1 |
jmp no_unpakcing_file_1 |
no_unpakcing_bmp_file_1: |
cmp [type],'GI' |
jne no_unpakcing_file_1 |
;GIF DECODER |
sub edi,8 |
call ReadGIF |
mov [save_flag],1 |
no_unpakcing_file_1: |
call MovePictureToWorkScreen |
mov [Scroll1CoordinatX],9 |
mov [Scroll2CoordinatY],89 |
.end_open: |
ret |
/programs/media/animage/trunk/menu_instruments.inc |
---|
164,99 → 164,14 |
cmp [OpenDialog_data.status],1 |
jne still |
;--------------------------------------------------------------------- |
open_1: |
;open_1: |
mcall 40,0x80000027 ; 100111b |
mov eax,file_path |
mov ebx,[ScreenPointer] |
add ebx,0x10000 |
call load_picture |
call load_heading_of_file |
mov esi,[ScreenPointer] |
add esi,0x10000 |
;-------------is this BMP file ?---------------- |
xor eax,eax |
mov ax,[esi] |
mov [type],ax |
cmp [type],word 'BM' |
jne no_bmp_file |
xor eax,eax |
xor ebx,ebx |
mov eax,[esi+18] |
mov ebx,[esi+22] |
mov [Picture_SizeX],eax |
mov [Picture_SizeY],ebx |
jmp exit_type |
;--------------------------------------------------------------------- |
no_bmp_file: |
;-------------is this GIF file ?---------------- |
xor eax,eax |
mov ax,[esi] |
mov [type],ax |
cmp [type],'GI' |
jne no_gif_file |
add esi,6 |
xor eax,eax |
xor ebx,ebx |
mov ax,word[esi] |
mov bx,word[esi+2] |
mov [Picture_SizeX],eax |
mov [Picture_SizeY],ebx |
jmp exit_type |
;--------------------------------------------------------------------- |
no_gif_file: |
jmp no_unpakcing_file |
;--------------------------------------------------------------------- |
exit_type: |
;---------------------------------------------------------- |
;Get momory for unpacking picture and for picture's bufers |
;---------------------------------------------------------- |
call GetMemory |
;---------------------------------------------------------- |
;--------------------Load file in memory------------------- |
;---------------------------------------------------------- |
mov eax,file_path |
mov ebx,[PointerToCopyPicture] |
add ebx,1000 |
call load_file |
;---------------------------------------------------------- |
;-------------------Unpacking picture---------------------- |
;---------------------------------------------------------- |
mov esi,[PointerToCopyPicture] |
add esi,1000 |
mov edi,[PointerToPicture] |
mov eax,[ScreenPointer] |
cmp [type],'BM' |
jne no_unpakcing_bmp_file |
;BMP DECODER |
call bmptoimg |
mov [save_flag],1 |
jmp draw_1 |
;--------------------------------------------------------------------- |
no_unpakcing_bmp_file: |
cmp [type],'GI' |
jne no_unpakcing_file |
;GIF DECODER |
sub edi,8 |
call ReadGIF |
mov [save_flag],1 |
jmp draw_1 |
;--------------------------------------------------------------------- |
no_unpakcing_file: |
call load_icons |
draw_1: |
call drawwin |
open_2: |
mov [Scroll1CoordinatX],9 |
mov [Scroll2CoordinatY],89 |
and [number_panel],0 |
/programs/media/animage/trunk/panel_data.inc |
---|
1,7 → 1,7 |
;********************************************************** |
;------------------TEXT DATA------------------------------- |
;********************************************************** |
name_of_program db 'ANIMAGE graphics editor v1.3',0 |
name_of_program db 'ANIMAGE graphics editor v1.4',0 |
mouse_pos_x db 'X=' |
mouse_pos_y db 'Y=' |
new_text1 db 'PICTURE SIZE X' |