Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 1685 → Rev 1686

/programs/other/kpack/trunk/upacproc.inc
0,0 → 1,199
;*********************************************************************
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 ecx,[insize]
test ecx,ecx
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
 
mcall 68,12
 
mov [infile],eax
 
mov ebx,fn70block
mov [ebx],byte 0
mov [ebx+16],eax
mov eax,[insize]
mov [ebx+12],eax
 
mcall 70
test eax,eax
jnz infileerr
 
mov eax,[infile]
cmp [eax],dword 'KPCK'
jz @f
;--------------------------------------
unpack_err:
call return_memory
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 ecx,[eax+4]
add ecx,[insize]
 
mcall 68,20,,[infile]
 
mov [infile],eax
add eax,[insize]
mov [outfile],eax
mov [outfilebest],eax
 
 
mov esi,[infile]
mov eax,[esi+8]
push eax
and al,0C0h
cmp al,0C0h
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
;*********************************************************************
return_memory:
mov ecx,[infile]
test ecx,ecx
jz @f
mcall 68,13,
xor eax,eax
mov [infile],eax
@@:
ret
;*********************************************************************