Subversion Repositories Kolibri OS

Rev

Rev 6874 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
6874 IgorA 1
use32
2
org 0
6617 IgorA 3
	db 'MENUET01'
4
	dd 1,START,I_END,MEM,STACKTOP,0,cur_dir_path
5
 
6
include '../../../../proc32.inc'
7
include '../../../../macros.inc'
8
include '../../../../KOSfuncs.inc'
8271 IgorA 9
include '../../../../load_lib.mac'
6617 IgorA 10
 
11
include 'deflate.inc'
12
include 'debug.inc'
13
include 'zlib.inc'
14
 
15
@use_library
16
 
17
align 4
18
m0size dd 90 ;размер данных для упаковки
19
m1size dd 1024 ;размер буфера данных для упаковки
20
m2size dd 0 ;размер распакованных данных
21
 
22
align 4
23
m0: ;данные для упаковки
24
file 'zlib.txt'
25
 
26
align 4
27
m1 rb 1024 ;буфер для упакованных данных
28
m2 dd 0 ;указатель на распакованные данные
29
 
30
buf rb 1024 ;буфер для вывода сжатых данных в окно
31
strategy dd Z_DEFAULT_STRATEGY ;стратегия сжатия
32
 
33
align 4
34
START:
35
load_libraries l_libs_start,load_lib_end
36
mov	ebp,lib0
37
.test_lib_open:
38
	cmp	dword [ebp+ll_struc_size-4],0
39
	jz	@f
40
	mcall SF_TERMINATE_PROCESS ;exit not correct
41
@@:
42
	add ebp,ll_struc_size
43
	cmp ebp,load_lib_end
44
	jl .test_lib_open
45
 
46
;	mcall SF_SYS_MISC, SSF_HEAP_INIT
47
 
48
	call test_code
49
 
50
align 4
51
red:                    ; перерисовать окно
52
    call draw_window    ; вызываем процедуру отрисовки окна
53
 
54
align 4
55
still:
56
    mcall SF_WAIT_EVENT
57
    cmp  eax,1          ; перерисовать окно ?
58
    je   red
59
    cmp  eax,2          ; нажата клавиша ?
60
    je   key
61
    cmp  eax,3          ; нажата кнопка ?
62
    je   button
63
    jmp  still
64
 
65
align 4
66
key:
67
    mcall SF_GET_KEY
68
 
69
	cmp ah,178 ;Up
70
	jne @f
71
		cmp dword[strategy],0
72
		jle @f
73
		dec dword[strategy]
74
		call test_code
75
		call draw_window
76
	@@:
77
	cmp ah,177 ;Down
78
	jne @f
79
		cmp dword[strategy],4
80
		jge @f
81
		inc dword[strategy]
82
		call test_code
83
		call draw_window
84
	@@:
85
	cmp ah,176 ;Left
86
	jne @f
87
		cmp dword[m0size],8
88
		jl @f
89
		dec dword[m0size]
90
		call test_code
91
		call draw_window
92
	@@:
93
	cmp ah,179 ;Right
94
	jne @f
95
		inc dword[m0size]
96
		call test_code
97
		call draw_window
98
	@@:
99
    jmp  still          ; вернуться к началу цикла
100
 
101
;---------------------------------------------------------------------
102
align 4
103
button:
104
	mcall SF_GET_BUTTON
105
 
106
	cmp ah,1
107
	jne still
108
 
6639 IgorA 109
.exit: ; конец программы
6617 IgorA 110
  	mcall SF_SYS_MISC,SSF_MEM_FREE,[m2]
6639 IgorA 111
    mcall SF_TERMINATE_PROCESS
6617 IgorA 112
 
113
align 4
114
draw_window:
6801 IgorA 115
    mcall SF_REDRAW, SSF_BEGIN_DRAW
6617 IgorA 116
    mcall SF_STYLE_SETTINGS, SSF_GET_COLORS, sc,sizeof.system_colors
117
    mov   edx, [sc.work]         ; цвет фона
118
    or    edx, 0x33000000        ; и тип окна 3
119
    mcall SF_CREATE_WINDOW, <50,600>, <50,180>, , ,title
120
 
121
	cStr edx,'Strategy:'
122
	mcall SF_DRAW_TEXT, <10,10>,0x40f0,,9
123
	cStr edx,'Input size:'
124
	mcall , <10,20>,,,11
125
	cStr edx,'Compr. size:'
126
	mcall , <10,30>,,,12
127
	cStr edx,'Outp. size:'
128
	mcall , <10,120>,,,11
129
 
6801 IgorA 130
	mov edx,[strategy]
131
	imul edx,12
132
	add edx,capt_strateg
133
	mcall , <90,10>,0,,12
134
 
135
	mcall SF_DRAW_NUMBER, (5 shl 16)+1, m0size, <90,20>
6617 IgorA 136
	mcall , (5 shl 16)+1, m1size, <90,30>
137
	mcall , (5 shl 16)+1, m2size, <90,120>
138
	;mov ecx,(1 shl 31)
139
	mov esi,[m2size]
140
	cmp esi,95
141
	jle @f
142
		mov esi,95
143
	@@:
144
	mcall SF_DRAW_TEXT, <10,130>, 0, [m2]
145
 
146
	mov esi,7
147
	mov ebx,(10 shl 16)+45 ;(x shl 16)+y
148
	mov edx,buf
149
	.cycle1: ;rows
150
		mcall SF_DRAW_TEXT,, (1 shl 31)
151
		add ebx,10
152
		add edx,32*3
153
	dec esi
154
	jnz .cycle1
155
 
6801 IgorA 156
    mcall SF_REDRAW, SSF_END_DRAW
6617 IgorA 157
    ret
158
 
159
align 4
160
test_code:
161
	stdcall [deflateInit2], my_strm,\
162
		-1, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, [strategy]
163
;Стратегия:
164
; Z_DEFAULT_STRATEGY, Z_FILTERED, Z_HUFFMAN_ONLY, Z_RLE, Z_FIXED
165
 
166
	mov eax,my_strm
167
	mov [eax+z_stream.next_in],m0 ;устанавливаем память для сжатия
168
	mov ecx,[m0size]
6704 IgorA 169
	mov [eax+z_stream.avail_in],ecx ;размер сжимаемыж данных
6617 IgorA 170
	mov [eax+z_stream.next_out],m1 ;устанавливаем буфер для сжатия
6797 IgorA 171
	mov dword[eax+z_stream.avail_out],1024 ;размер буфера для сжатия (максимум 16 Кб)
6617 IgorA 172
 
6873 IgorA 173
	stdcall [deflate], my_strm, Z_FINISH
6639 IgorA 174
 
6797 IgorA 175
	;размер сжатых данных: 1024-[my_strm.avail_out]
6617 IgorA 176
	mov ecx,1024
6797 IgorA 177
	sub ecx,[my_strm.avail_out]
6617 IgorA 178
	mov [m1size],ecx
179
 
6639 IgorA 180
	;assert(ret != Z_STREAM_ERROR)
181
	;while (strm.avail_out == 0)
6617 IgorA 182
 
6639 IgorA 183
	;формирование текста для отображения сжатых данных
184
	;в 16-ричном виде, нужно только для примера
6617 IgorA 185
	mov ebx,[m1size]
186
	mov esi,m1
187
	mov edi,buf
188
	mov edx,7
6639 IgorA 189
align 4
6617 IgorA 190
	.cycle1: ;rows
191
	mov ecx,32
6639 IgorA 192
align 4
6617 IgorA 193
	.cycle0: ;cols
194
		stdcall hex_in_str, edi,[esi],2
195
		add edi,2
196
		inc esi
197
		mov byte[edi],' ' ;format space
198
		dec ebx
199
		jz .cycle1end ;if end file
200
		inc edi
201
		loop .cycle0
202
	mov byte[edi-1],0
203
	dec edx
204
	jnz .cycle1
205
	.cycle1end:
206
	mov byte[edi],0
207
 
6639 IgorA 208
	;удаление буфера с ранее распакованными данными
6617 IgorA 209
	mcall SF_SYS_MISC,SSF_MEM_FREE,[m2]
210
 
211
	mov eax,[m1size]
212
	sub eax,2 ;;; 2? or 6?
213
	mov [m2size],eax
214
	mov eax,m1
215
	add eax,2
216
	stdcall [deflate_unpack],eax,m2size
6639 IgorA 217
	mov [m2],eax ;запись новых распакованных данных
6874 IgorA 218
	mov ecx,[m0size] ;;; ???
6617 IgorA 219
	mov [m2size],ecx
220
	ret
221
 
222
align 4
223
proc print_z_struct uses eax ebx
224
	mov eax,my_strm
225
	mov ebx,[eax+z_stream.state]
226
	stdcall debug_fields,eax,sv_2
227
	stdcall debug_fields,ebx,sv_3
228
	ret
229
endp
230
 
6801 IgorA 231
align 4
6617 IgorA 232
sc system_colors
6801 IgorA 233
align 4
6617 IgorA 234
title db 'Zlib test, press on [Up], [Down], [Left], [Right]',0
235
 
236
align 4
6801 IgorA 237
capt_strateg db '0) Default ',0
238
db '1) Filtered',0
239
db '2) Huffman ',0
240
db '3) Rle     ',0
241
db '4) Fixed   ',0
242
 
243
align 4
6617 IgorA 244
import_archiver:
245
	deflate_unpack dd sz_deflate_unpack
246
	deflateInit		dd sz_deflateInit
247
	deflateInit2	dd sz_deflateInit2
248
	deflateReset	dd sz_deflateReset
249
	deflate			dd sz_deflate
250
	deflateEnd		dd sz_deflateEnd
6639 IgorA 251
	calc_crc32		dd sz_calc_crc32
6617 IgorA 252
	dd 0,0
6673 IgorA 253
	sz_deflate_unpack db 'deflate_unpack',0
6617 IgorA 254
	sz_deflateInit db 'deflateInit',0
255
	sz_deflateInit2 db 'deflateInit2',0
256
	sz_deflateReset db 'deflateReset',0
257
	sz_deflate db 'deflate',0
258
	sz_deflateEnd db 'deflateEnd',0
6639 IgorA 259
	sz_calc_crc32 db 'calc_crc32',0
260
 
6617 IgorA 261
;--------------------------------------------------
262
system_dir_0 db '/sys/lib/'
263
lib_name_0 db 'archiver.obj',0
264
 
265
l_libs_start:
8271 IgorA 266
	lib0 l_libs lib_name_0, library_path, system_dir_0, import_archiver
6617 IgorA 267
load_lib_end:
268
;---------------------------------------------------------------------
269
 
270
align 16
271
I_END:
272
my_strm z_stream
273
	rd 4096
274
align 16
275
STACKTOP:
276
cur_dir_path:
277
	rb 4096
278
library_path:
279
	rb 4096
280
MEM: