Subversion Repositories Kolibri OS

Rev

Rev 6639 | Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
6617 IgorA 1
use32   ; включить 32-битный режим ассемблера
2
org 0x0 ; адресация с нуля
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'
9
include '../../../../develop/libraries/box_lib/load_lib.mac'
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
 
109
.exit:
110
  	mcall SF_SYS_MISC,SSF_MEM_FREE,[m2]
111
    mcall SF_TERMINATE_PROCESS ; иначе конец программы
112
 
113
align 4
114
draw_window:
115
    mcall SF_REDRAW, SSF_BEGIN_DRAW ; функция 12: сообщить ОС о начале отрисовки
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
 
130
	mcall SF_DRAW_NUMBER, (1 shl 16)+1, strategy, <90,10>, 0
131
	mcall , (5 shl 16)+1, m0size, <90,20>
132
	mcall , (5 shl 16)+1, m1size, <90,30>
133
	mcall , (5 shl 16)+1, m2size, <90,120>
134
	;mov ecx,(1 shl 31)
135
	mov esi,[m2size]
136
	cmp esi,95
137
	jle @f
138
		mov esi,95
139
	@@:
140
	mcall SF_DRAW_TEXT, <10,130>, 0, [m2]
141
 
142
	mov esi,7
143
	mov ebx,(10 shl 16)+45 ;(x shl 16)+y
144
	mov edx,buf
145
	.cycle1: ;rows
146
		mcall SF_DRAW_TEXT,, (1 shl 31)
147
		add ebx,10
148
		add edx,32*3
149
	dec esi
150
	jnz .cycle1
151
 
152
    mcall SF_REDRAW, SSF_END_DRAW ; функция 12.2, закончили рисовать
153
    ret
154
 
155
align 4
156
test_code:
157
	stdcall [deflateInit2], my_strm,\
158
		-1, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, [strategy]
159
;Стратегия:
160
; Z_DEFAULT_STRATEGY, Z_FILTERED, Z_HUFFMAN_ONLY, Z_RLE, Z_FIXED
161
 
162
	mov eax,my_strm
163
	mov [eax+z_stream.next_in],m0 ;устанавливаем память для сжатия
164
	mov ecx,[m0size]
165
	mov word[eax+z_stream.avail_in],cx ;размер сжимаемыж данных
166
	mov [eax+z_stream.next_out],m1 ;устанавливаем буфер для сжатия
167
	mov word[eax+z_stream.avail_out],1024 ;размер буфера для сжатия
168
 
169
	;call print_z_struct
170
 
171
	stdcall [deflate], my_strm, Z_FINISH ;Z_NO_FLUSH
172
 
173
	;call print_z_struct
174
 
175
	;размер сжатых данных: 1024-word[eax+z_stream.avail_out]
176
	mov eax,my_strm
177
	mov ecx,1024
178
	sub cx,word[eax+z_stream.avail_out]
179
	mov [m1size],ecx
180
 
181
;assert(ret != Z_STREAM_ERROR)
182
;while (strm.avail_out == 0)
183
 
184
	mov ebx,[m1size]
185
	mov esi,m1
186
	mov edi,buf
187
	mov edx,7
188
	.cycle1: ;rows
189
	mov ecx,32
190
	.cycle0: ;cols
191
		stdcall hex_in_str, edi,[esi],2
192
		add edi,2
193
		inc esi
194
		mov byte[edi],' ' ;format space
195
		dec ebx
196
		jz .cycle1end ;if end file
197
		inc edi
198
		loop .cycle0
199
	mov byte[edi-1],0
200
	dec edx
201
	jnz .cycle1
202
 
203
	.cycle1end:
204
	mov byte[edi],0
205
 
206
	mcall SF_SYS_MISC,SSF_MEM_FREE,[m2]
207
 
208
	mov eax,[m1size]
209
	sub eax,2 ;;; 2? or 6?
210
	mov [m2size],eax
211
	mov eax,m1
212
	add eax,2
213
	stdcall [deflate_unpack],eax,m2size
214
	mov [m2],eax
215
	mov ecx,[m0size] ;;; ???
216
	mov [m2size],ecx
217
	ret
218
 
219
align 4
220
proc print_z_struct uses eax ebx
221
	mov eax,my_strm
222
	mov ebx,[eax+z_stream.state]
223
	stdcall debug_fields,eax,sv_2
224
	stdcall debug_fields,ebx,sv_3
225
	ret
226
endp
227
 
228
sc system_colors
229
 
230
title db 'Zlib test, press on [Up], [Down], [Left], [Right]',0
231
 
232
align 4
233
import_archiver:
234
	deflate_unpack dd sz_deflate_unpack
235
	dd 0,0
236
	sz_deflate_unpack db 'deflate_unpack',0
237
 
238
align 4
239
import_zlib:
240
;	dd sz_lib_init
241
	deflateInit		dd sz_deflateInit
242
	deflateInit2	dd sz_deflateInit2
243
	deflateReset	dd sz_deflateReset
244
	deflate			dd sz_deflate
245
	deflateEnd		dd sz_deflateEnd
246
 
247
	dd 0,0
248
 
249
;	sz_lib_init db 'lib_init',0
250
	sz_deflateInit db 'deflateInit',0
251
	sz_deflateInit2 db 'deflateInit2',0
252
	sz_deflateReset db 'deflateReset',0
253
	sz_deflate db 'deflate',0
254
	sz_deflateEnd db 'deflateEnd',0
255
;--------------------------------------------------
256
system_dir_0 db '/sys/lib/'
257
lib_name_0 db 'archiver.obj',0
258
 
259
system_dir_1 db '/sys/lib/'
260
lib_name_1 db 'zlib.obj',0
261
 
262
err_message_found_lib0 db 'Sorry I cannot load library archiver.obj',0
263
err_message_found_lib1 db 'Sorry I cannot load library zlib.obj',0
264
head_f_i:
265
head_f_l db 'System error',0
266
err_message_import0 db 'Error on load import library archiver.obj',0
267
err_message_import1 db 'Error on load import library zlib.obj',0
268
 
269
l_libs_start:
270
	lib0 l_libs lib_name_0, cur_dir_path, library_path, system_dir_0,\
271
		err_message_found_lib0, head_f_l, import_archiver,err_message_import0, head_f_i
272
	lib1 l_libs lib_name_1, cur_dir_path, library_path, system_dir_1,\
273
		err_message_found_lib1, head_f_l, import_zlib, err_message_import1, head_f_i
274
load_lib_end:
275
;---------------------------------------------------------------------
276
 
277
align 16
278
I_END:
279
my_strm z_stream
280
	rd 4096
281
align 16
282
STACKTOP:
283
cur_dir_path:
284
	rb 4096
285
library_path:
286
	rb 4096
287
MEM: