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-äàííûõ.
|
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)
|
||||||
|
@ -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 ?
|
||||||
|
@ -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
|
@ -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.
|
||||||
|
@ -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:
|
||||||
;---------------------------------------------------------------------
|
;---------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -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
|
|
||||||
|
@ -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
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user