Rev 1671 | Rev 1686 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
1671 | mario79 | 1 | ; kpack = Kolibri Packer |
2 | ; Kolibri version |
||
3 | ; Written by diamond in 2006, 2007 specially for KolibriOS |
||
4 | ; |
||
5 | ; Disassemled and corrected in 2010 specially for FASM |
||
6 | ; by Marat Zakiyanov aka Mario79, aka Mario |
||
7 | ; |
||
8 | ; Uses LZMA compression library by Igor Pavlov |
||
9 | ; (for more information on LZMA and 7-Zip visit http://www.7-zip.org) |
||
10 | ; (plain-C packer and ASM unpacker are ported by diamond) |
||
11 | ;--------------------------------------------------------------------- |
||
12 | use32 |
||
13 | org 0 |
||
14 | |||
15 | db 'MENUET01' |
||
16 | dd 1 |
||
1681 | mario79 | 17 | dd START |
18 | dd IM_END |
||
19 | memf dd I_END |
||
20 | dd stacktop |
||
21 | dd params |
||
1671 | mario79 | 22 | dd 0 ;cur_dir_path |
23 | ;--------------------------------------------------------------------- |
||
1681 | mario79 | 24 | include '..\..\..\macros.inc' |
25 | |||
1671 | mario79 | 26 | START: |
27 | call clear_messages |
||
28 | ; set default path = /RD/1/ |
||
29 | mov esi,defpath |
||
30 | mov edi,path |
||
31 | mov [edi-4],dword 6 |
||
32 | movsw |
||
33 | movsd |
||
34 | ; get system window info |
||
1681 | mario79 | 35 | mcall 48,3,color_table,40 |
1671 | mario79 | 36 | inc ebx |
1681 | mario79 | 37 | mcall |
1671 | mario79 | 38 | mov [skinheight],eax |
39 | ; check command line |
||
40 | mov esi,params |
||
41 | mov [esi+100h],byte 0 |
||
1681 | mario79 | 42 | ;-------------------------------------- |
1671 | mario79 | 43 | parse_opt: |
44 | call skip_spaces |
||
45 | test al,al |
||
46 | jz default |
||
1681 | mario79 | 47 | |
1671 | mario79 | 48 | mov edi,inname |
49 | call copy_name |
||
50 | test al,al |
||
51 | jz outeqin |
||
1681 | mario79 | 52 | |
1671 | mario79 | 53 | mov edi,outname |
54 | call copy_name |
||
55 | test al,al |
||
56 | jnz default |
||
1681 | mario79 | 57 | ;-------------------------------------- |
1671 | mario79 | 58 | doit: |
59 | call draw_window |
||
60 | call pack |
||
61 | jmp waitevent |
||
62 | ;--------------------------------------------------------------------- |
||
63 | clear_messages: |
||
64 | xor eax,eax |
||
65 | mov ecx,80*20/4+1 |
||
66 | mov edi,message_mem |
||
67 | rep stosd |
||
68 | ret |
||
69 | ;--------------------------------------------------------------------- |
||
70 | exit: |
||
71 | xor eax,eax |
||
72 | dec eax |
||
1681 | mario79 | 73 | mcall |
74 | ;-------------------------------------- |
||
1671 | mario79 | 75 | outeqin: |
76 | mov ecx,48/4+1 |
||
77 | mov esi,inname-4 |
||
78 | mov edi,outname-4 |
||
79 | rep movsd |
||
80 | jmp doit |
||
81 | ;--------------------------------------------------------------------- |
||
82 | default: |
||
83 | mov [curedit],inname |
||
84 | mov ecx,[skinheight] |
||
85 | add ecx,5 |
||
86 | mov [curedit_y],ecx |
||
87 | mov esi,definoutname |
||
88 | mov edi,esi |
||
89 | xor ecx,ecx |
||
90 | xor eax,eax |
||
91 | dec ecx |
||
92 | repnz scasb |
||
93 | not ecx |
||
94 | dec ecx |
||
95 | mov [innamelen],ecx |
||
96 | push ecx |
||
97 | push esi |
||
98 | mov edi,inname |
||
99 | rep movsb |
||
100 | pop esi |
||
101 | pop ecx |
||
102 | mov [outnamelen],ecx |
||
103 | mov edi,outname |
||
104 | rep movsb |
||
105 | ;--------------------------------------------------------------------- |
||
106 | dodraw: |
||
107 | call draw_window |
||
1681 | mario79 | 108 | ;-------------------------------------- |
1671 | mario79 | 109 | waitevent: |
1681 | mario79 | 110 | mcall 10 |
1671 | mario79 | 111 | dec eax |
112 | jz dodraw |
||
1681 | mario79 | 113 | |
1671 | mario79 | 114 | dec eax |
115 | jz keypressed |
||
1681 | mario79 | 116 | |
1671 | mario79 | 117 | dec eax |
118 | jnz waitevent |
||
119 | ; button pressed |
||
1681 | mario79 | 120 | mcall 17 |
1671 | mario79 | 121 | xchg al,ah |
122 | cmp al,7 |
||
123 | jz but7 |
||
1681 | mario79 | 124 | |
1671 | mario79 | 125 | dec eax |
126 | jz exit |
||
1681 | mario79 | 127 | |
1671 | mario79 | 128 | dec eax |
129 | jnz nopack |
||
1681 | mario79 | 130 | |
1671 | mario79 | 131 | call pack |
132 | jmp waitevent |
||
133 | ;--------------------------------------------------------------------- |
||
134 | nopack: |
||
135 | dec eax |
||
136 | jnz nounpack |
||
1681 | mario79 | 137 | |
1671 | mario79 | 138 | call unpack |
139 | jmp waitevent |
||
140 | ;--------------------------------------------------------------------- |
||
141 | but7: |
||
142 | call clear_messages |
||
143 | ; display logo |
||
144 | mov esi,info_str |
||
145 | push info_len |
||
146 | pop ecx |
||
147 | call write_string |
||
148 | ; display info |
||
149 | mov esi,usage_str |
||
150 | mov ecx,usage_len |
||
151 | call write_string |
||
152 | jmp waitevent |
||
153 | ;--------------------------------------------------------------------- |
||
154 | nounpack: |
||
155 | ; this is infile/outfile/path button |
||
156 | call clear_edit_points |
||
157 | mov esi,inname |
||
158 | mov ecx,[skinheight] |
||
159 | add ecx,5 |
||
160 | dec eax |
||
161 | jz edit |
||
1681 | mario79 | 162 | |
1671 | mario79 | 163 | mov esi,outname |
164 | add ecx,0Ch |
||
165 | dec eax |
||
166 | jz edit |
||
1681 | mario79 | 167 | |
1671 | mario79 | 168 | mov esi,path |
169 | add ecx,0Ch |
||
1681 | mario79 | 170 | ;-------------------------------------- |
1671 | mario79 | 171 | edit: |
172 | cmp esi,[curedit] |
||
173 | mov [curedit],0 |
||
174 | jz waitevent |
||
1681 | mario79 | 175 | |
1671 | mario79 | 176 | mov [curedit],esi |
177 | mov [curedit_y],ecx |
||
178 | mov al,1 |
||
179 | mov ebx,[esi-4] |
||
180 | mov edi,ebx |
||
181 | imul ebx,6 |
||
182 | add ebx,42h |
||
183 | add ecx,4 |
||
184 | xor edx,edx |
||
1681 | mario79 | 185 | ;-------------------------------------- |
1671 | mario79 | 186 | @@: |
187 | cmp edi,48 |
||
188 | jz waitevent |
||
1681 | mario79 | 189 | |
190 | mcall |
||
1671 | mario79 | 191 | add ebx,6 |
192 | inc edi |
||
193 | jmp @b |
||
194 | ;--------------------------------------------------------------------- |
||
195 | keypressed: |
||
1681 | mario79 | 196 | mcall 2 |
1671 | mario79 | 197 | xchg al,ah |
198 | mov edi,[curedit] |
||
199 | test edi,edi |
||
200 | jz waitevent |
||
1681 | mario79 | 201 | |
1671 | mario79 | 202 | mov ebx,[edi-4] |
203 | cmp al,8 |
||
204 | jz backspace |
||
1681 | mario79 | 205 | |
1671 | mario79 | 206 | cmp al,13 |
207 | jz onenter |
||
1681 | mario79 | 208 | |
1671 | mario79 | 209 | cmp al,20h |
210 | jb waitevent |
||
1681 | mario79 | 211 | |
1671 | mario79 | 212 | cmp ebx,48 |
213 | jz waitevent |
||
1681 | mario79 | 214 | |
1671 | mario79 | 215 | mov [edi+ebx],al |
216 | inc ebx |
||
217 | mov [edi-4],ebx |
||
218 | ; clear point and draw symbol |
||
219 | lea edi,[edi+ebx-1] |
||
220 | imul ebx,6 |
||
221 | add ebx,40h-6 |
||
222 | shl ebx,16 |
||
223 | mov bl,6 |
||
224 | mov ecx,[curedit_y] |
||
225 | push ecx |
||
226 | shl ecx,16 |
||
227 | mov cl,9 |
||
1681 | mario79 | 228 | mcall 13,,,[color_table+20] |
1671 | mario79 | 229 | pop ecx |
230 | mov bx,cx |
||
1681 | mario79 | 231 | mcall 4,,[color_table+32],edi,1 |
1671 | mario79 | 232 | jmp waitevent |
233 | ;--------------------------------------------------------------------- |
||
234 | backspace: |
||
235 | test ebx,ebx |
||
236 | jz waitevent |
||
1681 | mario79 | 237 | |
1671 | mario79 | 238 | dec ebx |
239 | mov [edi-4],ebx |
||
240 | ; clear symbol and set point |
||
241 | imul ebx,6 |
||
242 | add ebx,40h |
||
243 | shl ebx,16 |
||
244 | mov bl,6 |
||
245 | mov ecx,[curedit_y] |
||
246 | push ecx |
||
247 | shl ecx,16 |
||
248 | mov cl,9 |
||
1681 | mario79 | 249 | mcall 13,,,[color_table+20] |
1671 | mario79 | 250 | xor edx,edx |
251 | shr ebx,16 |
||
252 | inc ebx |
||
253 | inc ebx |
||
254 | pop ecx |
||
255 | add ecx,4 |
||
1681 | mario79 | 256 | mcall 1 |
1671 | mario79 | 257 | jmp waitevent |
258 | ;--------------------------------------------------------------------- |
||
259 | onenter: |
||
260 | cmp [curedit],inname |
||
261 | jnz @f |
||
1681 | mario79 | 262 | |
1671 | mario79 | 263 | push 2 |
264 | pop eax |
||
265 | jmp nounpack |
||
266 | ;--------------------------------------------------------------------- |
||
267 | @@: |
||
268 | cmp [curedit],outname |
||
269 | jnz @f |
||
1681 | mario79 | 270 | |
1671 | mario79 | 271 | call pack |
272 | jmp waitevent |
||
273 | ;--------------------------------------------------------------------- |
||
274 | @@: |
||
275 | call clear_edit_points |
||
276 | jmp waitevent |
||
277 | ;--------------------------------------------------------------------- |
||
278 | pack: |
||
279 | call clear_edit_points |
||
280 | and [curedit],0 |
||
281 | ; clear messages |
||
282 | call clear_messages |
||
283 | ; display logo |
||
284 | mov esi,info_str |
||
285 | push info_len |
||
286 | pop ecx |
||
287 | call write_string |
||
288 | ; load input file |
||
289 | mov esi,inname |
||
290 | call get_full_name |
||
291 | mov ebx,fn70block |
||
292 | mov [ebx],dword 5 |
||
293 | and [ebx+4],dword 0 |
||
294 | and [ebx+8],dword 0 |
||
295 | and [ebx+12],dword 0 |
||
296 | mov [ebx+16],dword file_attr |
||
1681 | mario79 | 297 | mcall 70 |
1671 | mario79 | 298 | test eax,eax |
299 | jz inopened |
||
300 | ;--------------------------------------------------------------------- |
||
301 | infileerr: |
||
302 | mov esi,errload_str |
||
303 | push errload_len |
||
304 | pop ecx |
||
305 | jmp write_string |
||
306 | ;--------------------------------------------------------------------- |
||
307 | inopened: |
||
308 | mov ebx,[insize] |
||
309 | test ebx,ebx |
||
310 | jz infileerr |
||
311 | ; maximum memory requests: 2*insize + 2*(maxoutsize+400h) + worksize |
||
312 | mov esi,[memf] |
||
313 | mov [infile],esi |
||
314 | add esi,ebx |
||
315 | mov [inbuftmp],esi |
||
316 | add esi,ebx |
||
317 | mov [outfile],esi |
||
318 | mov [outfile1],esi |
||
319 | mov [outfilebest],esi |
||
320 | mov ecx,ebx |
||
321 | shr ecx,3 |
||
322 | add ecx,ebx |
||
323 | add ecx,400h |
||
324 | add esi,ecx |
||
325 | mov [outfile2],esi |
||
326 | add esi,ecx |
||
327 | mov [workmem],esi |
||
328 | add ecx,ebx |
||
329 | add ecx,ecx |
||
330 | add ecx,[memf] |
||
331 | ; LZMA requires 0x448000 + dictsize*9.5 bytes for workmem, |
||
332 | and [lzma_dictsize],0 |
||
333 | push ecx |
||
334 | mov eax,ebx |
||
335 | dec eax |
||
336 | bsr ecx,eax |
||
337 | inc ecx |
||
338 | cmp ecx,28 |
||
339 | jb @f |
||
1681 | mario79 | 340 | |
1671 | mario79 | 341 | mov cl,28 |
1681 | mario79 | 342 | ;-------------------------------------- |
1671 | mario79 | 343 | @@: |
344 | mov edx,ecx |
||
345 | xor eax,eax |
||
346 | inc eax |
||
347 | shl eax,cl |
||
348 | imul eax,19 |
||
349 | shr eax,1 |
||
350 | add eax,448000h |
||
351 | pop ecx |
||
352 | add ecx,eax |
||
1681 | mario79 | 353 | mcall 64,1 |
1671 | mario79 | 354 | test eax,eax |
355 | jz mem_ok |
||
1681 | mario79 | 356 | ;-------------------------------------- |
1671 | mario79 | 357 | ; try to use smaller dictionary |
358 | meml0: |
||
359 | cmp edx,4 |
||
360 | jbe memf1 |
||
1681 | mario79 | 361 | |
1671 | mario79 | 362 | dec edx |
363 | xor eax,eax |
||
364 | inc eax |
||
365 | mov ecx,edx |
||
366 | shl eax,cl |
||
367 | imul eax,19 |
||
368 | shr eax,1 |
||
369 | add eax,509000h |
||
370 | pop ecx |
||
371 | push ecx |
||
372 | add ecx,eax |
||
1681 | mario79 | 373 | mcall 64 |
1671 | mario79 | 374 | test eax,eax |
375 | jnz meml0 |
||
1681 | mario79 | 376 | ;-------------------------------------- |
1671 | mario79 | 377 | ; ok, say warning and continue |
378 | mov [lzma_dictsize],edx |
||
379 | mov esi,lzma_memsmall_str |
||
380 | push lzma_memsmall_len |
||
381 | pop ecx |
||
382 | call write_string |
||
383 | jmp mem_ok |
||
384 | ;--------------------------------------------------------------------- |
||
385 | memf1: |
||
386 | mov esi,nomem_str |
||
387 | push nomem_len |
||
388 | pop ecx |
||
389 | jmp write_string |
||
390 | ;--------------------------------------------------------------------- |
||
391 | mem_ok: |
||
392 | mov eax,[insize] |
||
393 | mov ebx,fn70block |
||
394 | mov [ebx],byte 0 |
||
395 | mov [ebx+12],eax |
||
396 | mov esi,[infile] |
||
397 | mov [ebx+16],esi |
||
1681 | mario79 | 398 | mcall 70 |
1671 | mario79 | 399 | test eax,eax |
400 | jnz infileerr |
||
1681 | mario79 | 401 | |
1671 | mario79 | 402 | mov eax,[outfile] |
403 | mov [eax],dword 'KPCK' ;'KCPK' |
||
404 | mov ecx,[insize] |
||
405 | mov [eax+4],dword ecx |
||
406 | mov edi,eax |
||
407 | ; set LZMA dictionary size |
||
408 | mov eax,[lzma_dictsize] |
||
409 | test eax,eax |
||
410 | js no_lzma_setds |
||
411 | jnz lzma_setds |
||
1681 | mario79 | 412 | |
1671 | mario79 | 413 | mov ecx,[insize] |
414 | dec ecx |
||
415 | bsr eax,ecx |
||
416 | inc eax |
||
417 | cmp eax,28 |
||
418 | jb lzma_setds |
||
1681 | mario79 | 419 | |
1671 | mario79 | 420 | mov eax,28 |
1681 | mario79 | 421 | ;-------------------------------------- |
1671 | mario79 | 422 | lzma_setds: |
423 | push eax |
||
424 | call lzma_set_dict_size |
||
1681 | mario79 | 425 | ;-------------------------------------- |
1671 | mario79 | 426 | no_lzma_setds: |
427 | push compressing_len |
||
428 | pop ecx |
||
429 | mov esi,compressing_str |
||
430 | call write_string |
||
431 | mov esi,[outfile1] |
||
432 | mov edi,[outfile2] |
||
433 | movsd |
||
434 | movsd |
||
435 | movsd |
||
436 | call pack_lzma |
||
437 | mov [outsize],eax |
||
438 | mov eax,[outfile] |
||
439 | mov [outfilebest],eax |
||
440 | mov [method],use_lzma |
||
1681 | mario79 | 441 | ;-------------------------------------- |
1671 | mario79 | 442 | @@: |
443 | call preprocess_calltrick |
||
444 | test eax,eax |
||
445 | jz noct1 |
||
1681 | mario79 | 446 | |
1671 | mario79 | 447 | call set_outfile |
448 | call pack_lzma |
||
449 | add eax,5 |
||
450 | cmp eax,[outsize] |
||
451 | jae @f |
||
1681 | mario79 | 452 | |
1671 | mario79 | 453 | mov [outsize],eax |
454 | mov eax,[outfile] |
||
455 | mov [outfilebest],eax |
||
456 | mov [method],use_lzma or use_calltrick1 |
||
1681 | mario79 | 457 | ;-------------------------------------- |
1671 | mario79 | 458 | @@: |
459 | noct1: |
||
460 | call set_outfile |
||
461 | push [ctn] |
||
462 | mov al,[cti] |
||
463 | push eax |
||
464 | call preprocess_calltrick2 |
||
465 | test eax,eax |
||
466 | jz noct2 |
||
1681 | mario79 | 467 | |
1671 | mario79 | 468 | call set_outfile |
469 | call pack_lzma |
||
470 | add eax,5 |
||
471 | cmp eax,[outsize] |
||
472 | jae @f |
||
1681 | mario79 | 473 | |
1671 | mario79 | 474 | mov [outsize],eax |
475 | mov eax,[outfile] |
||
476 | mov [outfilebest],eax |
||
477 | mov [method],use_lzma or use_calltrick2 |
||
478 | pop ecx |
||
479 | pop ecx |
||
480 | push [ctn] |
||
481 | mov al,[cti] |
||
482 | push eax |
||
1681 | mario79 | 483 | ;-------------------------------------- |
1671 | mario79 | 484 | @@: |
485 | noct2: |
||
486 | pop eax |
||
487 | mov [cti],al |
||
488 | pop [ctn] |
||
489 | add [outsize],12 |
||
490 | mov eax,[outsize] |
||
491 | cmp eax,[insize] |
||
492 | jb packed_ok |
||
1681 | mario79 | 493 | |
1671 | mario79 | 494 | mov esi,too_big_str |
495 | push too_big_len |
||
496 | pop ecx |
||
497 | jmp write_string |
||
498 | ;--------------------------------------------------------------------- |
||
499 | packed_ok: |
||
500 | ; set header |
||
501 | movzx eax,[method] |
||
502 | mov edi,[outfilebest] |
||
503 | mov [edi+8],eax |
||
504 | test al,use_calltrick1 or use_calltrick2 |
||
505 | jz @f |
||
1681 | mario79 | 506 | |
1671 | mario79 | 507 | mov ecx,[outsize] |
508 | add ecx,edi |
||
509 | mov eax,[ctn] |
||
510 | mov [ecx-5],eax |
||
511 | mov al,[cti] |
||
512 | mov [ecx-1],al |
||
1681 | mario79 | 513 | ;-------------------------------------- |
1671 | mario79 | 514 | @@: |
515 | mov eax,[outsize] |
||
516 | mov ecx,100 |
||
517 | mul ecx |
||
518 | div [insize] |
||
519 | aam |
||
520 | xchg al,ah |
||
521 | add ax,'00' |
||
522 | mov [ratio],ax |
||
523 | mov esi,done_str |
||
524 | push done_len |
||
525 | pop ecx |
||
526 | call write_string |
||
1681 | mario79 | 527 | ;-------------------------------------- |
1671 | mario79 | 528 | ; save output file |
529 | saveout: |
||
530 | mov esi,outname |
||
531 | call get_full_name |
||
532 | mov ebx,fn70block |
||
533 | mov [ebx],byte 2 |
||
534 | mov eax,[outfilebest] |
||
535 | mov ecx,[outsize] |
||
536 | mov [ebx+12],ecx |
||
537 | mov [ebx+16],eax |
||
1681 | mario79 | 538 | mcall 70 |
1671 | mario79 | 539 | test eax,eax |
540 | jz @f |
||
1681 | mario79 | 541 | ;-------------------------------------- |
1671 | mario79 | 542 | outerr: |
543 | mov esi,outfileerr_str |
||
544 | push outfileerr_len |
||
545 | pop ecx |
||
546 | jmp write_string |
||
547 | ;--------------------------------------------------------------------- |
||
548 | @@: |
||
549 | xor eax,eax |
||
550 | mov ebx,fn70block |
||
551 | mov [ebx],byte 6 |
||
552 | mov [ebx+4],eax |
||
553 | mov [ebx+8],eax |
||
554 | mov [ebx+12],eax |
||
555 | mov [ebx+16],dword file_attr |
||
1681 | mario79 | 556 | mcall 70 |
1671 | mario79 | 557 | ret |
558 | ;--------------------------------------------------------------------- |
||
559 | set_outfile: |
||
560 | mov eax,[outfilebest] |
||
561 | xor eax,[outfile1] |
||
562 | xor eax,[outfile2] |
||
563 | mov [outfile],eax |
||
564 | ret |
||
565 | ;--------------------------------------------------------------------- |
||
566 | pack_calltrick_fail: |
||
567 | xor eax,eax |
||
568 | mov [ctn],0 |
||
569 | ret |
||
570 | ;--------------------------------------------------------------------- |
||
571 | preprocess_calltrick: |
||
572 | ; input preprocessing |
||
573 | xor eax,eax |
||
574 | mov edi,ct1 |
||
575 | mov ecx,256/4 |
||
576 | push edi |
||
577 | rep stosd |
||
578 | pop edi |
||
579 | mov ecx,[insize] |
||
580 | mov esi,[infile] |
||
581 | xchg eax,edx |
||
582 | mov ebx,[inbuftmp] |
||
1681 | mario79 | 583 | ;-------------------------------------- |
1671 | mario79 | 584 | input_pre: |
585 | lodsb |
||
586 | sub al,0E8h |
||
587 | cmp al,1 |
||
588 | ja input_pre_cont |
||
1681 | mario79 | 589 | |
1671 | mario79 | 590 | cmp ecx,5 |
591 | jb input_pre_done |
||
1681 | mario79 | 592 | |
1671 | mario79 | 593 | lodsd |
594 | add eax,esi |
||
595 | sub eax,[infile] |
||
596 | cmp eax,[insize] |
||
597 | jae xxx |
||
1681 | mario79 | 598 | |
1671 | mario79 | 599 | cmp eax,1000000h |
600 | jae xxx |
||
1681 | mario79 | 601 | |
1671 | mario79 | 602 | sub ecx,4 |
603 | ; bswap is not supported on i386 |
||
604 | xchg al,ah |
||
605 | ror eax,16 |
||
606 | xchg al,ah |
||
607 | mov [esi-4],eax |
||
608 | inc edx |
||
609 | mov [ebx],esi |
||
610 | add ebx,4 |
||
611 | jmp input_pre_cont |
||
612 | ;--------------------------------------------------------------------- |
||
613 | xxx: |
||
614 | sub esi,4 |
||
615 | movzx eax,byte [esi] |
||
616 | mov [eax+edi],byte 1 |
||
1681 | mario79 | 617 | ;-------------------------------------- |
1671 | mario79 | 618 | input_pre_cont: |
619 | loop input_pre |
||
1681 | mario79 | 620 | ;-------------------------------------- |
1671 | mario79 | 621 | input_pre_done: |
622 | mov [ctn],edx |
||
623 | xor eax,eax |
||
624 | mov ecx,256 |
||
625 | repnz scasb |
||
626 | jnz pack_calltrick_fail |
||
1681 | mario79 | 627 | |
1671 | mario79 | 628 | not cl |
629 | mov [cti],cl |
||
630 | @@: |
||
631 | cmp ebx,[inbuftmp] |
||
632 | jz @f |
||
1681 | mario79 | 633 | |
1671 | mario79 | 634 | sub ebx,4 |
635 | mov eax,[ebx] |
||
636 | mov [eax-4],cl |
||
637 | jmp @b |
||
638 | ;--------------------------------------------------------------------- |
||
639 | @@: |
||
640 | mov al,1 |
||
641 | ret |
||
642 | ;--------------------------------------------------------------------- |
||
643 | pack_lzma: |
||
644 | mov eax,[outfile] |
||
645 | add eax,11 |
||
646 | push [workmem] ;workmem |
||
647 | push [insize] ;length |
||
648 | push eax ;destination |
||
649 | push [infile] ;source |
||
650 | call lzma_compress |
||
651 | mov ecx,[outfile] |
||
652 | mov edx,[ecx+12] |
||
653 | xchg dl,dh |
||
654 | ror edx,16 |
||
655 | xchg dl,dh |
||
656 | mov [ecx+12],edx |
||
657 | dec eax |
||
658 | ret |
||
659 | ;--------------------------------------------------------------------- |
||
660 | preprocess_calltrick2: |
||
661 | ; restore input |
||
662 | mov esi,[infile] |
||
663 | mov ecx,[ctn] |
||
664 | jecxz pc2l2 |
||
1681 | mario79 | 665 | ;-------------------------------------- |
1671 | mario79 | 666 | pc2l1: |
667 | lodsb |
||
668 | sub al,0E8h |
||
669 | cmp al,1 |
||
670 | ja pc2l1 |
||
1681 | mario79 | 671 | |
1671 | mario79 | 672 | mov al,[cti] |
673 | cmp [esi],al |
||
674 | jnz pc2l1 |
||
1681 | mario79 | 675 | |
1671 | mario79 | 676 | lodsd |
677 | shr ax,8 |
||
678 | ror eax,16 |
||
679 | xchg al,ah |
||
680 | sub eax,esi |
||
681 | add eax,[infile] |
||
682 | mov [esi-4],eax |
||
683 | loop pc2l1 |
||
1681 | mario79 | 684 | ;-------------------------------------- |
1671 | mario79 | 685 | pc2l2: |
686 | ; input preprocessing |
||
687 | mov edi,ct1 |
||
688 | xor eax,eax |
||
689 | push edi |
||
690 | mov ecx,256/4 |
||
691 | rep stosd |
||
692 | pop edi |
||
693 | mov ecx,[insize] |
||
694 | mov esi,[infile] |
||
695 | mov ebx,[inbuftmp] |
||
696 | xchg eax,edx |
||
1681 | mario79 | 697 | ;-------------------------------------- |
1671 | mario79 | 698 | input_pre2: |
699 | lodsb |
||
1681 | mario79 | 700 | ;-------------------------------------- |
1671 | mario79 | 701 | @@: |
702 | cmp al,0Fh |
||
703 | jnz ip1 |
||
1681 | mario79 | 704 | |
1671 | mario79 | 705 | dec ecx |
706 | jz input_pre_done2 |
||
1681 | mario79 | 707 | |
1671 | mario79 | 708 | lodsb |
709 | cmp al,80h |
||
710 | jb @b |
||
1681 | mario79 | 711 | |
1671 | mario79 | 712 | cmp al,90h |
713 | jb @f |
||
1681 | mario79 | 714 | ;-------------------------------------- |
1671 | mario79 | 715 | ip1: |
716 | sub al,0E8h |
||
717 | cmp al,1 |
||
718 | ja input_pre_cont2 |
||
1681 | mario79 | 719 | ;-------------------------------------- |
1671 | mario79 | 720 | @@: |
721 | cmp ecx,5 |
||
722 | jb input_pre_done2 |
||
1681 | mario79 | 723 | |
1671 | mario79 | 724 | lodsd |
725 | add eax,esi |
||
726 | sub eax,[infile] |
||
727 | cmp eax,[insize] |
||
728 | jae xxx2 |
||
1681 | mario79 | 729 | |
1671 | mario79 | 730 | cmp eax,1000000h |
731 | jae xxx2 |
||
1681 | mario79 | 732 | |
1671 | mario79 | 733 | sub ecx,4 |
734 | xchg al,ah |
||
735 | rol eax,16 |
||
736 | xchg al,ah |
||
737 | mov [esi-4],eax |
||
738 | inc edx |
||
739 | mov [ebx],esi |
||
740 | add ebx,4 |
||
741 | jmp input_pre_cont2 |
||
742 | ;--------------------------------------------------------------------- |
||
743 | xxx2: sub esi,4 |
||
744 | movzx eax,byte [esi] |
||
745 | mov [eax+edi],byte 1 |
||
1681 | mario79 | 746 | ;-------------------------------------- |
1671 | mario79 | 747 | input_pre_cont2: |
748 | loop input_pre2 |
||
1681 | mario79 | 749 | ;-------------------------------------- |
1671 | mario79 | 750 | input_pre_done2: |
751 | mov [ctn],edx |
||
752 | xor eax,eax |
||
753 | mov ecx,256 |
||
754 | repnz scasb |
||
755 | jnz pack_calltrick_fail |
||
1681 | mario79 | 756 | |
1671 | mario79 | 757 | not cl |
758 | mov [cti],cl |
||
1681 | mario79 | 759 | ;-------------------------------------- |
1671 | mario79 | 760 | @@: |
761 | cmp ebx,[inbuftmp] |
||
762 | jz @f |
||
1681 | mario79 | 763 | |
1671 | mario79 | 764 | sub ebx,4 |
765 | mov eax,[ebx] |
||
766 | mov [eax-4],cl |
||
767 | jmp @b |
||
768 | ;--------------------------------------------------------------------- |
||
769 | @@: |
||
770 | mov al,1 |
||
771 | ret |
||
772 | ;--------------------------------------------------------------------- |
||
773 | unpack: |
||
774 | call clear_edit_points |
||
775 | and [curedit],0 |
||
776 | ; clear messages |
||
777 | call clear_messages |
||
778 | ; display logo |
||
779 | mov esi,info_str |
||
780 | push info_len |
||
781 | pop ecx |
||
782 | call write_string |
||
783 | ; load input file |
||
784 | mov esi,inname |
||
785 | call get_full_name |
||
786 | mov ebx,fn70block |
||
787 | mov [ebx],dword 5 |
||
788 | and [ebx+4],dword 0 |
||
789 | and [ebx+8],dword 0 |
||
790 | and [ebx+12],dword 0 |
||
791 | mov [ebx+16],dword file_attr |
||
1681 | mario79 | 792 | mcall 70 |
1671 | mario79 | 793 | test eax,eax |
794 | jnz infileerr |
||
1681 | mario79 | 795 | |
1671 | mario79 | 796 | mov eax,[insize] |
797 | test eax,eax |
||
798 | jz infileerr |
||
1681 | mario79 | 799 | |
1671 | mario79 | 800 | mov ecx,[memf] |
801 | mov [infile],ecx |
||
802 | add ecx,eax |
||
803 | mov [outfile],ecx |
||
804 | mov [outfilebest],ecx |
||
1681 | mario79 | 805 | mcall 64,1 |
1671 | mario79 | 806 | test eax,eax |
807 | jnz memf1 |
||
1681 | mario79 | 808 | |
1671 | mario79 | 809 | mov ebx,fn70block |
810 | mov [ebx],byte 0 |
||
811 | mov eax,[insize] |
||
812 | mov [ebx+12],eax |
||
813 | mov esi,[infile] |
||
814 | mov [ebx+16],esi |
||
1681 | mario79 | 815 | mcall 70 |
1671 | mario79 | 816 | test eax,eax |
817 | jnz infileerr |
||
1681 | mario79 | 818 | |
1671 | mario79 | 819 | mov eax,[infile] |
1681 | mario79 | 820 | cmp [eax],dword 'KPCK' |
1671 | mario79 | 821 | jz @f |
1681 | mario79 | 822 | ;-------------------------------------- |
1671 | mario79 | 823 | unpack_err: |
824 | mov esi,notpacked_str |
||
825 | push notpacked_len |
||
826 | pop ecx |
||
827 | jmp write_string |
||
828 | ;--------------------------------------------------------------------- |
||
829 | @@: |
||
830 | mov ecx,[outfile] |
||
831 | add ecx,dword [eax+4] |
||
1681 | mario79 | 832 | mcall 64,1 |
1671 | mario79 | 833 | test eax,eax |
834 | jnz memf1 |
||
1681 | mario79 | 835 | |
1671 | mario79 | 836 | mov esi,[infile] |
837 | mov eax,[esi+8] |
||
838 | push eax |
||
839 | and al,0C0h |
||
840 | cmp al,0C0h |
||
841 | pop eax |
||
842 | jz unpack_err |
||
1681 | mario79 | 843 | |
1671 | mario79 | 844 | and al,not 0C0h |
845 | dec eax |
||
846 | jnz unpack_err |
||
1681 | mario79 | 847 | |
1671 | mario79 | 848 | mov eax,[esi+4] |
849 | mov [outsize],eax |
||
850 | push eax |
||
851 | push [outfile] |
||
852 | add esi,11 |
||
853 | push esi |
||
854 | mov eax,[esi+1] |
||
855 | xchg al,ah |
||
856 | ror eax,16 |
||
857 | xchg al,ah |
||
858 | mov [esi+1],eax |
||
859 | call lzma_decompress |
||
860 | mov esi,[infile] |
||
861 | test [esi+8],byte 80h |
||
862 | jnz uctr1 |
||
1681 | mario79 | 863 | |
1671 | mario79 | 864 | test [esi+8],byte 40h |
865 | jz udone |
||
1681 | mario79 | 866 | |
1671 | mario79 | 867 | add esi,[insize] |
868 | sub esi,5 |
||
869 | lodsd |
||
870 | mov ecx,eax |
||
871 | jecxz udone |
||
1681 | mario79 | 872 | |
1671 | mario79 | 873 | mov dl,[esi] |
874 | mov esi,[outfile] |
||
1681 | mario79 | 875 | ;-------------------------------------- |
1671 | mario79 | 876 | uc1: |
877 | lodsb |
||
878 | sub al,0E8h |
||
879 | cmp al,1 |
||
880 | ja uc1 |
||
1681 | mario79 | 881 | |
1671 | mario79 | 882 | cmp [esi],dl |
883 | jnz uc1 |
||
1681 | mario79 | 884 | |
1671 | mario79 | 885 | lodsd |
886 | shr ax,8 |
||
887 | ror eax,16 |
||
888 | xchg al,ah |
||
889 | sub eax,esi |
||
890 | add eax,[outfile] |
||
891 | mov [esi-4],eax |
||
892 | loop uc1 |
||
893 | jmp udone |
||
894 | ;--------------------------------------------------------------------- |
||
895 | uctr1: |
||
896 | add esi,[insize] |
||
897 | sub esi,5 |
||
898 | lodsd |
||
899 | mov ecx,eax |
||
900 | jecxz udone |
||
1681 | mario79 | 901 | |
1671 | mario79 | 902 | mov dl,[esi] |
903 | mov esi,[outfile] |
||
1681 | mario79 | 904 | ;-------------------------------------- |
1671 | mario79 | 905 | uc2: |
906 | lodsb |
||
1681 | mario79 | 907 | ;-------------------------------------- |
1671 | mario79 | 908 | @@: |
909 | cmp al,15 |
||
910 | jnz uf |
||
1681 | mario79 | 911 | |
1671 | mario79 | 912 | lodsb |
913 | cmp al,80h |
||
914 | jb @b |
||
1681 | mario79 | 915 | |
1671 | mario79 | 916 | cmp al,90h |
917 | jb @f |
||
1681 | mario79 | 918 | ;-------------------------------------- |
1671 | mario79 | 919 | uf: |
920 | sub al,0E8h |
||
921 | cmp al,1 |
||
922 | ja uc2 |
||
1681 | mario79 | 923 | ;-------------------------------------- |
1671 | mario79 | 924 | @@: |
925 | cmp [esi],dl |
||
926 | jnz uc2 |
||
1681 | mario79 | 927 | |
1671 | mario79 | 928 | lodsd |
929 | shr ax,8 |
||
930 | ror eax,16 |
||
931 | xchg al,ah |
||
932 | sub eax,esi |
||
933 | add eax,[outfile] |
||
934 | mov [esi-4],eax |
||
935 | loop uc2 |
||
1681 | mario79 | 936 | ;-------------------------------------- |
1671 | mario79 | 937 | udone: |
938 | mov esi,unpacked_ok |
||
939 | push unpacked_len |
||
940 | pop ecx |
||
941 | call write_string |
||
942 | jmp saveout |
||
1681 | mario79 | 943 | |
1671 | mario79 | 944 | ;--------------------------------------------------------------------- |
945 | get_full_name: |
||
946 | push esi |
||
947 | mov esi,path |
||
948 | mov ecx,[esi-4] |
||
949 | mov edi,fullname |
||
950 | rep movsb |
||
951 | mov al,'/' |
||
952 | cmp [edi-1],al |
||
953 | jz @f |
||
1681 | mario79 | 954 | |
1671 | mario79 | 955 | stosb |
1681 | mario79 | 956 | ;-------------------------------------- |
1671 | mario79 | 957 | @@: |
958 | pop esi |
||
959 | cmp [esi],al |
||
960 | jnz @f |
||
1681 | mario79 | 961 | |
1671 | mario79 | 962 | mov edi,fullname |
1681 | mario79 | 963 | ;-------------------------------------- |
1671 | mario79 | 964 | @@: |
965 | mov ecx,[esi-4] |
||
966 | rep movsb |
||
967 | xor eax,eax |
||
968 | stosb |
||
969 | ret |
||
970 | ;--------------------------------------------------------------------- |
||
971 | wsret: |
||
972 | ret |
||
1681 | mario79 | 973 | ;--------------------------------------------------------------------- |
1671 | mario79 | 974 | write_string: |
975 | ; in: esi=pointer, ecx=length |
||
976 | mov edx,[message_cur_pos] |
||
1681 | mario79 | 977 | ;-------------------------------------- |
1671 | mario79 | 978 | x1: |
979 | lea edi,[message_mem+edx] |
||
1681 | mario79 | 980 | ;-------------------------------------- |
1671 | mario79 | 981 | do_write_char: |
982 | lodsb |
||
983 | cmp al,10 |
||
984 | jz newline |
||
1681 | mario79 | 985 | |
1671 | mario79 | 986 | stosb |
987 | inc edx |
||
988 | loop do_write_char |
||
989 | jmp x2 |
||
990 | ;--------------------------------------------------------------------- |
||
991 | newline: |
||
992 | xor eax,eax |
||
993 | stosb |
||
994 | xchg eax,edx |
||
995 | push ecx |
||
996 | push eax |
||
997 | mov ecx,80 |
||
998 | div ecx |
||
999 | pop eax |
||
1000 | xchg eax,edx |
||
1001 | sub edx,eax |
||
1002 | add edx,ecx |
||
1003 | pop ecx |
||
1004 | loop x1 |
||
1681 | mario79 | 1005 | ;-------------------------------------- |
1671 | mario79 | 1006 | x2: |
1007 | mov [message_cur_pos],edx |
||
1008 | ; update window |
||
1009 | mov ecx,[skinheight] |
||
1010 | shl ecx,16 |
||
1011 | add ecx,3700DEh |
||
1681 | mario79 | 1012 | mcall 13,<9,417>,,[color_table+20] |
1013 | ;-------------------------------------- |
||
1671 | mario79 | 1014 | draw_messages: |
1015 | mov ebx,[skinheight] |
||
1016 | add ebx,3Ch+12*10000h |
||
1017 | mov edi,message_mem |
||
1681 | mario79 | 1018 | ;-------------------------------------- |
1671 | mario79 | 1019 | @@: |
1020 | push edi |
||
1021 | xor eax,eax |
||
1022 | push 80 |
||
1023 | pop ecx |
||
1024 | repnz scasb |
||
1025 | sub ecx,79 |
||
1026 | neg ecx |
||
1027 | mov esi,ecx |
||
1028 | pop edi |
||
1681 | mario79 | 1029 | mcall 4,,[color_table+32],edi |
1671 | mario79 | 1030 | add ebx,10 |
1031 | add edi,80 |
||
1032 | cmp edi,message_cur_pos |
||
1033 | jb @b |
||
1681 | mario79 | 1034 | |
1671 | mario79 | 1035 | ret |
1036 | ;--------------------------------------------------------------------- |
||
1037 | draw_window: |
||
1038 | ; start redraw |
||
1681 | mario79 | 1039 | mcall 12,1 |
1671 | mario79 | 1040 | mov edi,[skinheight] |
1041 | ; define window |
||
1042 | xor eax,eax |
||
1681 | mario79 | 1043 | mov ecx,100 shl 16+286 |
1671 | mario79 | 1044 | add ecx,edi |
1045 | mov edx,[color_table+20] |
||
1046 | add edx,13000000h |
||
1047 | push edi |
||
1681 | mario79 | 1048 | xor esi,esi |
1049 | mcall ,<100,435>,,,,caption_str |
||
1671 | mario79 | 1050 | pop edi |
1051 | ; lines - horizontal |
||
1681 | mario79 | 1052 | mov ebx,8 shl 16+352 |
1671 | mario79 | 1053 | mov ecx,edi |
1054 | shl ecx,16 |
||
1055 | or ecx,edi |
||
1681 | mario79 | 1056 | add ecx,2 shl 16+2 |
1057 | mcall 38,,,[color_table+36] |
||
1058 | add ecx,12 shl 16+12 |
||
1059 | mcall |
||
1060 | add ecx,12 shl 16+12 |
||
1061 | mcall |
||
1062 | add ecx,12 shl 16+12 |
||
1063 | mcall |
||
1671 | mario79 | 1064 | ; lines - vertical |
1681 | mario79 | 1065 | sub ecx,36 shl 16 |
1066 | mcall ,<8,8> |
||
1067 | add ebx,52 shl 16+52 |
||
1068 | mcall |
||
1069 | add ebx,292 shl 16+292 |
||
1070 | mcall |
||
1671 | mario79 | 1071 | ; draw frame for messages data |
1072 | push ecx |
||
1681 | mario79 | 1073 | add ecx,52 shl 16+16 |
1074 | mcall ,<8,425> |
||
1075 | add ecx,224*(1 shl 16+1) |
||
1076 | mcall |
||
1077 | sub cx,224 |
||
1078 | mcall ,<8,8> |
||
1079 | mcall ,<426,426> |
||
1671 | mario79 | 1080 | pop ecx |
1081 | ; define compress button |
||
1681 | mario79 | 1082 | mov cx,18 |
1083 | mcall 8,<354,72>,,2,[color_table+36] |
||
1671 | mario79 | 1084 | ; uncompress button |
1681 | mario79 | 1085 | add ecx,18 shl 16 |
1671 | mario79 | 1086 | inc edx |
1681 | mario79 | 1087 | mcall |
1671 | mario79 | 1088 | add ecx,-12h+0Ah+140000h |
1089 | ; question button |
||
1090 | push esi |
||
1091 | mov dl,7 |
||
1681 | mario79 | 1092 | mcall ,<417,9> |
1671 | mario79 | 1093 | shr ecx,16 |
1094 | lea ebx,[ecx+1A40002h] |
||
1681 | mario79 | 1095 | mcall 4,,[color_table+28],aQuestion,1 |
1671 | mario79 | 1096 | mov al,8 |
1097 | pop esi |
||
1098 | ; define settings buttons |
||
1681 | mario79 | 1099 | mov ebx,9 shl 16+50 |
1671 | mario79 | 1100 | lea ecx,[edi+2] |
1101 | shl ecx,16 |
||
1681 | mario79 | 1102 | mov cx,11 |
1671 | mario79 | 1103 | push 4 |
1104 | pop edx |
||
1681 | mario79 | 1105 | ;-------------------------------------- |
1671 | mario79 | 1106 | @@: |
1681 | mario79 | 1107 | mcall |
1108 | add ecx,12 shl 16 |
||
1671 | mario79 | 1109 | inc edx |
1110 | cmp edx,6 |
||
1111 | jbe @b |
||
1112 | ; text on settings buttons |
||
1113 | lea ebx,[edi+5+0C0000h] |
||
1114 | mov al,4 |
||
1115 | mov ecx,[color_table+28] |
||
1116 | push buttons1names |
||
1117 | pop edx |
||
1118 | push 8 |
||
1119 | pop esi |
||
1681 | mario79 | 1120 | ;-------------------------------------- |
1671 | mario79 | 1121 | @@: |
1681 | mario79 | 1122 | mcall |
1671 | mario79 | 1123 | add edx,esi |
1681 | mario79 | 1124 | add ebx,12 |
1671 | mario79 | 1125 | cmp [edx-6],byte ' ' |
1126 | jnz @b |
||
1127 | ; text on compress and decompress buttons |
||
1128 | lea ebx,[edi+8+1720000h] |
||
1129 | or ecx,80000000h |
||
1681 | mario79 | 1130 | mcall ,,,aCompress |
1671 | mario79 | 1131 | lea ebx,[edi+1Ah+16A0000h] |
1681 | mario79 | 1132 | mcall ,,,aDecompress |
1671 | mario79 | 1133 | ; infile, outfile, path strings |
1134 | mov edx,inname |
||
1135 | lea ebx,[edi+400005h] |
||
1681 | mario79 | 1136 | ;-------------------------------------- |
1671 | mario79 | 1137 | editdraw: |
1681 | mario79 | 1138 | mcall 4,,[color_table+32],,[edx-4] |
1671 | mario79 | 1139 | cmp edx,[curedit] |
1140 | jnz cont |
||
1681 | mario79 | 1141 | |
1671 | mario79 | 1142 | mov al,1 |
1143 | push ebx |
||
1144 | push edx |
||
1145 | movzx ecx,bx |
||
1146 | shr ebx,16 |
||
1147 | lea edx,[esi*2] |
||
1148 | lea edx,[edx+edx*2] |
||
1149 | lea ebx,[ebx+edx+2] |
||
1150 | add ecx,4 |
||
1151 | xor edx,edx |
||
1681 | mario79 | 1152 | ;-------------------------------------- |
1671 | mario79 | 1153 | @@: |
1154 | cmp esi,48 |
||
1155 | jz @f |
||
1681 | mario79 | 1156 | |
1157 | mcall |
||
1671 | mario79 | 1158 | add ebx,6 |
1159 | inc esi |
||
1160 | jmp @b |
||
1161 | ;--------------------------------------------------------------------- |
||
1162 | @@: |
||
1163 | pop edx |
||
1164 | pop ebx |
||
1681 | mario79 | 1165 | ;-------------------------------------- |
1671 | mario79 | 1166 | cont: |
1167 | add edx,52 |
||
1168 | add ebx,0Ch |
||
1169 | cmp edx,path+52 |
||
1170 | jb editdraw |
||
1171 | ; draw messages |
||
1172 | call draw_messages |
||
1173 | ; end redraw |
||
1681 | mario79 | 1174 | mcall 12,2 |
1671 | mario79 | 1175 | ret |
1176 | ;--------------------------------------------------------------------- |
||
1177 | copy_name: |
||
1178 | lea edx,[edi+48] |
||
1681 | mario79 | 1179 | ;-------------------------------------- |
1671 | mario79 | 1180 | @@: |
1181 | lodsb |
||
1182 | cmp al,' ' |
||
1183 | jbe copy_name_done |
||
1681 | mario79 | 1184 | |
1671 | mario79 | 1185 | stosb |
1186 | cmp edi,edx |
||
1187 | jb @b |
||
1681 | mario79 | 1188 | ;-------------------------------------- |
1671 | mario79 | 1189 | @@: |
1190 | lodsb |
||
1191 | cmp al,' ' |
||
1192 | ja @b |
||
1681 | mario79 | 1193 | ;-------------------------------------- |
1671 | mario79 | 1194 | copy_name_done: |
1195 | dec esi |
||
1196 | sub edx,48 |
||
1197 | sub edi,edx |
||
1198 | mov [edx-4],edi |
||
1681 | mario79 | 1199 | ;-------------------------------------- |
1671 | mario79 | 1200 | skip_spaces: |
1201 | lodsb |
||
1202 | cmp al,0 |
||
1203 | jz @f |
||
1681 | mario79 | 1204 | |
1671 | mario79 | 1205 | cmp al,' ' |
1206 | jbe skip_spaces |
||
1681 | mario79 | 1207 | ;-------------------------------------- |
1671 | mario79 | 1208 | @@: |
1209 | dec esi |
||
1210 | ret |
||
1211 | ;--------------------------------------------------------------------- |
||
1212 | clear_edit_points: |
||
1213 | ; clear edit points (if is) |
||
1214 | mov esi,[curedit] |
||
1215 | test esi,esi |
||
1216 | jz cleared_edit_points |
||
1681 | mario79 | 1217 | |
1671 | mario79 | 1218 | push eax |
1219 | mov ebx,[esi-4] |
||
1220 | imul ebx,6 |
||
1221 | mov edi,ebx |
||
1222 | add ebx,40h |
||
1223 | shl ebx,16 |
||
1224 | add ebx,48*6 |
||
1225 | sub bx,di |
||
1226 | mov ecx,[curedit_y] |
||
1227 | shl ecx,16 |
||
1228 | or cx,9 |
||
1681 | mario79 | 1229 | mcall 13,,,[color_table+20] |
1671 | mario79 | 1230 | pop eax |
1681 | mario79 | 1231 | ;-------------------------------------- |
1671 | mario79 | 1232 | cleared_edit_points: |
1233 | ret |
||
1234 | ;--------------------------------------------------------------------- |
||
1235 | ;lzma_compress: |
||
1236 | include 'lzma_compress.inc' |
||
1237 | ;--------------------------------------------------------------------- |
||
1238 | ;lzma_set_dict_size: |
||
1239 | include 'lzma_set_dict_size.inc' |
||
1240 | ;--------------------------------------------------------------------- |
||
1241 | ;lzma_decompress: |
||
1242 | include 'lzma_decompress.inc' |
||
1243 | ;--------------------------------------------------------------------- |
||
1681 | mario79 | 1244 | ;initialized variables and constants |
1245 | include 'const_var.inc' |
||
1671 | mario79 | 1246 | ;--------------------------------------------------------------------- |
1247 | IM_END: |
||
1248 | ;--------------------------------------------------------------------- |
||
1681 | mario79 | 1249 | ;uninitialized data |
1250 | include 'data.inc' |
||
1671 | mario79 | 1251 | ;--------------------------------------------------------------------- |
1252 | I_END: |
||
1253 | ;---------------------------------------------------------------------417,9>354,72>426,426>8,8>8,425>8,8>100,435>9,417> |