merge libraries 'archiver.obj' and 'zlib.obj'

git-svn-id: svn://kolibrios.org@6673 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
IgorA 2016-11-04 19:29:50 +00:00
parent f9e3adeff5
commit 22c6f65977
7 changed files with 1190 additions and 1214 deletions

View File

@ -1,4 +1,7 @@
archiver.obj ýêñïîðòèðóåò äâå ôóíêöèè äëÿ ðàñïàêîâêè deflate-äàííûõ. archiver.obj ýêñïîðòèðóåò äâå ôóíêöèè äëÿ ðàñïàêîâêè deflate-äàííûõ.
А также функции: deflateInit, deflateInit2, deflateReset, deflate,
deflateEnd для упаковки deflate-данных, сделанные на основе свободно
распространяемой библиотеки zlib.
Ïåðâàÿ: deflate_unpack Ïåðâàÿ: deflate_unpack
Îáúÿâëåíèå â ñòèëå Ñè: void* __stdcall deflate_unpack(const void* data, unsigned* pLength); Îáúÿâëåíèå â ñòèëå Ñè: void* __stdcall deflate_unpack(const void* data, unsigned* pLength);
@ -64,3 +67,17 @@ deflate_callback:
mov [ecx], length mov [ecx], length
mov eax, buffer mov eax, buffer
ret 8 ret 8
Алгоритм для упаковки данных:
1) Вызов функции deflateInit или deflateInit2.
2) Разбиение входного потока данных на порции по 64 Кб.
Для каждого блока в 64 Кб в цикле должен делаться вызов функции deflate.
За один вызов функции deflate сжатых данных образуется не более 16 Кб.
Т. е. если сжимаемых данных менее 16 Кб, то их можно упаковать за один вызов deflate.
Если сжимаемых данных менее 64 Кб, то их можно упаковать организовав один цикл с вызовом deflate.
Если сжимаемых данных более 64 Кб, то их можно упаковать организовав двойной цикл с вызовом deflate.
3) Вызов функции deflateEnd для очистки памяти.
Замечания:
Большие уровни сжатия пока что не поддерживаются.
Функция deflate не коректно работает с параметром Z_NO_FLUSH.
(Пока проблема не устранена рекомендуется всегда ставить Z_FINISH)

View File

@ -3,7 +3,7 @@
; target platform: KolibriOS ; target platform: KolibriOS
; compiler: FASM 1.67.14 ; compiler: FASM 1.67.14
; version: 0.17 ; version: 0.17
; last update: 2009-09-03 (Sep 03, 2009) ; last update: 2016-11-04 (Nov 04, 2016)
; minimal KFar version: 0.43 ; minimal KFar version: 0.43
; minimal kernel: no limit ; minimal kernel: no limit
; ;
@ -32,6 +32,7 @@ include '7zbranch.inc' ; branch filters for *.7z
include '7zaes.inc' ; AES cryptor for *.7z include '7zaes.inc' ; AES cryptor for *.7z
include 'zip.inc' ; *.zip include 'zip.inc' ; *.zip
include 'deflate.inc' ; Deflate[64] decoder for *.7z and *.zip include 'deflate.inc' ; Deflate[64] decoder for *.7z and *.zip
include '../zlib/zlib.asm' ; deflate coder
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;; Interface for KFar ;;;;;;;;;;;;;; ;;;;;;;;;;;;;;; Interface for KFar ;;;;;;;;;;;;;;
@ -1242,9 +1243,9 @@ deflate_unpack2:
mov ecx, 10000h mov ecx, 10000h
jmp [eax+streamInfo.fillBuf] jmp [eax+streamInfo.fillBuf]
@@: @@:
push 68 push SF_SYS_MISC
pop eax pop eax
push 20 push SSF_MEM_REALLOC
pop ebx pop ebx
int 0x40 int 0x40
test eax, eax test eax, eax
@ -1280,9 +1281,9 @@ deflate_unpack2:
jnz @f jnz @f
inc ecx inc ecx
@@: @@:
push 68 push SF_SYS_MISC
pop eax pop eax
push 20 push SSF_MEM_REALLOC
pop ebx pop ebx
int 0x40 int 0x40
test eax, eax test eax, eax
@ -1297,18 +1298,18 @@ deflate_unpack2:
and ecx, 3 and ecx, 3
rep movsb rep movsb
push eax push eax
push 68 push SF_SYS_MISC
pop eax pop eax
push 13 push SSF_MEM_FREE
pop ebx pop ebx
lea ecx, [ebp-streamInfo.size-8] lea ecx, [ebp-streamInfo.size-8]
int 40h int 40h
pop eax pop eax
jmp .ret jmp .ret
.nomem: .nomem:
push 68 push SF_SYS_MISC
pop eax pop eax
push 13 push SSF_MEM_FREE
pop ebx pop ebx
test edx, edx test edx, edx
jz @f jz @f
@ -1342,9 +1343,9 @@ deflate_unpack2:
ret ret
mypgalloc: mypgalloc:
push 68 push SF_SYS_MISC
pop eax pop eax
push 12 push SSF_MEM_ALLOC
pop ebx pop ebx
int 0x40 int 0x40
ret ret
@ -1371,6 +1372,13 @@ EXPORTS:
dd aClose, myclose dd aClose, myclose
dd aDeflateUnpack, deflate_unpack dd aDeflateUnpack, deflate_unpack
dd aDeflateUnpack2,deflate_unpack2 dd aDeflateUnpack2,deflate_unpack2
dd adeflateInit, deflateInit
dd adeflateInit2, deflateInit2
dd adeflateReset, deflateReset
dd adeflate, deflate
dd adeflateEnd, deflateEnd
dd azError, zError
dd acalc_crc32, calc_crc32
dd 0 dd 0
; exported names ; exported names
@ -1389,6 +1397,13 @@ aSetpos db 'setpos',0
aClose db 'close',0 aClose db 'close',0
aDeflateUnpack db 'deflate_unpack',0 aDeflateUnpack db 'deflate_unpack',0
aDeflateUnpack2 db 'deflate_unpack2',0 aDeflateUnpack2 db 'deflate_unpack2',0
adeflateInit db 'deflateInit',0
adeflateInit2 db 'deflateInit2',0
adeflateReset db 'deflateReset',0
adeflate db 'deflate',0
adeflateEnd db 'deflateEnd',0
azError db 'zError',0
acalc_crc32 db 'calc_crc32',0
; common strings ; common strings
if lang eq ru if lang eq ru
@ -1512,6 +1527,8 @@ IncludeIGlobals
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;; Uninitialized data ;;;;;;;;;;;;;; ;;;;;;;;;;;;;;; Uninitialized data ;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
purge data ;used in 'macros.inc'
purge section ;used in 'macros.inc'
section '.udata' data readable writable align 16 section '.udata' data readable writable align 16
kfar_info dd ? kfar_info dd ?

View File

@ -1,5 +1,3 @@
@fasm.exe -m 32768 zlib.asm zlib.obj
@kpack zlib.obj
@fasm.exe -m 32768 example1.asm example1.kex @fasm.exe -m 32768 example1.asm example1.kex
@kpack example1.kex @kpack example1.kex
pause pause

View File

@ -23,8 +23,8 @@ if DYNAMIC_CRC_TABLE eq 1
align 4 align 4
crc_table_empty dd 1 crc_table_empty dd 1
align 4 ;align 4
crc_table rd TBLS*256 ;crc_table rd TBLS*256
; Generate tables for a byte-wise 32-bit CRC calculation on the polynomial: ; Generate tables for a byte-wise 32-bit CRC calculation on the polynomial:
; x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x+1. ; x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x+1.

View File

@ -245,22 +245,14 @@ title db 'Zlib test, press on [Up], [Down], [Left], [Right]',0
align 4 align 4
import_archiver: import_archiver:
deflate_unpack dd sz_deflate_unpack deflate_unpack dd sz_deflate_unpack
dd 0,0
sz_deflate_unpack db 'deflate_unpack',0
align 4
import_zlib:
; dd sz_lib_init
deflateInit dd sz_deflateInit deflateInit dd sz_deflateInit
deflateInit2 dd sz_deflateInit2 deflateInit2 dd sz_deflateInit2
deflateReset dd sz_deflateReset deflateReset dd sz_deflateReset
deflate dd sz_deflate deflate dd sz_deflate
deflateEnd dd sz_deflateEnd deflateEnd dd sz_deflateEnd
calc_crc32 dd sz_calc_crc32 calc_crc32 dd sz_calc_crc32
dd 0,0 dd 0,0
sz_deflate_unpack db 'deflate_unpack',0
; sz_lib_init db 'lib_init',0
sz_deflateInit db 'deflateInit',0 sz_deflateInit db 'deflateInit',0
sz_deflateInit2 db 'deflateInit2',0 sz_deflateInit2 db 'deflateInit2',0
sz_deflateReset db 'deflateReset',0 sz_deflateReset db 'deflateReset',0
@ -272,21 +264,14 @@ import_zlib:
system_dir_0 db '/sys/lib/' system_dir_0 db '/sys/lib/'
lib_name_0 db 'archiver.obj',0 lib_name_0 db 'archiver.obj',0
system_dir_1 db '/sys/lib/'
lib_name_1 db 'zlib.obj',0
err_message_found_lib0 db 'Sorry I cannot load library archiver.obj',0 err_message_found_lib0 db 'Sorry I cannot load library archiver.obj',0
err_message_found_lib1 db 'Sorry I cannot load library zlib.obj',0
head_f_i: head_f_i:
head_f_l db 'System error',0 head_f_l db 'System error',0
err_message_import0 db 'Error on load import library archiver.obj',0 err_message_import0 db 'Error on load import library archiver.obj',0
err_message_import1 db 'Error on load import library zlib.obj',0
l_libs_start: l_libs_start:
lib0 l_libs lib_name_0, cur_dir_path, library_path, system_dir_0,\ lib0 l_libs lib_name_0, cur_dir_path, library_path, system_dir_0,\
err_message_found_lib0, head_f_l, import_archiver,err_message_import0, head_f_i err_message_found_lib0, head_f_l, import_archiver,err_message_import0, head_f_i
lib1 l_libs lib_name_1, cur_dir_path, library_path, system_dir_1,\
err_message_found_lib1, head_f_l, import_zlib, err_message_import1, head_f_i
load_lib_end: load_lib_end:
;--------------------------------------------------------------------- ;---------------------------------------------------------------------

View File

@ -1,7 +1,3 @@
format MS COFF
public EXPORTS
section '.flat' code readable align 16
include '../../../../proc32.inc' include '../../../../proc32.inc'
include '../../../../macros.inc' include '../../../../macros.inc'
@ -44,7 +40,7 @@ end if
include 'zlib.inc' include 'zlib.inc'
include 'deflate.inc' include 'deflate.inc'
include 'zutil.asm' include 'zutil.asm'
include '../kfar_arc/crc.inc' ;include '../kfar_arc/crc.inc'
include 'crc32.asm' include 'crc32.asm'
include 'adler32.asm' include 'adler32.asm'
include 'trees.asm' include 'trees.asm'
@ -170,25 +166,3 @@ align 4
@@: @@:
ret ret
; export table
align 4
EXPORTS:
dd adeflateInit, deflateInit
dd adeflateInit2, deflateInit2
dd adeflateReset, deflateReset
dd adeflate, deflate
dd adeflateEnd, deflateEnd
dd adeflateCopy, deflateCopy
dd azError, zError
dd acalc_crc32, calc_crc32
dd 0
; exported names
adeflateInit db 'deflateInit',0
adeflateInit2 db 'deflateInit2',0
adeflateReset db 'deflateReset',0
adeflate db 'deflate',0
adeflateEnd db 'deflateEnd',0
adeflateCopy db 'deflateCopy',0
azError db 'zError',0
acalc_crc32 db 'calc_crc32',0

View File

@ -226,30 +226,15 @@ if Z_SOLO eq 0
; unsigned char *next; ; unsigned char *next;
; z_off64_t pos; ; z_off64_t pos;
;}; ;};
;int gzgetc_ OF((gzFile file)); /* backward compatibility */
;if Z_PREFIX_SET if Z_PREFIX_SET eq 1
;# undef z_gzgetc ;# undef z_gzgetc
;# define z_gzgetc(g) \ ;# define z_gzgetc(g) \
; ((g)->have ? ((g)->have--, (g)->pos++, *((g)->next)++) : gzgetc(g)) ; ((g)->have ? ((g)->have--, (g)->pos++, *((g)->next)++) : gzgetc(g))
;#else else
;# define gzgetc(g) \ ;# define gzgetc(g) \
; ((g)->have ? ((g)->have--, (g)->pos++, *((g)->next)++) : gzgetc(g)) ; ((g)->have ? ((g)->have--, (g)->pos++, *((g)->next)++) : gzgetc(g))
end if end if
; provide 64-bit offset functions if _LARGEFILE64_SOURCE defined, and/or end if
; change the regular functions to 64 bits if _FILE_OFFSET_BITS is 64 (if
; both are true, the application gets the *64 functions, and the regular
; functions are changed to 64 bits) -- in case these are set on systems
; without large file support, _LFS64_LARGEFILE must also be true
; undocumented functions
;const char * zError OF((int));
;int inflateSyncPoint OF((z_streamp));
;const z_crc_t FAR * get_crc_table OF((void));
;int inflateUndermine OF((z_streamp, int));
;int inflateResetKeep OF((z_streamp));
;#if defined(_WIN32) && !defined(Z_SOLO)
;gzFile gzopen_w OF((const wchar_t *path,
; const char *mode));
;end if