16,14 → 16,20 |
dd 1 |
dd START |
dd IM_END |
memf dd I_END |
dd I_END ;memf |
dd stacktop |
dd params |
dd 0 ;cur_dir_path |
dd cur_dir_path |
;--------------------------------------------------------------------- |
include '..\..\..\macros.inc' |
include '../../../develop/libraries/box_lib/trunk/box_lib.mac' |
include '../../../develop/libraries/box_lib/load_lib.mac' |
@use_library |
|
START: |
mcall 68,11 |
mcall 40,100111b |
|
call clear_messages |
; set default path = /RD/1/ |
mov esi,defpath |
36,6 → 42,7 |
inc ebx |
mcall |
mov [skinheight],eax |
jmp default |
; check command line |
mov esi,params |
mov [esi+100h],byte 0 |
58,7 → 65,7 |
doit: |
call draw_window |
call pack |
jmp waitevent |
jmp still |
;--------------------------------------------------------------------- |
clear_messages: |
xor eax,eax |
73,7 → 80,7 |
mcall |
;-------------------------------------- |
outeqin: |
mov ecx,48/4+1 |
mov ecx,256/4+1 |
mov esi,inname-4 |
mov edi,outname-4 |
rep movsd |
80,10 → 87,11 |
jmp doit |
;--------------------------------------------------------------------- |
default: |
mov [curedit],inname |
mov ecx,[skinheight] |
add ecx,5 |
mov [curedit_y],ecx |
|
load_libraries l_libs_start,load_lib_end |
cmp eax,-1 |
je exit |
|
mov esi,definoutname |
mov edi,esi |
xor ecx,ecx |
103,19 → 111,42 |
mov edi,outname |
rep movsb |
;--------------------------------------------------------------------- |
dodraw: |
; mov edi,fname_buf |
; mov esi,path4 |
; call copy_1 |
|
;OpenDialog initialisation |
push dword OpenDialog_data |
call [OpenDialog_Init] |
;--------------------------------------------------------------------- |
call set_editbox_position_all |
;--------------------------------------------------------------------- |
red: |
call draw_window |
;-------------------------------------- |
waitevent: |
still: |
mcall 10 |
dec eax |
jz dodraw |
jz red |
|
dec eax |
jz keypressed |
jz key |
|
dec eax |
jnz waitevent |
jz button |
|
push dword edit1 |
call [edit_box_mouse] |
|
push dword edit2 |
call [edit_box_mouse] |
|
push dword edit3 |
call [edit_box_mouse] |
|
jmp still |
;********************************************************************* |
button: |
; button pressed |
mcall 17 |
xchg al,ah |
129,7 → 160,7 |
jnz nopack |
|
call pack |
jmp waitevent |
jmp still |
;--------------------------------------------------------------------- |
nopack: |
dec eax |
136,7 → 167,7 |
jnz nounpack |
|
call unpack |
jmp waitevent |
jmp still |
;--------------------------------------------------------------------- |
but7: |
call clear_messages |
149,799 → 180,92 |
mov esi,usage_str |
mov ecx,usage_len |
call write_string |
jmp waitevent |
jmp still |
;--------------------------------------------------------------------- |
nounpack: |
; this is infile/outfile/path button |
call clear_edit_points |
mov esi,inname |
mov ecx,[skinheight] |
add ecx,5 |
dec eax |
jz edit |
jnz still |
|
mov esi,outname |
add ecx,0Ch |
dec eax |
jz edit |
call OpenDialog_start |
jmp still |
;********************************************************************* |
OpenDialog_start: |
push dword OpenDialog_data |
call [OpenDialog_Start] |
cmp [OpenDialog_data.status],1 |
jne @f |
|
mov esi,path |
add ecx,0Ch |
;-------------------------------------- |
edit: |
cmp esi,[curedit] |
mov [curedit],0 |
jz waitevent |
mov esi,filename_area |
mov edi,inname |
call copy_1 |
sub edi,inname |
mov [innamelen],edi |
|
mov [curedit],esi |
mov [curedit_y],ecx |
mov al,1 |
mov ebx,[esi-4] |
mov edi,ebx |
imul ebx,6 |
add ebx,42h |
add ecx,4 |
xor edx,edx |
;-------------------------------------- |
@@: |
cmp edi,48 |
jz waitevent |
mov esi,filename_area |
mov edi,outname |
call copy_1 |
sub edi,outname |
mov [outnamelen],edi |
|
mcall |
add ebx,6 |
inc edi |
jmp @b |
;--------------------------------------------------------------------- |
keypressed: |
mcall 2 |
xchg al,ah |
mov edi,[curedit] |
test edi,edi |
jz waitevent |
mov esi,temp_dir_pach |
mov edi,path |
call copy_1 |
sub edi,path |
dec edi |
mov [pathlen],edi |
|
mov ebx,[edi-4] |
cmp al,8 |
jz backspace |
call set_editbox_position_all |
|
cmp al,13 |
jz onenter |
|
cmp al,20h |
jb waitevent |
|
cmp ebx,48 |
jz waitevent |
|
mov [edi+ebx],al |
inc ebx |
mov [edi-4],ebx |
; clear point and draw symbol |
lea edi,[edi+ebx-1] |
imul ebx,6 |
add ebx,40h-6 |
shl ebx,16 |
mov bl,6 |
mov ecx,[curedit_y] |
push ecx |
shl ecx,16 |
mov cl,9 |
mcall 13,,,[color_table+20] |
pop ecx |
mov bx,cx |
mcall 4,,[color_table+32],edi,1 |
jmp waitevent |
;--------------------------------------------------------------------- |
backspace: |
test ebx,ebx |
jz waitevent |
|
dec ebx |
mov [edi-4],ebx |
; clear symbol and set point |
imul ebx,6 |
add ebx,40h |
shl ebx,16 |
mov bl,6 |
mov ecx,[curedit_y] |
push ecx |
shl ecx,16 |
mov cl,9 |
mcall 13,,,[color_table+20] |
xor edx,edx |
shr ebx,16 |
inc ebx |
inc ebx |
pop ecx |
add ecx,4 |
mcall 1 |
jmp waitevent |
;--------------------------------------------------------------------- |
onenter: |
cmp [curedit],inname |
jnz @f |
|
push 2 |
pop eax |
jmp nounpack |
;--------------------------------------------------------------------- |
call draw_editbox |
@@: |
cmp [curedit],outname |
jnz @f |
|
call pack |
jmp waitevent |
;--------------------------------------------------------------------- |
@@: |
call clear_edit_points |
jmp waitevent |
;--------------------------------------------------------------------- |
pack: |
call clear_edit_points |
and [curedit],0 |
; clear messages |
call clear_messages |
; display logo |
mov esi,info_str |
push info_len |
pop ecx |
call write_string |
; load input file |
mov esi,inname |
call get_full_name |
mov ebx,fn70block |
mov [ebx],dword 5 |
and [ebx+4],dword 0 |
and [ebx+8],dword 0 |
and [ebx+12],dword 0 |
mov [ebx+16],dword file_attr |
mcall 70 |
test eax,eax |
jz inopened |
;--------------------------------------------------------------------- |
infileerr: |
mov esi,errload_str |
push errload_len |
pop ecx |
jmp write_string |
;--------------------------------------------------------------------- |
inopened: |
mov ebx,[insize] |
test ebx,ebx |
jz infileerr |
; maximum memory requests: 2*insize + 2*(maxoutsize+400h) + worksize |
mov esi,[memf] |
mov [infile],esi |
add esi,ebx |
mov [inbuftmp],esi |
add esi,ebx |
mov [outfile],esi |
mov [outfile1],esi |
mov [outfilebest],esi |
mov ecx,ebx |
shr ecx,3 |
add ecx,ebx |
add ecx,400h |
add esi,ecx |
mov [outfile2],esi |
add esi,ecx |
mov [workmem],esi |
add ecx,ebx |
add ecx,ecx |
add ecx,[memf] |
; LZMA requires 0x448000 + dictsize*9.5 bytes for workmem, |
and [lzma_dictsize],0 |
push ecx |
mov eax,ebx |
dec eax |
bsr ecx,eax |
inc ecx |
cmp ecx,28 |
jb @f |
|
mov cl,28 |
;-------------------------------------- |
@@: |
mov edx,ecx |
ret |
;********************************************************************* |
copy_1: |
xor eax,eax |
inc eax |
shl eax,cl |
imul eax,19 |
shr eax,1 |
add eax,448000h |
pop ecx |
add ecx,eax |
mcall 64,1 |
test eax,eax |
jz mem_ok |
;-------------------------------------- |
; try to use smaller dictionary |
meml0: |
cmp edx,4 |
jbe memf1 |
|
dec edx |
xor eax,eax |
inc eax |
mov ecx,edx |
shl eax,cl |
imul eax,19 |
shr eax,1 |
add eax,509000h |
pop ecx |
push ecx |
add ecx,eax |
mcall 64 |
test eax,eax |
jnz meml0 |
;-------------------------------------- |
; ok, say warning and continue |
mov [lzma_dictsize],edx |
mov esi,lzma_memsmall_str |
push lzma_memsmall_len |
pop ecx |
call write_string |
jmp mem_ok |
;--------------------------------------------------------------------- |
memf1: |
mov esi,nomem_str |
push nomem_len |
pop ecx |
jmp write_string |
;--------------------------------------------------------------------- |
mem_ok: |
mov eax,[insize] |
mov ebx,fn70block |
mov [ebx],byte 0 |
mov [ebx+12],eax |
mov esi,[infile] |
mov [ebx+16],esi |
mcall 70 |
test eax,eax |
jnz infileerr |
|
mov eax,[outfile] |
mov [eax],dword 'KPCK' ;'KCPK' |
mov ecx,[insize] |
mov [eax+4],dword ecx |
mov edi,eax |
; set LZMA dictionary size |
mov eax,[lzma_dictsize] |
test eax,eax |
js no_lzma_setds |
jnz lzma_setds |
|
mov ecx,[insize] |
dec ecx |
bsr eax,ecx |
inc eax |
cmp eax,28 |
jb lzma_setds |
|
mov eax,28 |
;-------------------------------------- |
lzma_setds: |
push eax |
call lzma_set_dict_size |
;-------------------------------------- |
no_lzma_setds: |
push compressing_len |
pop ecx |
mov esi,compressing_str |
call write_string |
mov esi,[outfile1] |
mov edi,[outfile2] |
movsd |
movsd |
movsd |
call pack_lzma |
mov [outsize],eax |
mov eax,[outfile] |
mov [outfilebest],eax |
mov [method],use_lzma |
;-------------------------------------- |
cld |
@@: |
call preprocess_calltrick |
lodsb |
stosb |
test eax,eax |
jz noct1 |
|
call set_outfile |
call pack_lzma |
add eax,5 |
cmp eax,[outsize] |
jae @f |
|
mov [outsize],eax |
mov eax,[outfile] |
mov [outfilebest],eax |
mov [method],use_lzma or use_calltrick1 |
;-------------------------------------- |
@@: |
noct1: |
call set_outfile |
push [ctn] |
mov al,[cti] |
push eax |
call preprocess_calltrick2 |
test eax,eax |
jz noct2 |
|
call set_outfile |
call pack_lzma |
add eax,5 |
cmp eax,[outsize] |
jae @f |
|
mov [outsize],eax |
mov eax,[outfile] |
mov [outfilebest],eax |
mov [method],use_lzma or use_calltrick2 |
pop ecx |
pop ecx |
push [ctn] |
mov al,[cti] |
push eax |
;-------------------------------------- |
@@: |
noct2: |
pop eax |
mov [cti],al |
pop [ctn] |
add [outsize],12 |
mov eax,[outsize] |
cmp eax,[insize] |
jb packed_ok |
|
mov esi,too_big_str |
push too_big_len |
pop ecx |
jmp write_string |
;--------------------------------------------------------------------- |
packed_ok: |
; set header |
movzx eax,[method] |
mov edi,[outfilebest] |
mov [edi+8],eax |
test al,use_calltrick1 or use_calltrick2 |
jz @f |
|
mov ecx,[outsize] |
add ecx,edi |
mov eax,[ctn] |
mov [ecx-5],eax |
mov al,[cti] |
mov [ecx-1],al |
;-------------------------------------- |
@@: |
mov eax,[outsize] |
mov ecx,100 |
mul ecx |
div [insize] |
aam |
xchg al,ah |
add ax,'00' |
mov [ratio],ax |
mov esi,done_str |
push done_len |
pop ecx |
call write_string |
;-------------------------------------- |
; save output file |
saveout: |
mov esi,outname |
call get_full_name |
mov ebx,fn70block |
mov [ebx],byte 2 |
mov eax,[outfilebest] |
mov ecx,[outsize] |
mov [ebx+12],ecx |
mov [ebx+16],eax |
mcall 70 |
test eax,eax |
jz @f |
;-------------------------------------- |
outerr: |
mov esi,outfileerr_str |
push outfileerr_len |
pop ecx |
jmp write_string |
;--------------------------------------------------------------------- |
@@: |
xor eax,eax |
mov ebx,fn70block |
mov [ebx],byte 6 |
mov [ebx+4],eax |
mov [ebx+8],eax |
mov [ebx+12],eax |
mov [ebx+16],dword file_attr |
mcall 70 |
jnz @r |
ret |
;--------------------------------------------------------------------- |
set_outfile: |
mov eax,[outfilebest] |
xor eax,[outfile1] |
xor eax,[outfile2] |
mov [outfile],eax |
ret |
;--------------------------------------------------------------------- |
pack_calltrick_fail: |
xor eax,eax |
mov [ctn],0 |
ret |
;--------------------------------------------------------------------- |
preprocess_calltrick: |
; input preprocessing |
xor eax,eax |
mov edi,ct1 |
mov ecx,256/4 |
push edi |
rep stosd |
pop edi |
mov ecx,[insize] |
mov esi,[infile] |
xchg eax,edx |
mov ebx,[inbuftmp] |
;-------------------------------------- |
input_pre: |
lodsb |
sub al,0E8h |
cmp al,1 |
ja input_pre_cont |
;********************************************************************* |
set_editbox_position_all: |
mov ebx,inname |
mov edi,edit1 |
call set_editbox_position |
|
cmp ecx,5 |
jb input_pre_done |
mov ebx,outname |
mov edi,edit2 |
call set_editbox_position |
|
lodsd |
add eax,esi |
sub eax,[infile] |
cmp eax,[insize] |
jae xxx |
|
cmp eax,1000000h |
jae xxx |
|
sub ecx,4 |
; bswap is not supported on i386 |
xchg al,ah |
ror eax,16 |
xchg al,ah |
mov [esi-4],eax |
inc edx |
mov [ebx],esi |
add ebx,4 |
jmp input_pre_cont |
;--------------------------------------------------------------------- |
xxx: |
sub esi,4 |
movzx eax,byte [esi] |
mov [eax+edi],byte 1 |
;-------------------------------------- |
input_pre_cont: |
loop input_pre |
;-------------------------------------- |
input_pre_done: |
mov [ctn],edx |
xor eax,eax |
mov ecx,256 |
repnz scasb |
jnz pack_calltrick_fail |
|
not cl |
mov [cti],cl |
@@: |
cmp ebx,[inbuftmp] |
jz @f |
|
sub ebx,4 |
mov eax,[ebx] |
mov [eax-4],cl |
jmp @b |
;--------------------------------------------------------------------- |
@@: |
mov al,1 |
mov ebx,path |
mov edi,edit3 |
call set_editbox_position |
ret |
;--------------------------------------------------------------------- |
pack_lzma: |
mov eax,[outfile] |
add eax,11 |
push [workmem] ;workmem |
push [insize] ;length |
push eax ;destination |
push [infile] ;source |
call lzma_compress |
mov ecx,[outfile] |
mov edx,[ecx+12] |
xchg dl,dh |
ror edx,16 |
xchg dl,dh |
mov [ecx+12],edx |
dec eax |
ret |
;--------------------------------------------------------------------- |
preprocess_calltrick2: |
; restore input |
mov esi,[infile] |
mov ecx,[ctn] |
jecxz pc2l2 |
;-------------------------------------- |
pc2l1: |
lodsb |
sub al,0E8h |
cmp al,1 |
ja pc2l1 |
;********************************************************************* |
key: |
mcall 2 |
|
mov al,[cti] |
cmp [esi],al |
jnz pc2l1 |
push dword edit1 |
call [edit_box_key] |
|
lodsd |
shr ax,8 |
ror eax,16 |
xchg al,ah |
sub eax,esi |
add eax,[infile] |
mov [esi-4],eax |
loop pc2l1 |
;-------------------------------------- |
pc2l2: |
; input preprocessing |
mov edi,ct1 |
xor eax,eax |
push edi |
mov ecx,256/4 |
rep stosd |
pop edi |
mov ecx,[insize] |
mov esi,[infile] |
mov ebx,[inbuftmp] |
xchg eax,edx |
;-------------------------------------- |
input_pre2: |
lodsb |
;-------------------------------------- |
@@: |
cmp al,0Fh |
jnz ip1 |
push dword edit2 |
call [edit_box_key] |
|
dec ecx |
jz input_pre_done2 |
push dword edit3 |
call [edit_box_key] |
|
lodsb |
cmp al,80h |
jb @b |
jmp still |
;********************************************************************* |
onenter: |
; cmp [curedit],inname |
; jnz @f |
|
cmp al,90h |
jb @f |
;-------------------------------------- |
ip1: |
sub al,0E8h |
cmp al,1 |
ja input_pre_cont2 |
;-------------------------------------- |
@@: |
cmp ecx,5 |
jb input_pre_done2 |
|
lodsd |
add eax,esi |
sub eax,[infile] |
cmp eax,[insize] |
jae xxx2 |
|
cmp eax,1000000h |
jae xxx2 |
|
sub ecx,4 |
xchg al,ah |
rol eax,16 |
xchg al,ah |
mov [esi-4],eax |
inc edx |
mov [ebx],esi |
add ebx,4 |
jmp input_pre_cont2 |
;--------------------------------------------------------------------- |
xxx2: sub esi,4 |
movzx eax,byte [esi] |
mov [eax+edi],byte 1 |
;-------------------------------------- |
input_pre_cont2: |
loop input_pre2 |
;-------------------------------------- |
input_pre_done2: |
mov [ctn],edx |
xor eax,eax |
mov ecx,256 |
repnz scasb |
jnz pack_calltrick_fail |
|
not cl |
mov [cti],cl |
;-------------------------------------- |
@@: |
cmp ebx,[inbuftmp] |
jz @f |
|
sub ebx,4 |
mov eax,[ebx] |
mov [eax-4],cl |
jmp @b |
;--------------------------------------------------------------------- |
@@: |
mov al,1 |
ret |
;--------------------------------------------------------------------- |
unpack: |
call clear_edit_points |
and [curedit],0 |
; clear messages |
call clear_messages |
; display logo |
mov esi,info_str |
push info_len |
pop ecx |
call write_string |
; load input file |
mov esi,inname |
call get_full_name |
mov ebx,fn70block |
mov [ebx],dword 5 |
and [ebx+4],dword 0 |
and [ebx+8],dword 0 |
and [ebx+12],dword 0 |
mov [ebx+16],dword file_attr |
mcall 70 |
test eax,eax |
jnz infileerr |
|
mov eax,[insize] |
test eax,eax |
jz infileerr |
|
mov ecx,[memf] |
mov [infile],ecx |
add ecx,eax |
mov [outfile],ecx |
mov [outfilebest],ecx |
mcall 64,1 |
test eax,eax |
jnz memf1 |
|
mov ebx,fn70block |
mov [ebx],byte 0 |
mov eax,[insize] |
mov [ebx+12],eax |
mov esi,[infile] |
mov [ebx+16],esi |
mcall 70 |
test eax,eax |
jnz infileerr |
|
mov eax,[infile] |
cmp [eax],dword 'KPCK' |
jz @f |
;-------------------------------------- |
unpack_err: |
mov esi,notpacked_str |
push notpacked_len |
pop ecx |
jmp write_string |
;--------------------------------------------------------------------- |
@@: |
mov ecx,[outfile] |
add ecx,dword [eax+4] |
mcall 64,1 |
test eax,eax |
jnz memf1 |
|
mov esi,[infile] |
mov eax,[esi+8] |
push eax |
and al,0C0h |
cmp al,0C0h |
push 2 |
pop eax |
jz unpack_err |
|
and al,not 0C0h |
dec eax |
jnz unpack_err |
|
mov eax,[esi+4] |
mov [outsize],eax |
push eax |
push [outfile] |
add esi,11 |
push esi |
mov eax,[esi+1] |
xchg al,ah |
ror eax,16 |
xchg al,ah |
mov [esi+1],eax |
call lzma_decompress |
mov esi,[infile] |
test [esi+8],byte 80h |
jnz uctr1 |
|
test [esi+8],byte 40h |
jz udone |
|
add esi,[insize] |
sub esi,5 |
lodsd |
mov ecx,eax |
jecxz udone |
|
mov dl,[esi] |
mov esi,[outfile] |
;-------------------------------------- |
uc1: |
lodsb |
sub al,0E8h |
cmp al,1 |
ja uc1 |
|
cmp [esi],dl |
jnz uc1 |
|
lodsd |
shr ax,8 |
ror eax,16 |
xchg al,ah |
sub eax,esi |
add eax,[outfile] |
mov [esi-4],eax |
loop uc1 |
jmp udone |
;--------------------------------------------------------------------- |
uctr1: |
add esi,[insize] |
sub esi,5 |
lodsd |
mov ecx,eax |
jecxz udone |
|
mov dl,[esi] |
mov esi,[outfile] |
;-------------------------------------- |
uc2: |
lodsb |
;-------------------------------------- |
@@: |
cmp al,15 |
jnz uf |
|
lodsb |
cmp al,80h |
jb @b |
|
cmp al,90h |
jb @f |
;-------------------------------------- |
uf: |
sub al,0E8h |
cmp al,1 |
ja uc2 |
;-------------------------------------- |
@@: |
cmp [esi],dl |
jnz uc2 |
|
lodsd |
shr ax,8 |
ror eax,16 |
xchg al,ah |
sub eax,esi |
add eax,[outfile] |
mov [esi-4],eax |
loop uc2 |
;-------------------------------------- |
udone: |
mov esi,unpacked_ok |
push unpacked_len |
pop ecx |
call write_string |
jmp saveout |
|
;--------------------------------------------------------------------- |
jmp nounpack |
;********************************************************************* |
get_full_name: |
push esi |
mov esi,path |
967,10 → 291,7 |
xor eax,eax |
stosb |
ret |
;--------------------------------------------------------------------- |
wsret: |
ret |
;--------------------------------------------------------------------- |
;********************************************************************* |
write_string: |
; in: esi=pointer, ecx=length |
mov edx,[message_cur_pos] |
1033,11 → 354,12 |
jb @b |
|
ret |
;--------------------------------------------------------------------- |
;********************************************************************* |
draw_window: |
; start redraw |
mcall 12,1 |
mov edi,[skinheight] |
;-------------------------------------- |
; define window |
xor eax,eax |
mov ecx,100 shl 16+286 |
1044,34 → 366,89 |
add ecx,edi |
mov edx,[color_table+20] |
add edx,13000000h |
push edi |
; push edi |
xor esi,esi |
mcall ,<100,435>,,,,caption_str |
pop edi |
mcall ,<100,435>,,,,fullname ;temp_dir_pach ;caption_str |
; pop edi |
mcall 9,procinfo,-1 |
;-------------------------------------- |
; draw lines and frame |
call draw_lines |
; draw buttons |
call draw_bittons |
; infile, outfile, path strings |
; call draw_strings |
; draw messages |
call draw_messages |
; draw editbox's |
mov eax,[procinfo+42] |
sub eax,65+72+10 |
mov [edit1.width],eax ; óñòàíàâëèâàåì øèðèíó òåêñòîâûõ ïîëåé |
mov [edit2.width],eax |
mov [edit3.width],eax |
|
call draw_editbox |
; end redraw |
mcall 12,2 |
ret |
;********************************************************************* |
draw_editbox: |
push dword edit1 |
call [edit_box_draw] |
push dword edit2 |
call [edit_box_draw] |
push dword edit3 |
call [edit_box_draw] |
ret |
;********************************************************************* |
set_editbox_position: |
mov esi,ebx |
cld |
@@: |
lodsb |
test al,al |
jne @r |
sub esi,ebx |
mov eax,esi |
dec eax |
mov [edi+48], eax ;ed_size |
mov [edi+52], eax ;ed_pos |
ret |
;********************************************************************* |
draw_lines: |
; mov edi,[skinheight] |
; lines - horizontal |
mov ebx,8 shl 16+352 |
; mov ebx,8 shl 16+352 |
; mov ecx,edi |
; shl ecx,16 |
; or ecx,edi |
; add ecx,2 shl 16+2 |
; mcall 38,,,[color_table+36] |
; mov esi,3 |
;@@: |
; add ecx,12 shl 16+12 |
; mcall |
; dec esi |
; jnz @r |
;-------------------------------------- |
; lines - vertical |
; sub ecx,36 shl 16 |
; mcall ,<8,8> |
; add ebx,52 shl 16+52 |
; mcall |
; add ebx,292 shl 16+292 |
; mcall |
;-------------------------------------- |
mov edi,[skinheight] |
mov ecx,edi |
shl ecx,16 |
or ecx,edi |
add ecx,2 shl 16+2 |
mcall 38,,,[color_table+36] |
add ecx,12 shl 16+12 |
mcall |
add ecx,12 shl 16+12 |
mcall |
add ecx,12 shl 16+12 |
mcall |
; lines - vertical |
sub ecx,36 shl 16 |
mcall ,<8,8> |
add ebx,52 shl 16+52 |
mcall |
add ebx,292 shl 16+292 |
mcall |
add ecx,2 shl 16+2+12*3 |
; add ecx,12*3 |
; draw frame for messages data |
push ecx |
add ecx,52 shl 16+16 |
mcall ,<8,425> |
mcall 38,<8,425>,,[color_table+36] |
add ecx,224*(1 shl 16+1) |
mcall |
sub cx,224 |
1078,6 → 455,9 |
mcall ,<8,8> |
mcall ,<426,426> |
pop ecx |
ret |
;********************************************************************* |
draw_bittons: |
; define compress button |
mov cx,18 |
mcall 8,<354,72>,,2,[color_table+36] |
1093,22 → 473,24 |
shr ecx,16 |
lea ebx,[ecx+1A40002h] |
mcall 4,,[color_table+28],aQuestion,1 |
mov al,8 |
; mov al,8 |
pop esi |
; define settings buttons |
mov ebx,9 shl 16+50 |
; mov ebx,9 shl 16+50 |
lea ecx,[edi+2] |
add ecx,16*2 |
shl ecx,16 |
mov cx,11 |
push 4 |
pop edx |
mov cx,13 |
; push 4 |
; pop edx |
;-------------------------------------- |
@@: |
mcall |
add ecx,12 shl 16 |
inc edx |
cmp edx,6 |
jbe @b |
;@@: |
; mcall |
; add ecx,12 shl 16 |
; inc edx |
; cmp edx,6 |
; jbe @b |
mcall 8,<9,50>,,4 |
; text on settings buttons |
lea ebx,[edi+5+0C0000h] |
mov al,4 |
1121,7 → 503,7 |
@@: |
mcall |
add edx,esi |
add ebx,12 |
add ebx,16 |
cmp [edx-6],byte ' ' |
jnz @b |
; text on compress and decompress buttons |
1130,52 → 512,10 |
mcall ,,,aCompress |
lea ebx,[edi+1Ah+16A0000h] |
mcall ,,,aDecompress |
; infile, outfile, path strings |
mov edx,inname |
lea ebx,[edi+400005h] |
;-------------------------------------- |
editdraw: |
mcall 4,,[color_table+32],,[edx-4] |
cmp edx,[curedit] |
jnz cont |
|
mov al,1 |
push ebx |
push edx |
movzx ecx,bx |
shr ebx,16 |
lea edx,[esi*2] |
lea edx,[edx+edx*2] |
lea ebx,[ebx+edx+2] |
add ecx,4 |
xor edx,edx |
;-------------------------------------- |
@@: |
cmp esi,48 |
jz @f |
|
mcall |
add ebx,6 |
inc esi |
jmp @b |
;--------------------------------------------------------------------- |
@@: |
pop edx |
pop ebx |
;-------------------------------------- |
cont: |
add edx,52 |
add ebx,0Ch |
cmp edx,path+52 |
jb editdraw |
; draw messages |
call draw_messages |
; end redraw |
mcall 12,2 |
ret |
;--------------------------------------------------------------------- |
;********************************************************************* |
copy_name: |
lea edx,[edi+48] |
lea edx,[edi+256] |
;-------------------------------------- |
@@: |
lodsb |
1193,7 → 533,7 |
;-------------------------------------- |
copy_name_done: |
dec esi |
sub edx,48 |
sub edx,256 |
sub edi,edx |
mov [edx-4],edi |
;-------------------------------------- |
1208,29 → 548,12 |
@@: |
dec esi |
ret |
;********************************************************************* |
;Pack procedures |
include 'packpoc.inc' |
;--------------------------------------------------------------------- |
clear_edit_points: |
; clear edit points (if is) |
mov esi,[curedit] |
test esi,esi |
jz cleared_edit_points |
|
push eax |
mov ebx,[esi-4] |
imul ebx,6 |
mov edi,ebx |
add ebx,40h |
shl ebx,16 |
add ebx,48*6 |
sub bx,di |
mov ecx,[curedit_y] |
shl ecx,16 |
or cx,9 |
mcall 13,,,[color_table+20] |
pop eax |
;-------------------------------------- |
cleared_edit_points: |
ret |
;UnPack procedures |
include 'upacproc.inc' |
;--------------------------------------------------------------------- |
;lzma_compress: |
include 'lzma_compress.inc' |