diff --git a/programs/develop/libraries/libs-dev/.test/001/test001.asm b/programs/develop/libraries/libs-dev/.test/001/test001.asm
index 13aa0e42a7..b7c7cd6670 100644
--- a/programs/develop/libraries/libs-dev/.test/001/test001.asm
+++ b/programs/develop/libraries/libs-dev/.test/001/test001.asm
@@ -374,41 +374,41 @@ library \
libgfx,'libgfx.obj'
import libini, \
- ini.get_str,'ini.get_str',\
- ini.set_str,'ini.set_str',\
- ini.get_int,'ini.get_int',\
- ini.set_int,'ini.set_int',\
- ini.enum_sections,'ini.enum_sections',\
- ini.enum_keys,'ini.enum_keys'
+ ini.get_str,'ini_get_str',\
+ ini.set_str,'ini_set_str',\
+ ini.get_int,'ini_get_int',\
+ ini.set_int,'ini_set_int',\
+ ini.enum_sections,'ini_enum_sections',\
+ ini.enum_keys,'ini_enum_keys'
import libio, \
-\; file.aux.match_wildcard,'file.aux.match_wildcard',\
- file.find_first,'file.find_first',\
- file.find_next,'file.find_next',\
- file.find_close,'file.find_close',\
- file.open,'file.open',\
- file.seek,'file.seek',\
- file.write,'file.write',\
- file.truncate,'file.truncate',\
- file.close,'file.close'
+\; file.aux.match_wildcard,'file_aux_match_wildcard',\
+ file.find_first,'file_find_first',\
+ file.find_next,'file_find_next',\
+ file.find_close,'file_find_close',\
+ file.open,'file_open',\
+ file.seek,'file_seek',\
+ file.write,'file_write',\
+ file.truncate,'file_truncate',\
+ file.close,'file_close'
import libgfx, \
- gfx.open ,'gfx.open',\
- gfx.close ,'gfx.close',\
- gfx.pen.color ,'gfx.pen.color',\
- gfx.brush.color ,'gfx.brush.color',\
- gfx.pixel ,'gfx.pixel',\
- gfx.move.to ,'gfx.move.to',\
- gfx.line.to ,'gfx.line.to',\
- gfx.line ,'gfx.line',\
- gfx.polyline ,'gfx.polyline',\
- gfx.polyline.to ,'gfx.polyline.to',\
- gfx.fillrect ,'gfx.fillrect',\
- gfx.fillrect.ex ,'gfx.fillrect.ex',\
- gfx.framerect ,'gfx.framerect',\
- gfx.framerect.ex,'gfx.framerect.ex',\
- gfx.rectangle ,'gfx.rectangle',\
- gfx.rectangle.ex,'gfx.rectangle.ex'
+ gfx.open ,'gfx_open',\
+ gfx.close ,'gfx_close',\
+ gfx.pen.color ,'gfx_pen_color',\
+ gfx.brush.color ,'gfx_brush.color',\
+ gfx.pixel ,'gfx_pixel',\
+ gfx.move.to ,'gfx_move_to',\
+ gfx.line.to ,'gfx_line_to',\
+ gfx.line ,'gfx_line',\
+ gfx.polyline ,'gfx_polyline',\
+ gfx.polyline.to ,'gfx_polyline_to',\
+ gfx.fillrect ,'gfx_fillrect',\
+ gfx.fillrect.ex ,'gfx_fillrect_ex',\
+ gfx.framerect ,'gfx_framerect',\
+ gfx.framerect.ex,'gfx_framerect_ex',\
+ gfx.rectangle ,'gfx_rectangle',\
+ gfx.rectangle.ex,'gfx_rectangle_ex'
I_END:
diff --git a/programs/develop/libraries/libs-dev/.test/dll.inc b/programs/develop/libraries/libs-dev/.test/dll.inc
index e1cb98d178..5f13fbbc16 100644
--- a/programs/develop/libraries/libs-dev/.test/dll.inc
+++ b/programs/develop/libraries/libs-dev/.test/dll.inc
@@ -15,7 +15,13 @@ proc dll.Load, import_table:dword
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
diff --git a/programs/develop/libraries/libs-dev/libgfx/libgfx.asm b/programs/develop/libraries/libs-dev/libgfx/libgfx.asm
index 5ce938fcff..076da0e79b 100644
--- a/programs/develop/libraries/libs-dev/libgfx/libgfx.asm
+++ b/programs/develop/libraries/libs-dev/libgfx/libgfx.asm
@@ -423,20 +423,20 @@ align 16
export \
lib_init , 'lib_init' , \
- 0x01000000 , 'version' , \
- gfx.open , 'gfx.open' , \
- gfx.close , 'gfx.close' , \
- gfx.pen.color , 'gfx.pen.color' , \
- gfx.brush.color , 'gfx.brush.color' , \
- gfx.pixel , 'gfx.pixel' , \
- gfx.move.to , 'gfx.move.to' , \
- gfx.line.to , 'gfx.line.to' , \
- gfx.line , 'gfx.line' , \
- gfx.polyline , 'gfx.polyline' , \
- gfx.polyline.to , 'gfx.polyline.to' , \
- gfx.fillrect , 'gfx.fillrect' , \
- gfx.fillrect.ex , 'gfx.fillrect.ex' , \
- gfx.framerect , 'gfx.framerect' , \
- gfx.framerect.ex , 'gfx.framerect.ex' , \
- gfx.rectangle , 'gfx.rectangle' , \
- gfx.rectangle.ex , 'gfx.rectangle.ex'
+ 0x00020002 , 'version' , \
+ gfx.open , 'gfx_open' , \
+ gfx.close , 'gfx_close' , \
+ gfx.pen.color , 'gfx_pen_color' , \
+ gfx.brush.color , 'gfx_brush_color' , \
+ gfx.pixel , 'gfx_pixel' , \
+ gfx.move.to , 'gfx_move_to' , \
+ gfx.line.to , 'gfx_line_to' , \
+ gfx.line , 'gfx_line' , \
+ gfx.polyline , 'gfx_polyline' , \
+ gfx.polyline.to , 'gfx_polyline_to' , \
+ gfx.fillrect , 'gfx_fillrect' , \
+ gfx.fillrect.ex , 'gfx_fillrect_ex' , \
+ gfx.framerect , 'gfx_framerect' , \
+ gfx.framerect.ex , 'gfx_framerect_ex' , \
+ gfx.rectangle , 'gfx_rectangle' , \
+ gfx.rectangle.ex , 'gfx_rectangle_ex'
diff --git a/programs/develop/libraries/libs-dev/libimg/bmp/bmp.asm b/programs/develop/libraries/libs-dev/libimg/bmp/bmp.asm
index b52c6e45d7..5d55801ae9 100644
--- a/programs/develop/libraries/libs-dev/libimg/bmp/bmp.asm
+++ b/programs/develop/libraries/libs-dev/libimg/bmp/bmp.asm
@@ -57,7 +57,7 @@ img.is.bmp:
;endp
;;================================================================================================;;
-proc img.decode.bmp _data, _length ;//////////////////////////////////////////////////////////////;;
+proc img.decode.bmp _data, _length, _options ;////////////////////////////////////////////////////;;
;;------------------------------------------------------------------------------------------------;;
;? Decode data into image if it contains correctly formed raw data in BMP format ;;
;;------------------------------------------------------------------------------------------------;;
@@ -67,71 +67,77 @@ proc img.decode.bmp _data, _length ;////////////////////////////////////////////
;< eax = 0 (error) or pointer to image ;;
;;================================================================================================;;
locals
+ length_rest dd ?
img dd ?
bTopDown db ?
+ bIsIco db ?
endl
+img.decode.bmp.length_rest equ length_rest
+ mov [bIsIco], 0
+.common: ; common place for BMP and ICO
push ebx esi edi
-; img.is.bmp has been already called by img.decode
-; stdcall img.is.bmp, [_data], [_length]
-; or eax, eax
-; jz .error
-
mov ebx, [_data]
-; cmp [ebx + bmp.Header.info.Compression], bmp.BI_RGB
-; je @f
-; mov eax, [ebx + bmp.Header.file.Size]
-; cmp eax, [_length]
-; jne .error
-; @@:
+ cmp [bIsIco], 0
+ jnz @f
+ add ebx, sizeof.bmp.FileHeader
+ sub [_length], sizeof.bmp.FileHeader
+ @@:
- mov eax, [ebx + bmp.Header.info.Size]
+ mov eax, [ebx + bmp.InfoHeader.Size]
; sanity check: file length must be greater than size of headers
- add eax, sizeof.bmp.FileHeader
cmp [_length], eax
jbe .error
mov [bTopDown], 0
- cmp eax, sizeof.bmp.FileHeader + 12
+ cmp eax, 12
jz .old1
- cmp eax, sizeof.bmp.FileHeader + 40
+ cmp eax, 40
jz .normal
- cmp eax, sizeof.bmp.FileHeader + 56
+ cmp eax, 56
jnz .error
; convert images with <= 8 bpp to 8bpp, other - to 32 bpp
.normal:
m2m eax, Image.bpp8
- cmp [ebx + bmp.Header.info.BitCount], 8
+ cmp byte [ebx + 14], 8 ; bit count
jbe @f
mov al, Image.bpp32
@@:
push eax
- mov eax, [ebx + bmp.Header.info.Height]
+ mov eax, [ebx + 8] ;[ebx + bmp.InfoHeader.Height]
test eax, eax
jns @f
inc [bTopDown]
neg eax
+@@:
+ cmp [bIsIco], 0 ; for icons Height is two times larger than image height
+ jz @f
+ shr eax, 1
@@:
pushd eax
- pushd [ebx + bmp.Header.info.Width]
+ pushd [ebx + 4] ;[ebx + bmp.InfoHeader.Width]
jmp .create
.old1:
m2m eax, Image.bpp8
- cmp [ebx + bmp.Header.info.OldBitCount], 8
+ cmp byte [ebx + 10], 8 ; bit count
jbe @f
mov al, Image.bpp32
@@:
push eax
- movsx eax, [ebx + bmp.Header.info.OldHeight]
+ movsx eax, word [ebx + 6] ;[ebx + bmp.InfoHeader.OldHeight]
test eax, eax
jns @f
inc [bTopDown]
neg eax
+@@:
+ cmp [bIsIco], 0 ; for icons Height is two times larger than image height
+ jz @f
+ shr eax, 1
@@:
push eax
- movzx eax, [ebx + bmp.Header.info.OldWidth]
+ movzx eax, word [ebx + 4] ;[ebx + bmp.InfoHeader.OldWidth]
push eax
.create:
call img.create
@@ -151,9 +157,9 @@ endl
xor eax, eax
rep stosd
pop edi
- lea esi, [ebx + sizeof.bmp.FileHeader]
- pushd [ebx + bmp.FileHeader.OffBits]
- mov ecx, [esi + bmp.InfoHeader.Size]
+ push edi
+ mov esi, ebx
+ mov ecx, [ebx] ;[ebx + bmp.InfoHeader.Size]
cmp ecx, 12
jz .old2
rep movsb
@@ -168,10 +174,28 @@ endl
movsd ; Planes+BitCount
.decode:
- pop eax
- mov esi, [_length]
- sub esi, eax
+ pop edi
+ cmp [bIsIco], 0
+ jnz @f
+ mov edi, [_length]
+ add edi, sizeof.bmp.FileHeader
+ mov esi, [ebx - sizeof.bmp.FileHeader + bmp.FileHeader.OffBits]
+ jmp .offset_calculated
+@@:
+ xor esi, esi
+ mov cl, byte [edi + bmp.Image.info.BitCount]
+ cmp cl, 8
+ ja @f
+ inc esi
+ add cl, 2
+ shl esi, cl
+@@:
+ add esi, [edi + bmp.Image.info.Size]
+ mov edi, [_length]
+.offset_calculated:
+ sub edi, esi
jbe .error.free
+ add esi, [_data]
mov eax, [edx + Image.Extended]
mov eax, [eax + bmp.Image.info.Compression]
@@ -181,13 +205,13 @@ endl
jmp .decoded
@@: cmp eax, bmp.BI_RLE8
jne @f
- cmp [ebx + bmp.Header.info.BitCount], 8
+ cmp word [ebx + 14], 8 ;bmp.InfoHeader.BitCount
jnz .error.free
stdcall ._.rle
jmp .decoded
@@: cmp eax, bmp.BI_RLE4
jne @f
- cmp [ebx + bmp.Header.info.BitCount], 4
+ cmp word [ebx + 14], 4
jnz .error.free
stdcall ._.rle
jmp .decoded
@@ -218,6 +242,11 @@ endl
stdcall img.flip, [img], FLIP_VERTICAL
@@:
mov eax, [img]
+ mov ecx, [length_rest] ; return length for ICO code
+ cmp [bIsIco], 0
+ jz @f
+ mov [esp + 4], esi ; return pointer to end-of-data for ICO code
+ @@:
pop edi esi ebx
ret
@@ -228,7 +257,7 @@ endl
endp
;;================================================================================================;;
-proc img.encode.bmp _img, _p_length ;/////////////////////////////////////////////////////////////;;
+proc img.encode.bmp _img, _p_length, _options ;///////////////////////////////////////////////////;;
;;------------------------------------------------------------------------------------------------;;
;? Encode image into raw data in BMP format ;;
;;------------------------------------------------------------------------------------------------;;
@@ -263,7 +292,6 @@ proc img.decode.bmp._.rgb ;/////////////////////////////////////////////////////
;;================================================================================================;;
mov ecx, [edx + Image.Extended]
mov [ecx + bmp.Image.info.AlphaMask], 0
- mov edi, [edx + Image.Data]
movzx eax, [ecx + bmp.Image.info.BitCount]
cmp eax, 32
@@ -297,10 +325,10 @@ img.decode.bmp._.rgb.24bpp:
and eax, not 3
mov ecx, [edx + Image.Height]
imul eax, ecx
- cmp esi, eax
+ sub edi, eax
jb img.decode.bmp._.rgb.error
- mov esi, ebx
- add esi, [ebx + bmp.Header.file.OffBits]
+ mov [img.decode.bmp.length_rest], edi
+ mov edi, [edx + Image.Data]
.next_line:
push ecx edx
@@ -447,19 +475,20 @@ img.decode.bmp._.rgb.prepare_palette:
and eax, not 3
mov ecx, [edx + Image.Height]
imul eax, ecx
- cmp esi, eax
+ sub edi, eax
jb .ret
- mov esi, [ebx + bmp.Header.info.Size]
- add esi, sizeof.bmp.FileHeader
- jc .ret
- mov eax, [ebx + bmp.Header.file.OffBits]
- sub eax, esi
- jc .ret
- push edi
+ mov [img.decode.bmp.length_rest], edi
+ push esi
+ sub esi, ebx
+ jc .ret.pop
+ sub esi, [ebx + bmp.InfoHeader.Size]
+ jc .ret.pop
+ mov eax, esi
mov edi, [edx + Image.Palette]
push ecx
mov ecx, 256
- cmp esi, sizeof.bmp.FileHeader + 12
+ mov esi, [ebx + bmp.InfoHeader.Size]
+ cmp esi, 12
jz .old
shr eax, 2
add esi, ebx
@@ -470,18 +499,21 @@ img.decode.bmp._.rgb.prepare_palette:
rep movsd
jmp .common
.old:
+ add esi, ebx
+@@:
movsd
dec esi
sub eax, 3
jbe @f
sub ecx, 1
- jnz .old
+ jnz @b
@@:
.common:
pop ecx
- pop edi
- mov esi, ebx
- add esi, [ebx + bmp.Header.file.OffBits]
+ mov edi, [edx + Image.Data]
+ clc
+.ret.pop:
+ pop esi
.ret:
ret
endp
@@ -507,15 +539,18 @@ endl
mov [abs_mode_addr], .absolute_mode.rle8
mov [enc_mode_addr], .encoded_mode.rle8
- cmp [ebx + bmp.Header.info.Compression], bmp.BI_RLE4
+ cmp [ebx + bmp.InfoHeader.Compression], bmp.BI_RLE4
jne @f
mov [abs_mode_addr], .absolute_mode.rle4
mov [enc_mode_addr], .encoded_mode.rle4
@@:
- push esi
+ push edi
xor eax, eax ; do not check file size in .prepare_palette
+ push ebp
+ mov ebp, [ebp] ; set parent stack frame
call img.decode.bmp._.rgb.prepare_palette
+ pop ebp
pop ecx ; ecx = rest bytes in file
jc .error
@@ -712,8 +747,6 @@ locals
delta dd ?
endl
- push edi
-
mov [delta], 4
mov eax, [edx + Image.Extended]
cmp [eax + bmp.Image.info.BitCount], 32
@@ -725,9 +758,12 @@ endl
mov ecx, [edx + Image.Width]
imul ecx, [edx + Image.Height]
imul ecx, [delta]
- cmp esi, ecx
+ sub edi, ecx
jb .error
+ mov ecx, [ebp] ; use parent stack frame
+ mov [ecx + img.decode.bmp.length_rest - ebp], edi ; !
+ push esi
mov esi, eax
mov ecx, [esi + bmp.Image.info.RedMask]
@@ -759,8 +795,7 @@ endl
mov [unshift.Alpha], al
mov edi, [edx + Image.Data]
- mov esi, ebx
- add esi, [ebx + bmp.Header.file.OffBits]
+ pop esi
;;------------------------------------------------------------------------------------------------;;
diff --git a/programs/develop/libraries/libs-dev/libimg/gif/gif.asm b/programs/develop/libraries/libs-dev/libimg/gif/gif.asm
index 07e4a2277d..68c394e6ad 100644
--- a/programs/develop/libraries/libs-dev/libimg/gif/gif.asm
+++ b/programs/develop/libraries/libs-dev/libimg/gif/gif.asm
@@ -72,7 +72,7 @@ proc img.is.gif _data, _length ;////////////////////////////////////////////////
endp
;;================================================================================================;;
-proc img.decode.gif _data, _length ;//////////////////////////////////////////////////////////////;;
+proc img.decode.gif _data, _length, _options ;////////////////////////////////////////////////////;;
;;------------------------------------------------------------------------------------------------;;
;? Decode data into image if it contains correctly formed raw data in GIF format ;;
;;------------------------------------------------------------------------------------------------;;
@@ -86,6 +86,7 @@ locals
cur_color_table_size dd ?
transparent_color dd ?
background_color dd ?
+ options_bgr dd ?
prev_palette dd ?
aux_palette dd ?
img dd ?
@@ -110,6 +111,7 @@ img.decode.gif._data equ _data
img.decode.gif.aux_img_data equ aux_img_data
img.decode.gif.aux_img_type equ aux_img_type
img.decode.gif.aux_palette equ aux_palette
+img.decode.gif.options_bgr equ options_bgr
; offset of _length parameter for child functions with ebp-based frame
; child saved ebp, return address, 3 saved registers, 14 local variables
img.decode.gif._length_child equ _length + 4 + 4 + 4*3 + 4*14
@@ -130,8 +132,16 @@ img.decode.gif.cur_color_table_size_child equ ebp + 4 + 4 + 4*3 + 4
mov [prev_num_colors], eax
lea eax, [background_color]
mov [prev_palette], eax
-; guard against incorrect gif files, which use Restore-To-Background disposal method, but do not define bgr color
- mov dword [eax], 0xFFFFFF
+; value for bgr color in transparent images
+ mov edx, 0xFFFFFF ; white bgr if no value given
+ mov ecx, [_options]
+ jecxz @f
+ cmp [ecx + ImageDecodeOptions.UsedSize], ImageDecodeOptions.BackgroundColor + 4
+ jb @f
+ mov edx, [ecx + ImageDecodeOptions.BackgroundColor]
+@@:
+ mov [options_bgr], edx
+ mov dword [eax], edx
; guard against incorrect gif files without any color tables
; "If no color table is available at
; all, the decoder is free to use a system color table or a table of its own. In
@@ -790,22 +800,11 @@ proc img.decode.gif._.superimpose ;/////////////////////////////////////////////
jnz .has_transparency
shl ecx, 2
add ecx, [edx + Image.Palette]
- mov dword [background_color], 0xFFFFFF ; white background
- mov dword [ecx], 0xFFFFFF
-; mov esi, [_data]
-; test [esi+gif.Header.lsd.Packed], gif.LSD.Packed.GlobalColorTableFlag
-; jz @f
-; movzx ecx, [esi+gif.Header.lsd.BackgroundColor]
-; push ecx
-; shl ecx, 2
-; add ecx, [edx + Image.Palette]
-; mov dword [ecx], 0xFFFFFF
-; pop ecx
-; lea ecx, [ecx*3]
-; add esi, ecx
-; mov byte [esi+sizeof.gif.Header+0], 0xFF
-; mov byte [esi+sizeof.gif.Header+1], 0xFF
-; mov byte [esi+sizeof.gif.Header+2], 0xFF
+ push eax
+ mov eax, [img.decode.gif.options_bgr]
+ mov dword [background_color], eax
+ mov dword [ecx], eax
+ pop eax
@@:
call img.decode.gif._.is_logical_screen
jnz .has_transparency
diff --git a/programs/develop/libraries/libs-dev/libimg/ico_cur/ico_cur.asm b/programs/develop/libraries/libs-dev/libimg/ico_cur/ico_cur.asm
new file mode 100644
index 0000000000..6f483aa076
--- /dev/null
+++ b/programs/develop/libraries/libs-dev/libimg/ico_cur/ico_cur.asm
@@ -0,0 +1,371 @@
+;;================================================================================================;;
+;;//// ico.asm //// (c) mike.dld, 2007-2008, (c) diamond, 2009 ///////////////////////////////////;;
+;;================================================================================================;;
+;; ;;
+;; This file is part of Common development libraries (Libs-Dev). ;;
+;; ;;
+;; Libs-Dev is free software: you can redistribute it and/or modify it under the terms of the GNU ;;
+;; Lesser General Public License as published by the Free Software Foundation, either version 2.1 ;;
+;; of the License, or (at your option) any later version. ;;
+;; ;;
+;; Libs-Dev is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without ;;
+;; even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ;;
+;; Lesser General Public License for more details. ;;
+;; ;;
+;; You should have received a copy of the GNU Lesser General Public License along with Libs-Dev. ;;
+;; If not, see . ;;
+;; ;;
+;;================================================================================================;;
+;; ;;
+;; References: ;;
+;; 1. "Icons in Win32" ;;
+;; by John Hornick, Microsoft Corporation ;;
+;; http://msdn2.microsoft.com/en-us/library/ms997538.aspx ;;
+;; ;;
+;;================================================================================================;;
+
+include 'ico_cur.inc'
+
+;;================================================================================================;;
+;;proc img.is.ico _data, _length ;////////////////////////////////////////////////////////////////;;
+img.is.ico:
+ mov edx, 0x00010000 ; icon type = 1
+ jmp @f
+img.is.cur:
+ mov edx, 0x00020000 ; cursor type = 2
+@@:
+;;------------------------------------------------------------------------------------------------;;
+;? Determine if raw data could be decoded (is in ICO format) ;;
+;;------------------------------------------------------------------------------------------------;;
+;> _data = raw data as read from file/stream ;;
+;> _length = data length ;;
+;;------------------------------------------------------------------------------------------------;;
+;< eax = false / true ;;
+;;================================================================================================;;
+; test 1 (length of data): data must contain FileHeader
+ mov ecx, [esp+8]
+ sub ecx, sizeof.ico.FileHeader
+ jb .nope
+; test 2: signature
+ mov eax, [esp+4]
+ cmp dword [eax], edx ; Reserved & Type
+ jne .nope
+; test 3: count must be non-zero
+ movzx eax, [eax + ico.FileHeader.Count]
+ test eax, eax
+ jz .nope
+; test 4 (length of data): data must containt Count dir entries
+ shl eax, 4
+ sub ecx, eax
+ jae .yep
+
+ .nope:
+ xor eax, eax
+ ret 8
+
+ .yep:
+ xor eax, eax
+ inc eax
+ ret 8
+;endp
+
+;;================================================================================================;;
+proc img.decode.ico_cur _data, _length, _options ;////////////////////////////////////////////////;;
+;;------------------------------------------------------------------------------------------------;;
+;? Decode data into image if it contains correctly formed raw data in ICO/CUR format ;;
+;;------------------------------------------------------------------------------------------------;;
+;> _data = raw data as read from file/stream ;;
+;> _length = data length ;;
+;> _options = options for decoding (e.g. background color) ;;
+;;------------------------------------------------------------------------------------------------;;
+;< eax = 0 (error) or pointer to image ;;
+;;================================================================================================;;
+locals
+ count dd ?
+ img dd ?
+ main_img dd ?
+endl
+
+ push ebx esi edi
+
+; img.is.ico has been already called by img.decode
+; stdcall img.is.ico, [_data], [_length]
+; or eax, eax
+; jz .error
+
+ mov ebx, [_data]
+ movzx eax, [ebx + ico.FileHeader.Count]
+ mov [count], eax
+ and [img], 0
+ and [main_img], 0
+.loop:
+ mov ecx, [ebx + sizeof.ico.FileHeader + ico.DirEntry.ByteSize]
+ mov edx, [ebx + sizeof.ico.FileHeader + ico.DirEntry.ImageOffset]
+ mov eax, [_length]
+ sub eax, edx
+ jb .skip
+ cmp eax, ecx
+ jb .skip
+ cmp ecx, 12 ; length test, see img.is.bmp
+ jb .skip
+ add edx, [_data]
+ push [_options]
+ push ecx
+ push edx
+ call img.decode.ico._.decode_icon_data
+ test eax, eax
+ jz .skip
+ push 0xFFFFFF ; set bgr to white if no given
+ mov edx, [_options]
+ test edx, edx
+ jz @f
+ cmp [edx + ImageDecodeOptions.UsedSize], ImageDecodeOptions.BackgroundColor + 4
+ jb @f
+ add esp, 4
+ push [edx + ImageDecodeOptions.BackgroundColor]
+@@:
+ call img.decode.ico._.decode_icon_mask
+ test eax, eax
+ jz .skip
+ mov edx, [img]
+ test edx, edx
+ jz .first
+ mov [edx + Image.Next], eax
+ mov [eax + Image.Previous], edx
+ jmp @f
+.first:
+ mov [main_img], eax
+@@:
+ mov [img], eax
+.skip:
+ add ebx, sizeof.ico.DirEntry
+ dec [count]
+ jnz .loop
+
+ mov eax, [main_img]
+ pop edi esi ebx
+ ret
+endp
+
+;;================================================================================================;;
+img.encode.cur:
+proc img.encode.ico _img, _p_length, _options ;///////////////////////////////////////////////////;;
+;;------------------------------------------------------------------------------------------------;;
+;? Encode image into raw data in ICO format ;;
+;;------------------------------------------------------------------------------------------------;;
+;> _img = pointer to image ;;
+;;------------------------------------------------------------------------------------------------;;
+;< eax = 0 (error) or pointer to encoded data ;;
+;< _p_length = encoded data length ;;
+;;================================================================================================;;
+ xor eax, eax
+ ret
+endp
+
+
+;;================================================================================================;;
+;;////////////////////////////////////////////////////////////////////////////////////////////////;;
+;;================================================================================================;;
+;! Below are private procs you should never call directly from your code ;;
+;;================================================================================================;;
+;;////////////////////////////////////////////////////////////////////////////////////////////////;;
+;;================================================================================================;;
+
+img.decode.ico._.decode_icon_data:
+; create stack frame and jump to common BMP+ICO code
+ push ebp
+ mov ebp, esp
+ sub esp, 12
+ mov byte [ebp - 3], 1 ; bIsIco
+ jmp img.decode.bmp.common
+
+img.decode.ico._.decode_icon_mask:
+ mov edx, [eax + Image.Width]
+ add edx, 31
+ shr edx, 3
+ and edx, not 3
+ push edx
+ imul edx, [eax + Image.Height]
+ cmp ecx, edx
+ pop edx
+ jb .error.free
+ mov edi, [eax + Image.Data]
+ push ebp ebx eax
+ xor ebp, ebp
+ mov ebx, [eax + Image.Extended]
+ cmp [ebx + bmp.Image.info.Height], 0
+ js @f
+ push edx
+ imul edx, [eax + Image.Height]
+ add esi, edx
+ pop edx
+ lea ebp, [edx+edx]
+ sub esi, edx
+@@:
+ mov ebx, [eax + Image.Height]
+ mov ecx, [eax + Image.Width]
+; for now, BMP code produces only 8 and 32 bpp images
+ cmp [eax + Image.Type], Image.bpp8
+ jz .bpp8
+.bpp32:
+ mov edx, [esp+16] ; get background color
+.bpp32.extloop:
+ push ecx
+.bpp32.innloop:
+ lodsd
+ bswap eax
+ push 32
+.bpp32.dwordloop:
+ add eax, eax
+ jnc @f
+ mov [edi], edx
+@@:
+ add edi, 4
+ dec ecx
+ jz @f
+ dec dword [esp]
+ jnz .bpp32.dwordloop
+@@:
+ pop eax
+ test ecx, ecx
+ jnz .bpp32.innloop
+ sub esi, ebp
+ pop ecx
+ dec ebx
+ jnz .bpp32.extloop
+ pop eax ebx ebp
+ ret 4
+.bpp8:
+ push edi
+ mov edi, [eax + Image.Palette]
+ mov eax, [esp+20] ; get background color
+; if palette already has index for bgr color, use it
+ push ecx
+ mov ecx, 256
+ repnz scasd
+ jnz .bpp8.notfound
+ not cl ; cl = index
+ pop edx
+ pop edi
+.bpp8.extloop:
+ push edx
+.bpp8.innloop:
+ lodsd
+ bswap eax
+ push 32
+.bpp8.dwordloop:
+ add eax, eax
+ jnc @f
+ mov [edi], cl
+@@:
+ inc edi
+ dec edx
+ jz @f
+ dec dword [esp]
+ jnz .bpp8.dwordloop
+@@:
+ pop eax
+ test edx, edx
+ jnz .bpp8.innloop
+ sub esi, ebp
+ pop edx
+ dec ebx
+ jnz .bpp8.extloop
+ pop eax ebx ebp
+ ret 4
+.bpp8.notfound:
+; get maximum used color; if index < 255, then we can add one color to palette
+ pop ecx
+ pop edi
+ pop eax
+ mov edx, [eax + Image.Width]
+ imul edx, ebx
+ mov edi, [eax + Image.Data]
+ xor ecx, ecx
+.bpp8.scanloop:
+ cmp [edi], cl
+ jb @f
+ mov cl, [edi]
+@@:
+ inc edi
+ dec edx
+ jnz .bpp8.scanloop
+ inc cl
+ jz .bpp8.nospace
+ mov edx, [esp+8]
+ mov edi, [eax + Image.Palette]
+ mov [edi+ecx*4], edx ; set palette color
+ mov edi, [eax + Image.Data]
+ mov edx, [eax + Image.Width]
+ push eax
+ jmp .bpp8.extloop
+.bpp8.nospace:
+; convert to 24 bpp
+ mov edx, [eax + Image.Width]
+ imul edx, ebx
+ lea edx, [edx*3]
+ push eax
+ invoke mem.alloc, edx
+ mov edi, eax
+ pop eax
+ test edi, edi
+ jz .error.free2
+ push eax esi edi
+ mov esi, eax
+ call img._.do_rgb
+ pop edi esi eax
+ xchg edi, [eax + Image.Data]
+ mov byte [eax + Image.Type], Image.bpp24
+ push eax
+ invoke mem.free, edi
+ pop eax
+ push eax
+ mov ecx, [eax + Image.Width]
+.bpp24:
+ mov edx, [esp+16] ; get background color
+.bpp24.extloop:
+ push ecx
+.bpp24.innloop:
+ lodsd
+ bswap eax
+ push 32
+.bpp24.dwordloop:
+ add eax, eax
+ jnc @f
+ mov [edi], dx
+ ror edx, 16
+ mov [edi+2], dl
+ ror edx, 16
+@@:
+ add edi, 4
+ dec ecx
+ jz @f
+ dec dword [esp]
+ jnz .bpp24.dwordloop
+@@:
+ pop eax
+ test ecx, ecx
+ jnz .bpp24.innloop
+ sub esi, ebp
+ pop ecx
+ dec ebx
+ jnz .bpp24.extloop
+ pop eax ebx ebp
+ ret 4
+.error.free2:
+ pop ebx ebp
+.error.free:
+ stdcall img._.delete, eax
+ xor eax, eax
+ ret 4
+
+;;================================================================================================;;
+;;////////////////////////////////////////////////////////////////////////////////////////////////;;
+;;================================================================================================;;
+;! Below is private data you should never use directly from your code ;;
+;;================================================================================================;;
+;;////////////////////////////////////////////////////////////////////////////////////////////////;;
+;;================================================================================================;;
+
+
+;
diff --git a/programs/develop/libraries/libs-dev/libimg/bmp/ico.asm b/programs/develop/libraries/libs-dev/libimg/ico_cur/ico_cur.inc
similarity index 68%
rename from programs/develop/libraries/libs-dev/libimg/bmp/ico.asm
rename to programs/develop/libraries/libs-dev/libimg/ico_cur/ico_cur.inc
index 332d266310..148c11e73f 100644
--- a/programs/develop/libraries/libs-dev/libimg/bmp/ico.asm
+++ b/programs/develop/libraries/libs-dev/libimg/ico_cur/ico_cur.inc
@@ -1,5 +1,5 @@
;;================================================================================================;;
-;;//// ico.asm //// (c) mike.dld, 2007-2008 //////////////////////////////////////////////////////;;
+;;//// ico.inc //// (c) diamond, 2009 ////////////////////////////////////////////////////////////;;
;;================================================================================================;;
;; ;;
;; This file is part of Common development libraries (Libs-Dev). ;;
@@ -16,10 +16,31 @@
;; If not, see . ;;
;; ;;
;;================================================================================================;;
-;; ;;
-;; References: ;;
-;; 1. "Icons in Win32" ;;
-;; by John Hornick, Microsoft Corporation ;;
-;; http://msdn2.microsoft.com/en-us/library/ms997538.aspx ;;
-;; ;;
-;;================================================================================================;;
+
+struct ico.FileHeader
+ Reserved dw ? ; must be 0
+ Type dw ? ; must be 1
+ Count dw ?
+ends
+
+struct ico.DirEntry
+ Width db ?
+ Height db ?
+ ColorCount db ?
+ db ? ; reseved
+ dw ? ; reserved
+ dw ? ; reserved
+ ByteSize dd ?
+ ImageOffset dd ?
+ends
+
+struct cur.DirEntry
+ Width db ?
+ Height db ?
+ ColorCount db ?
+ db ? ; reserved
+ XHotSpot dw ?
+ YHotSpot dw ?
+ ByteSize dd ?
+ ImageOffset dd ?
+ends
diff --git a/programs/develop/libraries/libs-dev/libimg/jpeg/jpeg.asm b/programs/develop/libraries/libs-dev/libimg/jpeg/jpeg.asm
index 88b8274ba1..16686d62ec 100644
--- a/programs/develop/libraries/libs-dev/libimg/jpeg/jpeg.asm
+++ b/programs/develop/libraries/libs-dev/libimg/jpeg/jpeg.asm
@@ -69,7 +69,7 @@ img.decode.jpg:
.ret:
mov [esp+28], eax
popad
- ret 8
+ ret 12
.soi_ok:
mov [ebx + jpeg.work.restart_interval], ecx
mov [ebx + jpeg.work.adobe_ycck], cl
diff --git a/programs/develop/libraries/libs-dev/libimg/libimg.asm b/programs/develop/libraries/libs-dev/libimg/libimg.asm
index 7e61ffa0bc..45c093ad26 100644
--- a/programs/develop/libraries/libs-dev/libimg/libimg.asm
+++ b/programs/develop/libraries/libs-dev/libimg/libimg.asm
@@ -37,6 +37,7 @@ include 'jpeg/jpeg.asm'
include 'png/png.asm'
include 'tga/tga.asm'
include 'z80/z80.asm'
+include 'ico_cur/ico_cur.asm'
;;================================================================================================;;
proc lib_init ;///////////////////////////////////////////////////////////////////////////////////;;
@@ -496,7 +497,7 @@ align 16
endp
;;================================================================================================;;
-proc img.decode _data, _length ;//////////////////////////////////////////////////////////////////;;
+proc img.decode _data, _length, _options ;////////////////////////////////////////////////////////;;
;;------------------------------------------------------------------------------------------------;;
;? --- TBD --- ;;
;;------------------------------------------------------------------------------------------------;;
@@ -510,17 +511,18 @@ proc img.decode _data, _length ;////////////////////////////////////////////////
or eax, eax
jnz @f
add ebx, sizeof.FormatsTableEntry
- cmp dword[ebx], 0
+ cmp dword[ebx], eax ;0
jnz @b
- jmp .error
- @@: stdcall [ebx + FormatsTableEntry.Decode], [_data], [_length]
-
- .error:
+ pop ebx
ret
+ @@: mov eax, [ebx + FormatsTableEntry.Decode]
+ pop ebx
+ leave
+ jmp eax
endp
;;================================================================================================;;
-proc img.encode _img, _p_length ;/////////////////////////////////////////////////////////////////;;
+proc img.encode _img, _p_length, _options ;///////////////////////////////////////////////////////;;
;;------------------------------------------------------------------------------------------------;;
;? --- TBD --- ;;
;;------------------------------------------------------------------------------------------------;;
@@ -1667,8 +1669,8 @@ img._.get_scanline_len: ;///////////////////////////////////////////////////////
align 4
img._.formats_table:
.bmp dd img.is.bmp, img.decode.bmp, img.encode.bmp
-; .ico dd img.is.ico, img.decode.ico, img.encode.ico
-; .cur dd img.is.cur, img.decode.cur, img.encode.cur
+ .ico dd img.is.ico, img.decode.ico_cur, img.encode.ico
+ .cur dd img.is.cur, img.decode.ico_cur, img.encode.cur
.gif dd img.is.gif, img.decode.gif, img.encode.gif
.png dd img.is.png, img.decode.png, img.encode.png
.jpg dd img.is.jpg, img.decode.jpg, img.encode.jpg
@@ -1707,35 +1709,35 @@ align 4
export \
lib_init , 'lib_init' , \
- 0x00010004 , 'version' , \
- img.is_img , 'img.is_img' , \
- img.info , 'img.info' , \
- img.from_file , 'img.from_file' , \
- img.to_file , 'img.to_file' , \
- img.from_rgb , 'img.from_rgb' , \
- img.to_rgb , 'img.to_rgb' , \
- img.to_rgb2 , 'img.to_rgb2' , \
- img.decode , 'img.decode' , \
- img.encode , 'img.encode' , \
- img.create , 'img.create' , \
- img.destroy , 'img.destroy' , \
- img.destroy.layer, 'img.destroy.layer', \
- img.count , 'img.count' , \
- img.lock_bits , 'img.lock_bits' , \
- img.unlock_bits , 'img.unlock_bits' , \
- img.flip , 'img.flip' , \
- img.flip.layer , 'img.flip.layer' , \
- img.rotate , 'img.rotate' , \
- img.rotate.layer, 'img.rotate.layer', \
- img.draw , 'img.draw'
+ 0x00050005 , 'version' , \
+ img.is_img , 'img_is_img' , \
+ img.info , 'img_info' , \
+ img.from_file , 'img_from_file' , \
+ img.to_file , 'img_to_file' , \
+ img.from_rgb , 'img_from_rgb' , \
+ img.to_rgb , 'img_to_rgb' , \
+ img.to_rgb2 , 'img_to_rgb2' , \
+ img.decode , 'img_decode' , \
+ img.encode , 'img_encode' , \
+ img.create , 'img_create' , \
+ img.destroy , 'img_destroy' , \
+ img.destroy.layer, 'img_destroy_layer', \
+ img.count , 'img_count' , \
+ img.lock_bits , 'img_lock_bits' , \
+ img.unlock_bits , 'img_unlock_bits' , \
+ img.flip , 'img_flip' , \
+ img.flip.layer , 'img_flip_layer' , \
+ img.rotate , 'img_rotate' , \
+ img.rotate.layer, 'img_rotate_layer', \
+ img.draw , 'img_draw'
; import from deflate unpacker
; is initialized only when PNG loading is requested
align 4
@IMPORT:
-library kfar_arc, '../File Managers/kfar_arc.obj'
-import kfar_arc, \
+library archiver, 'archiver.obj'
+import archiver, \
deflate_unpack2, 'deflate_unpack2'
align 4
diff --git a/programs/develop/libraries/libs-dev/libimg/libimg.inc b/programs/develop/libraries/libs-dev/libimg/libimg.inc
index 96163c3638..66d30445a0 100644
--- a/programs/develop/libraries/libs-dev/libimg/libimg.inc
+++ b/programs/develop/libraries/libs-dev/libimg/libimg.inc
@@ -49,6 +49,11 @@ Image.bpp16 = 5
; bits in Image.Flags
Image.IsAnimated = 1
+struct ImageDecodeOptions
+ UsedSize dd ? ; if >=8, the field BackgroundColor is valid, and so on
+ BackgroundColor dd ? ; used for transparent images as background
+ends
+
FLIP_VERTICAL = 0x01
FLIP_HORIZONTAL = 0x02
FLIP_BOTH = FLIP_VERTICAL or FLIP_HORIZONTAL
diff --git a/programs/develop/libraries/libs-dev/libimg/png/png.asm b/programs/develop/libraries/libs-dev/libimg/png/png.asm
index 0191667f22..476d87eead 100644
--- a/programs/develop/libraries/libs-dev/libimg/png/png.asm
+++ b/programs/develop/libraries/libs-dev/libimg/png/png.asm
@@ -49,7 +49,7 @@ img.is.png:
;endp
;;================================================================================================;;
-;;proc img.decode.png _data, _length ;////////////////////////////////////////////////////////////;;
+;;proc img.decode.png _data, _length, _options ;//////////////////////////////////////////////////;;
img.decode.png:
xor eax, eax ; .image = 0
pushad
@@ -76,6 +76,7 @@ virtual at ebp - .localsize
rd 1
.data dd ?
.length dd ?
+.options dd ?
end virtual
push 0 ; .idat_read = 0
sub esp, .localsize-4
@@ -99,7 +100,7 @@ end virtual
add esp, .localsize
popad
mov [deflate_loader_mutex], eax
- ret
+ ret 12
.deflate_loaded:
; release mutex
mov [deflate_loader_mutex], 0
@@ -229,7 +230,7 @@ end virtual
.eof:
add esp, .localsize
popad
- ret
+ ret 12
; PLTE chunk
.palette:
mov eax, [.image]
@@ -876,4 +877,4 @@ end repeat
img.encode.png:
xor eax, eax
- ret 8
+ ret 12
diff --git a/programs/develop/libraries/libs-dev/libimg/tga/tga.asm b/programs/develop/libraries/libs-dev/libimg/tga/tga.asm
index 82051a75bf..c51dfd7778 100644
--- a/programs/develop/libraries/libs-dev/libimg/tga/tga.asm
+++ b/programs/develop/libraries/libs-dev/libimg/tga/tga.asm
@@ -78,7 +78,7 @@ proc img.is.tga _data, _length ;////////////////////////////////////////////////
endp
;;================================================================================================;;
-proc img.decode.tga _data, _length ;//////////////////////////////////////////////////////////////;;
+proc img.decode.tga _data, _length, _options ;////////////////////////////////////////////////////;;
;;------------------------------------------------------------------------------------------------;;
;? Decode data into image if it contains correctly formed raw data in Targa format ;;
;;------------------------------------------------------------------------------------------------;;
@@ -217,7 +217,7 @@ endl
endp
;;================================================================================================;;
-proc img.encode.tga _img, _p_length ;/////////////////////////////////////////////////////////////;;
+proc img.encode.tga _img, _p_length, _options ;///////////////////////////////////////////////////;;
;;------------------------------------------------------------------------------------------------;;
;? Encode image into raw data in Targa format ;;
;;------------------------------------------------------------------------------------------------;;
diff --git a/programs/develop/libraries/libs-dev/libimg/z80/z80.asm b/programs/develop/libraries/libs-dev/libimg/z80/z80.asm
index 5f7efddfe4..98ea36846d 100644
--- a/programs/develop/libraries/libs-dev/libimg/z80/z80.asm
+++ b/programs/develop/libraries/libs-dev/libimg/z80/z80.asm
@@ -45,7 +45,7 @@ proc img.is.z80 _data, _length ;////////////////////////////////////////////////
endp
;;================================================================================================;;
-proc img.decode.z80 _data, _length ;//////////////////////////////////////////////////////////////;;
+proc img.decode.z80 _data, _length, _options ;////////////////////////////////////////////////////;;
;;------------------------------------------------------------------------------------------------;;
;? Decode data into image if it contains correctly formed raw data in z80 screen format ;;
;;------------------------------------------------------------------------------------------------;;
@@ -209,7 +209,7 @@ img.decode.z80.failed:
endp
;;================================================================================================;;
-proc img.encode.z80 _img, _p_length ;/////////////////////////////////////////////////////////////;;
+proc img.encode.z80 _img, _p_length, _options ;///////////////////////////////////////////////////;;
;;------------------------------------------------------------------------------------------------;;
;? Encode image into raw data in z80 screen format ;;
;;------------------------------------------------------------------------------------------------;;
diff --git a/programs/develop/libraries/libs-dev/libini/libini.asm b/programs/develop/libraries/libs-dev/libini/libini.asm
index 61bd42545b..f7e544cf69 100644
--- a/programs/develop/libraries/libs-dev/libini/libini.asm
+++ b/programs/develop/libraries/libs-dev/libini/libini.asm
@@ -674,15 +674,15 @@ library \
libio , 'libio.obj'
import libio , \
- file.size , 'file.size' , \
- file.open , 'file.open' , \
- file.read , 'file.read' , \
- file.write , 'file.write' , \
- file.seek , 'file.seek' , \
- file.eof? , 'file.eof?' , \
- file.seteof , 'file.seteof' , \
- file.tell , 'file.tell' , \
- file.close , 'file.close'
+ file.size , 'file_size' , \
+ file.open , 'file_open' , \
+ file.read , 'file_read' , \
+ file.write , 'file_write' , \
+ file.seek , 'file_seek' , \
+ file.eof? , 'file_iseof' , \
+ file.seteof , 'file_seteof' , \
+ file.tell , 'file_tell' , \
+ file.close , 'file_close'
;;================================================================================================;;
@@ -699,12 +699,12 @@ align 16
export \
libini._.init , 'lib_init' , \
- 0x00040007 , 'version' , \
- ini.enum_sections , 'ini.enum_sections' , \
- ini.enum_keys , 'ini.enum_keys' , \
- ini.get_str , 'ini.get_str' , \
- ini.get_int , 'ini.get_int' , \
- ini.get_color , 'ini.get_color' , \
- ini.set_str , 'ini.set_str' , \
- ini.set_int , 'ini.set_int' , \
- ini.set_color , 'ini.set_color'
+ 0x00080008 , 'version' , \
+ ini.enum_sections , 'ini_enum_sections' , \
+ ini.enum_keys , 'ini_enum_keys' , \
+ ini.get_str , 'ini_get_str' , \
+ ini.get_int , 'ini_get_int' , \
+ ini.get_color , 'ini_get_color' , \
+ ini.set_str , 'ini_set_str' , \
+ ini.set_int , 'ini_set_int' , \
+ ini.set_color , 'ini_set_color'
diff --git a/programs/develop/libraries/libs-dev/libio/libio.asm b/programs/develop/libraries/libs-dev/libio/libio.asm
index 8356d98f54..f4d9fe7f92 100644
--- a/programs/develop/libraries/libs-dev/libio/libio.asm
+++ b/programs/develop/libraries/libs-dev/libio/libio.asm
@@ -534,17 +534,17 @@ align 16
export \
libio._.init , 'lib_init' , \
- 0x00030003 , 'version' , \
- file.find_first , 'file.find_first' , \
- file.find_next , 'file.find_next' , \
- file.find_close , 'file.find_close' , \
- file.size , 'file.size' , \
- file.open , 'file.open' , \
- file.read , 'file.read' , \
- file.write , 'file.write' , \
- file.seek , 'file.seek' , \
- file.tell , 'file.tell' , \
- file.eof? , 'file.eof?' , \
- file.seteof , 'file.seteof' , \
- file.truncate , 'file.truncate' , \
- file.close , 'file.close'
+ 0x00040004 , 'version' , \
+ file.find_first , 'file_find_first' , \
+ file.find_next , 'file_find_next' , \
+ file.find_close , 'file_find_close' , \
+ file.size , 'file_size' , \
+ file.open , 'file_open' , \
+ file.read , 'file_read' , \
+ file.write , 'file_write' , \
+ file.seek , 'file_seek' , \
+ file.tell , 'file_tell' , \
+ file.eof? , 'file_iseof' , \
+ file.seteof , 'file_seteof' , \
+ file.truncate , 'file_truncate' , \
+ file.close , 'file_close'
diff --git a/programs/develop/tinypad/trunk/tinypad.asm b/programs/develop/tinypad/trunk/tinypad.asm
index b98f589ce1..bed8a21cc9 100644
--- a/programs/develop/tinypad/trunk/tinypad.asm
+++ b/programs/develop/tinypad/trunk/tinypad.asm
@@ -528,44 +528,44 @@ library \
libgfx,'libgfx.obj'
import libini, \
- ini.get_str ,'ini.get_str',\
- ini.set_str ,'ini.set_str',\
- ini.get_int ,'ini.get_int',\
- ini.set_int ,'ini.set_int',\
- ini.get_color,'ini.get_color',\
- ini.set_color,'ini.set_color'
+ ini.get_str ,'ini_get_str',\
+ ini.set_str ,'ini_set_str',\
+ ini.get_int ,'ini_get_int',\
+ ini.set_int ,'ini_set_int',\
+ ini.get_color,'ini_get_color',\
+ ini.set_color,'ini_set_color'
import libio, \
- file.find_first,'file.find_first',\
- file.find_next ,'file.find_next',\
- file.find_close,'file.find_close',\
- file.size ,'file.size',\
- file.open ,'file.open',\
- file.read ,'file.read',\
- file.write ,'file.write',\
- file.seek ,'file.seek',\
- file.tell ,'file.tell',\
- file.eof? ,'file.eof?',\
- file.truncate ,'file.truncate',\
- file.close ,'file.close'
+ file.find_first,'file_find_first',\
+ file.find_next ,'file_find_next',\
+ file.find_close,'file_find_close',\
+ file.size ,'file_size',\
+ file.open ,'file_open',\
+ file.read ,'file_read',\
+ file.write ,'file_write',\
+ file.seek ,'file_seek',\
+ file.tell ,'file_tell',\
+ file.eof? ,'file_iseof',\
+ file.truncate ,'file_truncate',\
+ file.close ,'file_close'
import libgfx, \
- gfx.open ,'gfx.open',\
- gfx.close ,'gfx.close',\
- gfx.pen.color ,'gfx.pen.color',\
- gfx.brush.color ,'gfx.brush.color',\
- gfx.pixel ,'gfx.pixel',\
- gfx.move.to ,'gfx.move.to',\
- gfx.line.to ,'gfx.line.to',\
- gfx.line ,'gfx.line',\
- gfx.polyline ,'gfx.polyline',\
- gfx.polyline.to ,'gfx.polyline.to',\
- gfx.fillrect ,'gfx.fillrect',\
- gfx.fillrect.ex ,'gfx.fillrect.ex',\
- gfx.framerect ,'gfx.framerect',\
- gfx.framerect.ex,'gfx.framerect.ex',\
- gfx.rectangle ,'gfx.rectangle',\
- gfx.rectangle.ex,'gfx.rectangle.ex'
+ gfx.open ,'gfx_open',\
+ gfx.close ,'gfx_close',\
+ gfx.pen.color ,'gfx_pen_color',\
+ gfx.brush.color ,'gfx_brush_color',\
+ gfx.pixel ,'gfx_pixel',\
+ gfx.move.to ,'gfx_move_to',\
+ gfx.line.to ,'gfx_line_to',\
+ gfx.line ,'gfx_line',\
+ gfx.polyline ,'gfx_polyline',\
+ gfx.polyline.to ,'gfx_polyline_to',\
+ gfx.fillrect ,'gfx_fillrect',\
+ gfx.fillrect.ex ,'gfx_fillrect_ex',\
+ gfx.framerect ,'gfx_framerect',\
+ gfx.framerect.ex,'gfx_framerect_ex',\
+ gfx.rectangle ,'gfx_rectangle',\
+ gfx.rectangle.ex,'gfx_rectangle_ex'
TINYPAD_END: ; end of file
diff --git a/programs/fs/kfar/trunk/kfar.asm b/programs/fs/kfar/trunk/kfar.asm
index c5ae15ffe4..647059cb3a 100644
--- a/programs/fs/kfar/trunk/kfar.asm
+++ b/programs/fs/kfar/trunk/kfar.asm
@@ -160,8 +160,8 @@ start:
; load libini.obj and kfar.ini
mov eax, libini_name
mov esi, ini_import
- push 6
- pop ebp ; we use version 6 of libini
+ push 8
+ pop ebp ; we use version 8 of libini
call load_dll_and_import
test eax, eax
jnz .noini
@@ -8343,10 +8343,10 @@ standard_dll_path_size = $ - standard_dll_path
aStart db 'START',0
aLibInit db 'lib_init',0
aVersion db 'version',0
-aIniGetInt db 'ini.get_int',0
-aIniGetStr db 'ini.get_str',0
-aIniSetInt db 'ini.set_int',0
-aIniEnumKeys db 'ini.enum_keys',0
+aIniGetInt db 'ini_get_int',0
+aIniGetStr db 'ini_get_str',0
+aIniSetInt db 'ini_set_int',0
+aIniEnumKeys db 'ini_enum_keys',0
aPluginLoad db 'plugin_load',0
aPluginUnload db 'plugin_unload',0
aGetattr db 'getattr',0
diff --git a/programs/media/kiv/trunk/kiv.asm b/programs/media/kiv/trunk/kiv.asm
index e448786e64..46172d8672 100644
--- a/programs/media/kiv/trunk/kiv.asm
+++ b/programs/media/kiv/trunk/kiv.asm
@@ -231,7 +231,7 @@ load_image:
; invoke img.is_img, [img_data], [img_data_len]
; or eax, eax
; jz exit
- invoke img.decode, [img_data], [img_data_len]
+ invoke img.decode, [img_data], [img_data_len], 0
or eax, eax
jz .error
cmp [image], 0
@@ -513,6 +513,10 @@ load_directory:
jz .copy
cmp ecx, 'jpe'
jz .copy
+ cmp ecx, 'ico'
+ jz .copy
+ cmp ecx, 'cur'
+ jz .copy
cmp ecx, 'jpeg'
jz @f
cmp ecx, 'jpeG'
@@ -722,6 +726,41 @@ draw_cur_frame:
push 5 ; x
push [cur_frame]
call [img.draw]
+ mov eax, [image]
+ test [eax + Image.Flags], Image.IsAnimated
+ jnz .done
+ cmp [eax + Image.Next], 0
+ jnz .additional_frames
+.done:
+ ret
+.additional_frames:
+ mov ebx, [procinfo+62]
+ sub ebx, 4
+ jbe .done
+ push 5
+ pop esi
+.afloop:
+ sub ebx, [eax + Image.Width]
+ jbe .done
+ dec ebx
+ jz .done
+ add esi, [eax + Image.Width]
+ mov eax, [eax + Image.Next]
+ push eax
+ inc esi
+ push 0 ; ypos
+ push 0 ; xpos
+ mov ecx, [procinfo+66]
+ sub ecx, 34
+ push ecx ; max height
+ push ebx ; max width
+ push 35 ; y
+ push esi ; x
+ push eax ; image
+ call [img.draw]
+ pop eax
+ cmp [eax + Image.Next], 0
+ jnz .afloop
ret
; void* __stdcall mem.Alloc(unsigned size);
@@ -961,27 +1000,27 @@ library \
import libio , \
libio.init , 'lib_init' , \
- file.size , 'file.size' , \
- file.open , 'file.open' , \
- file.read , 'file.read' , \
- file.close , 'file.close'
+ file.size , 'file_size' , \
+ file.open , 'file_open' , \
+ file.read , 'file_read' , \
+ file.close , 'file_close'
import libgfx , \
libgfx.init , 'lib_init' , \
- gfx.open , 'gfx.open' , \
- gfx.close , 'gfx.close' , \
- gfx.pen.color , 'gfx.pen.color' , \
- gfx.line , 'gfx.line'
+ gfx.open , 'gfx_open' , \
+ gfx.close , 'gfx_close' , \
+ gfx.pen.color , 'gfx_pen_color' , \
+ gfx.line , 'gfx_line'
import libimg , \
libimg.init , 'lib_init' , \
- img.is_img , 'img.is_img' , \
- img.to_rgb2 , 'img.to_rgb2', \
- img.decode , 'img.decode' , \
- img.flip , 'img.flip' , \
- img.rotate , 'img.rotate' , \
- img.destroy , 'img.destroy', \
- img.draw , 'img.draw'
+ img.is_img , 'img_is_img' , \
+ img.to_rgb2 , 'img_to_rgb2', \
+ img.decode , 'img_decode' , \
+ img.flip , 'img_flip' , \
+ img.rotate , 'img_rotate' , \
+ img.destroy , 'img_destroy', \
+ img.draw , 'img_draw'
import sort, sort.START, 'START', SortDir, 'SortDir', strcmpi, 'strcmpi'
diff --git a/programs/network/zeroconf/trunk/zeroconf.asm b/programs/network/zeroconf/trunk/zeroconf.asm
index 4c2b259feb..8502abbae3 100644
--- a/programs/network/zeroconf/trunk/zeroconf.asm
+++ b/programs/network/zeroconf/trunk/zeroconf.asm
@@ -453,7 +453,7 @@ library \
libini,'libini.obj'
import libini, \
- ini.get_str,'ini.get_str'
+ ini.get_str,'ini_get_str'
include_debug_strings