forked from KolibriOS/kolibrios
merge libraries 'archiver.obj' and 'zlib.obj'
git-svn-id: svn://kolibrios.org@6673 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
f9e3adeff5
commit
22c6f65977
@ -1,4 +1,7 @@
|
||||
archiver.obj ýêñïîðòèðóåò äâå ôóíêöèè äëÿ ðàñïàêîâêè deflate-äàííûõ.
|
||||
А также функции: deflateInit, deflateInit2, deflateReset, deflate,
|
||||
deflateEnd для упаковки deflate-данных, сделанные на основе свободно
|
||||
распространяемой библиотеки zlib.
|
||||
|
||||
Ïåðâàÿ: deflate_unpack
|
||||
Îáúÿâëåíèå â ñòèëå Ñè: void* __stdcall deflate_unpack(const void* data, unsigned* pLength);
|
||||
@ -64,3 +67,17 @@ deflate_callback:
|
||||
mov [ecx], length
|
||||
mov eax, buffer
|
||||
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)
|
||||
|
@ -3,7 +3,7 @@
|
||||
; target platform: KolibriOS
|
||||
; compiler: FASM 1.67.14
|
||||
; 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 kernel: no limit
|
||||
;
|
||||
@ -32,6 +32,7 @@ include '7zbranch.inc' ; branch filters for *.7z
|
||||
include '7zaes.inc' ; AES cryptor for *.7z
|
||||
include 'zip.inc' ; *.zip
|
||||
include 'deflate.inc' ; Deflate[64] decoder for *.7z and *.zip
|
||||
include '../zlib/zlib.asm' ; deflate coder
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;;;;;;;;;;;;;; Interface for KFar ;;;;;;;;;;;;;;
|
||||
@ -1242,9 +1243,9 @@ deflate_unpack2:
|
||||
mov ecx, 10000h
|
||||
jmp [eax+streamInfo.fillBuf]
|
||||
@@:
|
||||
push 68
|
||||
push SF_SYS_MISC
|
||||
pop eax
|
||||
push 20
|
||||
push SSF_MEM_REALLOC
|
||||
pop ebx
|
||||
int 0x40
|
||||
test eax, eax
|
||||
@ -1280,9 +1281,9 @@ deflate_unpack2:
|
||||
jnz @f
|
||||
inc ecx
|
||||
@@:
|
||||
push 68
|
||||
push SF_SYS_MISC
|
||||
pop eax
|
||||
push 20
|
||||
push SSF_MEM_REALLOC
|
||||
pop ebx
|
||||
int 0x40
|
||||
test eax, eax
|
||||
@ -1297,18 +1298,18 @@ deflate_unpack2:
|
||||
and ecx, 3
|
||||
rep movsb
|
||||
push eax
|
||||
push 68
|
||||
push SF_SYS_MISC
|
||||
pop eax
|
||||
push 13
|
||||
push SSF_MEM_FREE
|
||||
pop ebx
|
||||
lea ecx, [ebp-streamInfo.size-8]
|
||||
int 40h
|
||||
pop eax
|
||||
jmp .ret
|
||||
.nomem:
|
||||
push 68
|
||||
push SF_SYS_MISC
|
||||
pop eax
|
||||
push 13
|
||||
push SSF_MEM_FREE
|
||||
pop ebx
|
||||
test edx, edx
|
||||
jz @f
|
||||
@ -1342,9 +1343,9 @@ deflate_unpack2:
|
||||
ret
|
||||
|
||||
mypgalloc:
|
||||
push 68
|
||||
push SF_SYS_MISC
|
||||
pop eax
|
||||
push 12
|
||||
push SSF_MEM_ALLOC
|
||||
pop ebx
|
||||
int 0x40
|
||||
ret
|
||||
@ -1371,6 +1372,13 @@ EXPORTS:
|
||||
dd aClose, myclose
|
||||
dd aDeflateUnpack, deflate_unpack
|
||||
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
|
||||
|
||||
; exported names
|
||||
@ -1389,6 +1397,13 @@ aSetpos db 'setpos',0
|
||||
aClose db 'close',0
|
||||
aDeflateUnpack db 'deflate_unpack',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
|
||||
if lang eq ru
|
||||
@ -1512,6 +1527,8 @@ IncludeIGlobals
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;;;;;;;;;;;;;; Uninitialized data ;;;;;;;;;;;;;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
purge data ;used in 'macros.inc'
|
||||
purge section ;used in 'macros.inc'
|
||||
|
||||
section '.udata' data readable writable align 16
|
||||
kfar_info dd ?
|
||||
|
@ -1,5 +1,3 @@
|
||||
@fasm.exe -m 32768 zlib.asm zlib.obj
|
||||
@kpack zlib.obj
|
||||
@fasm.exe -m 32768 example1.asm example1.kex
|
||||
@kpack example1.kex
|
||||
pause
|
@ -23,8 +23,8 @@ if DYNAMIC_CRC_TABLE eq 1
|
||||
|
||||
align 4
|
||||
crc_table_empty dd 1
|
||||
align 4
|
||||
crc_table rd TBLS*256
|
||||
;align 4
|
||||
;crc_table rd TBLS*256
|
||||
|
||||
; 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.
|
||||
|
@ -245,22 +245,14 @@ title db 'Zlib test, press on [Up], [Down], [Left], [Right]',0
|
||||
align 4
|
||||
import_archiver:
|
||||
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
|
||||
deflateInit2 dd sz_deflateInit2
|
||||
deflateReset dd sz_deflateReset
|
||||
deflate dd sz_deflate
|
||||
deflateEnd dd sz_deflateEnd
|
||||
calc_crc32 dd sz_calc_crc32
|
||||
|
||||
dd 0,0
|
||||
|
||||
; sz_lib_init db 'lib_init',0
|
||||
sz_deflate_unpack db 'deflate_unpack',0
|
||||
sz_deflateInit db 'deflateInit',0
|
||||
sz_deflateInit2 db 'deflateInit2',0
|
||||
sz_deflateReset db 'deflateReset',0
|
||||
@ -272,21 +264,14 @@ import_zlib:
|
||||
system_dir_0 db '/sys/lib/'
|
||||
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_lib1 db 'Sorry I cannot load library zlib.obj',0
|
||||
head_f_i:
|
||||
head_f_l db 'System error',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:
|
||||
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
|
||||
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:
|
||||
;---------------------------------------------------------------------
|
||||
|
||||
|
@ -1,7 +1,3 @@
|
||||
format MS COFF
|
||||
public EXPORTS
|
||||
|
||||
section '.flat' code readable align 16
|
||||
|
||||
include '../../../../proc32.inc'
|
||||
include '../../../../macros.inc'
|
||||
@ -44,7 +40,7 @@ end if
|
||||
include 'zlib.inc'
|
||||
include 'deflate.inc'
|
||||
include 'zutil.asm'
|
||||
include '../kfar_arc/crc.inc'
|
||||
;include '../kfar_arc/crc.inc'
|
||||
include 'crc32.asm'
|
||||
include 'adler32.asm'
|
||||
include 'trees.asm'
|
||||
@ -170,25 +166,3 @@ align 4
|
||||
@@:
|
||||
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
|
||||
|
@ -226,30 +226,15 @@ if Z_SOLO eq 0
|
||||
; unsigned char *next;
|
||||
; z_off64_t pos;
|
||||
;};
|
||||
;int gzgetc_ OF((gzFile file)); /* backward compatibility */
|
||||
;if Z_PREFIX_SET
|
||||
|
||||
if Z_PREFIX_SET eq 1
|
||||
;# undef z_gzgetc
|
||||
;# define z_gzgetc(g) \
|
||||
; ((g)->have ? ((g)->have--, (g)->pos++, *((g)->next)++) : gzgetc(g))
|
||||
;#else
|
||||
else
|
||||
;# define gzgetc(g) \
|
||||
; ((g)->have ? ((g)->have--, (g)->pos++, *((g)->next)++) : gzgetc(g))
|
||||
end if
|
||||
|
||||
; provide 64-bit offset functions if _LARGEFILE64_SOURCE defined, and/or
|
||||
; 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
|
||||
end if
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user