Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 6327 → Rev 6328

/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'