forked from KolibriOS/kolibrios
The program Unz has been added. Unpacker files zip and 7z, based on arhiver.obj .
git-svn-id: svn://kolibrios.org@7113 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
0895e300ed
commit
ed8c023f5a
191
programs/fs/unz/DEBUG.INC
Normal file
191
programs/fs/unz/DEBUG.INC
Normal file
@ -0,0 +1,191 @@
|
||||
dps fix debug_print
|
||||
dpd fix debug_print_dec
|
||||
dpds fix debug_print_dec_sign
|
||||
dnl fix debug_newline
|
||||
dpsP fix debug_printP
|
||||
|
||||
;if ~(newline eq)
|
||||
newline fix debug_newline
|
||||
;end if
|
||||
|
||||
|
||||
macro debug_print str
|
||||
{
|
||||
local ..string, ..label
|
||||
|
||||
jmp ..label
|
||||
..string db str,0
|
||||
..label:
|
||||
|
||||
pushf
|
||||
pushad
|
||||
mov edx,..string
|
||||
call debug_outstr
|
||||
popad
|
||||
popf
|
||||
}
|
||||
|
||||
|
||||
|
||||
macro debug_print_dec arg
|
||||
{
|
||||
pushf
|
||||
pushad
|
||||
if ~arg eq eax
|
||||
mov eax,arg
|
||||
end if
|
||||
call debug_outdec
|
||||
popad
|
||||
popf
|
||||
}
|
||||
|
||||
macro debug_print_dec_sign arg
|
||||
{
|
||||
local .sign,.rtrn
|
||||
pushf
|
||||
pushad
|
||||
if ~arg eq eax
|
||||
mov eax,arg
|
||||
end if
|
||||
test eax,80000000h
|
||||
jnz .sign
|
||||
call debug_outdec
|
||||
popad
|
||||
popf
|
||||
jmp .rtrn
|
||||
.sign:
|
||||
not eax
|
||||
inc eax
|
||||
push eax
|
||||
mov cl,'-'
|
||||
mov eax,63
|
||||
mov ebx,1
|
||||
int 0x40
|
||||
pop eax
|
||||
call debug_outdec
|
||||
popad
|
||||
popf
|
||||
.rtrn:
|
||||
}
|
||||
|
||||
;---------------------------------
|
||||
debug_outdec: ;(eax - num, edi-str)
|
||||
push 10 ;2
|
||||
pop ecx ;1
|
||||
push -'0' ;2
|
||||
.l0:
|
||||
xor edx,edx ;2
|
||||
div ecx ;2
|
||||
push edx ;1
|
||||
test eax,eax ;2
|
||||
jnz .l0 ;2
|
||||
.l1:
|
||||
pop eax ;1
|
||||
add al,'0' ;2
|
||||
call debug_outchar ; stosb
|
||||
jnz .l1 ;2
|
||||
ret ;1
|
||||
;---------------------------------
|
||||
|
||||
debug_outchar: ; al - char
|
||||
pushf
|
||||
pushad
|
||||
mov cl,al
|
||||
mov eax,63
|
||||
mov ebx,1
|
||||
int 0x40
|
||||
popad
|
||||
popf
|
||||
ret
|
||||
|
||||
debug_outstr:
|
||||
mov eax,63
|
||||
mov ebx,1
|
||||
@@:
|
||||
mov cl,[edx]
|
||||
test cl,cl
|
||||
jz @f
|
||||
int 40h
|
||||
inc edx
|
||||
jmp @b
|
||||
@@:
|
||||
ret
|
||||
|
||||
_debug_crlf db 13, 10, 0
|
||||
|
||||
macro debug_newline
|
||||
{
|
||||
pushf
|
||||
pushad
|
||||
mov edx, _debug_crlf
|
||||
call debug_outstr
|
||||
popad
|
||||
popf
|
||||
}
|
||||
|
||||
macro debug_printP Pstr
|
||||
{
|
||||
pushf
|
||||
pushad
|
||||
mov edx,Pstr
|
||||
call debug_outstr
|
||||
popad
|
||||
popf
|
||||
|
||||
}
|
||||
|
||||
|
||||
macro print message
|
||||
{
|
||||
dps message
|
||||
dnl
|
||||
}
|
||||
|
||||
macro pregs
|
||||
{
|
||||
dps "EAX: "
|
||||
dpd eax
|
||||
dps " EBX: "
|
||||
dpd ebx
|
||||
newline
|
||||
dps "ECX: "
|
||||
dpd ecx
|
||||
dps " EDX: "
|
||||
dpd edx
|
||||
newline
|
||||
}
|
||||
|
||||
macro debug_print_hex arg
|
||||
{
|
||||
pushf
|
||||
pushad
|
||||
if ~arg eq eax
|
||||
mov eax, arg
|
||||
end if
|
||||
call debug_outhex
|
||||
popad
|
||||
popf
|
||||
}
|
||||
dph fix debug_print_hex
|
||||
|
||||
debug_outhex:
|
||||
; eax - number
|
||||
mov edx, 8
|
||||
.new_char:
|
||||
rol eax, 4
|
||||
movzx ecx, al
|
||||
and cl, 0x0f
|
||||
mov cl, [__hexdigits + ecx]
|
||||
pushad
|
||||
mcall 63, 1
|
||||
popad
|
||||
dec edx
|
||||
jnz .new_char
|
||||
ret
|
||||
|
||||
__hexdigits:
|
||||
db '0123456789ABCDEF'
|
||||
|
||||
|
||||
|
||||
;-------------------------------------------------------------------------------
|
748
programs/fs/unz/FS.INC
Normal file
748
programs/fs/unz/FS.INC
Normal file
@ -0,0 +1,748 @@
|
||||
|
||||
virtual at 0
|
||||
_FILE:
|
||||
.pos dq ?
|
||||
.bufpos dq ?
|
||||
.bufsize dd ?
|
||||
.mode dd ?
|
||||
.hPlugin dd ?
|
||||
.hFile dd ?
|
||||
.fileinfo:
|
||||
.fimode dd ?
|
||||
.fioffset dq ?
|
||||
.fisize dd ?
|
||||
.fibuf dd ?
|
||||
.finame rb 1024
|
||||
.attr rb 40
|
||||
align 512
|
||||
.buf rb 2048
|
||||
.size = $
|
||||
end virtual
|
||||
|
||||
O_READ = 1 ; allows read from file
|
||||
O_WRITE = 2 ; allows write to file
|
||||
O_CREATE = 4 ; if file does not exist and this flag is set, create file;
|
||||
; if file does not exist and this flag is not set, fail
|
||||
O_TRUNCATE = 8 ; truncate file if it exists
|
||||
O_SEQUENTIAL_ONLY = 10h ; there will be no 'seek'/'setpos' calls
|
||||
|
||||
|
||||
; void __stdcall close(HANDLE hFile);
|
||||
close:
|
||||
pushad
|
||||
mov ecx, [esp+24h]
|
||||
mov eax, [ecx+_FILE.hPlugin]
|
||||
test eax, eax
|
||||
jz @f
|
||||
push ecx
|
||||
push [ecx+_FILE.hFile]
|
||||
call [aClose]
|
||||
pop ecx
|
||||
@@:
|
||||
call pgfree
|
||||
popad
|
||||
ret 4
|
||||
|
||||
; unsigned __stdcall read(HANDLE hFile, void* buf, unsigned size);
|
||||
read:
|
||||
xor eax, eax
|
||||
pushad
|
||||
mov ecx, [esp+36]
|
||||
test [ecx+_FILE.mode], O_READ
|
||||
jnz @f
|
||||
.ret:
|
||||
popad
|
||||
ret 12
|
||||
@@:
|
||||
cmp dword [esp+44], eax
|
||||
jz .ret
|
||||
mov [ecx+_FILE.fimode], eax
|
||||
mov ebx, [ecx+_FILE.bufsize]
|
||||
mov eax, dword [ecx+_FILE.pos]
|
||||
and eax, 2047
|
||||
sub ebx, eax
|
||||
jbe .nobuf0
|
||||
cmp ebx, [esp+44]
|
||||
jbe @f
|
||||
mov ebx, [esp+44]
|
||||
@@:
|
||||
push ecx
|
||||
lea esi, [ecx+eax+_FILE.buf]
|
||||
mov ecx, ebx
|
||||
mov edi, [esp+44]
|
||||
rep movsb
|
||||
pop ecx
|
||||
mov [esp+40], edi
|
||||
add [esp+28], ebx
|
||||
add dword [ecx+_FILE.pos], ebx
|
||||
adc dword [ecx+_FILE.pos+4], 0
|
||||
test dword [ecx+_FILE.pos], 2047
|
||||
jnz @f
|
||||
and [ecx+_FILE.bufsize], 0
|
||||
@@:
|
||||
sub [esp+44], ebx
|
||||
jz .ret
|
||||
.nobuf0:
|
||||
test dword [ecx+_FILE.pos], 2047
|
||||
jz .aligned
|
||||
cmp dword [ecx+_FILE.bufsize], 0
|
||||
jnz .ret
|
||||
lea ebx, [ecx+_FILE.fileinfo]
|
||||
mov dword [ebx+12], 2048
|
||||
lea eax, [ecx+_FILE.buf]
|
||||
mov dword [ebx+16], eax
|
||||
mov eax, dword [ecx+_FILE.fioffset]
|
||||
mov dword [ecx+_FILE.bufpos], eax
|
||||
mov eax, dword [ecx+_FILE.fioffset+4]
|
||||
mov dword [ecx+_FILE.bufpos+4], eax
|
||||
call .doread
|
||||
test eax, eax
|
||||
jnz .ret
|
||||
mov [ecx+_FILE.bufsize], ebx
|
||||
mov eax, dword [ecx+_FILE.pos]
|
||||
and eax, 2047
|
||||
sub ebx, eax
|
||||
jbe .ret
|
||||
cmp ebx, [esp+44]
|
||||
jbe @f
|
||||
mov ebx, [esp+44]
|
||||
@@:
|
||||
push ecx
|
||||
lea esi, [ecx+eax+_FILE.buf]
|
||||
mov ecx, ebx
|
||||
mov edi, [esp+44]
|
||||
rep movsb
|
||||
pop ecx
|
||||
add dword [ecx+_FILE.pos], ebx
|
||||
adc dword [ecx+_FILE.pos+4], 0
|
||||
mov [esp+40], edi
|
||||
add [esp+28], ebx
|
||||
sub [esp+44], ebx
|
||||
jz .ret
|
||||
test dword [ecx+_FILE.pos], 2047
|
||||
jnz .ret
|
||||
.aligned:
|
||||
lea ebx, [ecx+_FILE.fileinfo]
|
||||
mov eax, [esp+44]
|
||||
and eax, not 2047
|
||||
jz .finish
|
||||
and [ecx+_FILE.bufsize], 0
|
||||
mov [ebx+12], eax
|
||||
mov eax, [esp+40]
|
||||
mov [ebx+16], eax
|
||||
call .doread
|
||||
test eax, eax
|
||||
jnz .ret
|
||||
add dword [ecx+_FILE.pos], ebx
|
||||
adc dword [ecx+_FILE.pos+4], 0
|
||||
add [esp+28], ebx
|
||||
add [esp+40], ebx
|
||||
sub [esp+44], ebx
|
||||
jz .ret
|
||||
cmp ebx, [ecx+_FILE.fisize]
|
||||
jb .ret
|
||||
.finish:
|
||||
lea ebx, [ecx+_FILE.fileinfo]
|
||||
mov dword [ebx+12], 2048
|
||||
lea eax, [ecx+_FILE.buf]
|
||||
mov [ebx+16], eax
|
||||
and [ecx+_FILE.bufsize], 0
|
||||
mov eax, dword [ecx+_FILE.fioffset]
|
||||
mov dword [ecx+_FILE.bufpos], eax
|
||||
mov eax, dword [ecx+_FILE.fioffset+4]
|
||||
mov dword [ecx+_FILE.bufpos+4], eax
|
||||
call .doread
|
||||
test eax, eax
|
||||
jnz .ret
|
||||
mov [ecx+_FILE.bufsize], ebx
|
||||
cmp ebx, [esp+44]
|
||||
jb @f
|
||||
mov ebx, [esp+44]
|
||||
@@:
|
||||
add [esp+28], ebx
|
||||
add dword [ecx+_FILE.pos], ebx
|
||||
adc dword [ecx+_FILE.pos+4], 0
|
||||
lea esi, [ecx+_FILE.buf]
|
||||
mov edi, [esp+40]
|
||||
mov ecx, ebx
|
||||
rep movsb
|
||||
popad
|
||||
ret 12
|
||||
.doread:
|
||||
mov eax, [ecx+_FILE.hPlugin]
|
||||
test eax, eax
|
||||
jz .native
|
||||
push ecx
|
||||
push [ecx+_FILE.fisize]
|
||||
push [ecx+_FILE.fibuf]
|
||||
push [ecx+_FILE.hFile]
|
||||
call [eax+aRead]
|
||||
pop ecx
|
||||
cmp eax, -1
|
||||
jz @f
|
||||
mov ebx, eax
|
||||
xor eax, eax
|
||||
jmp .addpos
|
||||
@@:
|
||||
ret
|
||||
.native:
|
||||
push 70
|
||||
pop eax
|
||||
int 0x40
|
||||
test eax, eax
|
||||
jz .addpos
|
||||
cmp eax, 6
|
||||
jnz @b
|
||||
xor eax, eax
|
||||
.addpos:
|
||||
add dword [ecx+_FILE.fioffset], ebx
|
||||
adc dword [ecx+_FILE.fioffset+4], 0
|
||||
ret
|
||||
|
||||
; void __stdcall seek(HANDLE hFile, int method, __int64 newpos);
|
||||
seek:
|
||||
pushad
|
||||
mov ecx, [esp+36]
|
||||
mov eax, [esp+44]
|
||||
mov edx, [esp+48]
|
||||
cmp dword [esp+40], 1
|
||||
jb .set
|
||||
ja .end
|
||||
add eax, dword [ecx+_FILE.pos]
|
||||
adc edx, dword [ecx+_FILE.pos+4]
|
||||
jmp .set
|
||||
.end:
|
||||
add eax, dword [ecx+_FILE.attr+32]
|
||||
adc edx, dword [ecx+_FILE.attr+36]
|
||||
.set:
|
||||
mov dword [ecx+_FILE.pos], eax
|
||||
mov dword [ecx+_FILE.pos+4], edx
|
||||
and eax, not 2047
|
||||
cmp eax, dword [ecx+_FILE.bufpos]
|
||||
jnz @f
|
||||
cmp edx, dword [ecx+_FILE.bufpos+4]
|
||||
jz .bufposok
|
||||
@@:
|
||||
and [ecx+_FILE.bufsize], 0
|
||||
mov dword [ecx+_FILE.bufpos], eax
|
||||
mov dword [ecx+_FILE.bufpos+4], edx
|
||||
.bufposok:
|
||||
cmp [ecx+_FILE.bufsize], 0
|
||||
jnz .ret
|
||||
cmp eax, dword [ecx+_FILE.fioffset]
|
||||
jnz @f
|
||||
cmp edx, dword [ecx+_FILE.fioffset+4]
|
||||
jz .ret
|
||||
@@:
|
||||
mov dword [ecx+_FILE.fioffset], eax
|
||||
mov dword [ecx+_FILE.fioffset+4], edx
|
||||
mov eax, [ecx+_FILE.hPlugin]
|
||||
test eax, eax
|
||||
jz @f
|
||||
push dword [ecx+_FILE.fioffset+4]
|
||||
push dword [ecx+_FILE.fioffset]
|
||||
push [ecx+_FILE.hFile]
|
||||
call [eax+aSetpos]
|
||||
@@:
|
||||
.ret:
|
||||
popad
|
||||
ret 16
|
||||
|
||||
|
||||
; __int64 __stdcall tell(HANDLE hFile);
|
||||
tell:
|
||||
mov eax, [esp+4]
|
||||
mov edx, dword [eax+_FILE.pos+4]
|
||||
mov eax, dword [eax+_FILE.pos]
|
||||
ret 4
|
||||
|
||||
; HANDLE __stdcall open(const char* name, int mode);
|
||||
; Opens physical file
|
||||
open:
|
||||
pushad
|
||||
mov ecx, _FILE.size
|
||||
call xpgalloc
|
||||
test eax, eax
|
||||
jz .ret0z
|
||||
mov [esp+28], eax
|
||||
mov ecx, eax
|
||||
mov esi, [esp+36]
|
||||
lea edi, [eax+_FILE.finame]
|
||||
lea edx, [eax+_FILE.finame+1024]
|
||||
@@:
|
||||
lodsb
|
||||
stosb
|
||||
test al, al
|
||||
jz @f
|
||||
cmp edi, edx
|
||||
jb @b
|
||||
.ret0:
|
||||
call pgfree
|
||||
.ret0z:
|
||||
popad
|
||||
xor eax, eax
|
||||
ret 8
|
||||
@@:
|
||||
mov eax, [esp+40]
|
||||
mov [ecx+_FILE.mode], eax
|
||||
.getattr:
|
||||
lea edi, [ecx+_FILE.fileinfo]
|
||||
mov ebx, edi
|
||||
push 5
|
||||
pop eax
|
||||
stosd
|
||||
xor eax, eax
|
||||
stosd
|
||||
stosd
|
||||
stosd
|
||||
lea eax, [ecx+_FILE.attr]
|
||||
stosd
|
||||
push 70
|
||||
pop eax
|
||||
int 0x40
|
||||
test eax, eax
|
||||
jz .found
|
||||
cmp eax, 5
|
||||
jnz .ret0
|
||||
; file does not exist
|
||||
test [ecx+_FILE.mode], O_CREATE
|
||||
jz .ret0
|
||||
.truncate:
|
||||
lea ebx, [ecx+_FILE.fileinfo]
|
||||
mov byte [ebx], 2
|
||||
push 70
|
||||
pop eax
|
||||
int 0x40
|
||||
test eax, eax
|
||||
jz .getattr
|
||||
jmp .ret0
|
||||
.found:
|
||||
test [ecx+_FILE.mode], O_TRUNCATE
|
||||
jz @f
|
||||
cmp dword [ecx+_FILE.attr+36], eax
|
||||
jnz .truncate
|
||||
cmp dword [ecx+_FILE.attr+32], eax
|
||||
jnz .truncate
|
||||
@@:
|
||||
mov dword [ecx+_FILE.pos], eax
|
||||
mov dword [ecx+_FILE.pos+4], eax
|
||||
mov dword [ecx+_FILE.bufpos], eax
|
||||
mov dword [ecx+_FILE.bufpos+4], eax
|
||||
mov [ecx+_FILE.bufsize], eax
|
||||
mov [ecx+_FILE.hPlugin], eax
|
||||
mov [ecx+_FILE.hFile], eax
|
||||
mov dword [ecx+_FILE.fioffset], eax
|
||||
mov dword [ecx+_FILE.fioffset+4], eax
|
||||
mov [esp+28], ecx
|
||||
popad
|
||||
ret 8
|
||||
|
||||
; HANDLE __stdcall open2(int plugin_id, HANDLE plugin_instance, const char* name, int mode);
|
||||
; Opens file on plugin panel
|
||||
open2:
|
||||
cmp dword [esp+4], 0
|
||||
jnz .plugin
|
||||
pop eax
|
||||
add esp, 8
|
||||
push eax
|
||||
jmp open
|
||||
.plugin:
|
||||
pushad
|
||||
mov ecx, _FILE.size
|
||||
call xpgalloc
|
||||
test eax, eax
|
||||
jz .ret0z
|
||||
mov [esp+28], eax
|
||||
mov ecx, eax
|
||||
mov esi, [esp+44]
|
||||
lea edi, [eax+_FILE.finame]
|
||||
lea edx, [eax+_FILE.finame+1024]
|
||||
@@:
|
||||
lodsb
|
||||
stosb
|
||||
test al, al
|
||||
jz @f
|
||||
cmp edi, edx
|
||||
jb @b
|
||||
.ret0:
|
||||
call pgfree
|
||||
.ret0z:
|
||||
popad
|
||||
xor eax, eax
|
||||
ret 8
|
||||
@@:
|
||||
mov edx, [esp+36]
|
||||
mov [ecx+_FILE.hPlugin], edx
|
||||
mov ebx, [esp+40]
|
||||
mov eax, [esp+48]
|
||||
mov [ecx+_FILE.mode], eax
|
||||
push ebx ecx
|
||||
push eax
|
||||
lea eax, [ecx+_FILE.finame]
|
||||
push eax
|
||||
push ebx
|
||||
call [edx+aOpen]
|
||||
pop ecx ebx
|
||||
test eax, eax
|
||||
jz .ret0
|
||||
mov [ecx+_FILE.hFile], eax
|
||||
mov edx, [esp+36]
|
||||
push ecx
|
||||
lea edi, [ecx+_FILE.fileinfo]
|
||||
push edi
|
||||
xor eax, eax
|
||||
push ecx
|
||||
push 10
|
||||
pop ecx
|
||||
rep stosd
|
||||
pop ecx
|
||||
lea eax, [ecx+_FILE.finame]
|
||||
push eax
|
||||
push ebx
|
||||
call [edx+aGetattr]
|
||||
pop ecx
|
||||
xor eax, eax
|
||||
mov dword [ecx+_FILE.pos], eax
|
||||
mov dword [ecx+_FILE.pos+4], eax
|
||||
mov dword [ecx+_FILE.bufpos], eax
|
||||
mov dword [ecx+_FILE.bufpos+4], eax
|
||||
mov [ecx+_FILE.bufsize], eax
|
||||
mov dword [ecx+_FILE.fioffset], eax
|
||||
mov dword [ecx+_FILE.fioffset+4], eax
|
||||
mov [esp+28], ecx
|
||||
popad
|
||||
ret 16
|
||||
|
||||
; __int64 __stdcall filesize(HANDLE hFile);
|
||||
filesize:
|
||||
mov eax, [esp+4]
|
||||
mov edx, dword [eax+_FILE.attr+36]
|
||||
mov eax, dword [eax+_FILE.attr+32]
|
||||
ret 4
|
||||
|
||||
|
||||
;
|
||||
;makedir:
|
||||
;; create directory with name from CopyDestEditBuf+12
|
||||
;; destroys eax
|
||||
; push ebx
|
||||
; push 70
|
||||
; pop eax
|
||||
; mov ebx, mkdirinfo
|
||||
; int 0x40
|
||||
; pop ebx
|
||||
; test eax, eax
|
||||
; jz .ret
|
||||
; cmp dword [esp+8], DeleteErrorBtn
|
||||
; jnz @f
|
||||
; cmp [copy_bSkipAll], 0
|
||||
; jz @f
|
||||
; push 1
|
||||
; pop eax
|
||||
; jmp .ret
|
||||
;@@:
|
||||
; push dword CopyDestEditBuf+12
|
||||
; push dword aCannotMakeFolder
|
||||
; call get_error_msg
|
||||
; push eax
|
||||
; mov eax, esp
|
||||
; push dword [eax+20]
|
||||
; push dword [eax+16]
|
||||
; push eax
|
||||
; push 3
|
||||
; call SayErr
|
||||
; add esp, 3*4
|
||||
; test eax, eax
|
||||
; jz makedir
|
||||
;.ret:
|
||||
; ret 8
|
||||
;
|
||||
|
||||
|
||||
|
||||
;######################################################################################################
|
||||
;######################################################################################################
|
||||
;######################################################################################################
|
||||
;######################################################################################################
|
||||
|
||||
|
||||
CHECK_FOR_LEAKS = 0
|
||||
if CHECK_FOR_LEAKS
|
||||
uglobal
|
||||
allocatedregions rd 1024
|
||||
endg
|
||||
iglobal
|
||||
numallocatedregions dd 0
|
||||
endg
|
||||
end if
|
||||
pgalloc:
|
||||
; in: ecx=size
|
||||
; out: eax=pointer or NULL
|
||||
push ebx
|
||||
push 68
|
||||
pop eax
|
||||
push 12
|
||||
pop ebx
|
||||
int 0x40
|
||||
if CHECK_FOR_LEAKS
|
||||
test eax, eax
|
||||
jz .no
|
||||
.b:
|
||||
mov ebx, [numallocatedregions]
|
||||
cmp ebx, 1024
|
||||
jb @f
|
||||
int3
|
||||
jmp $
|
||||
@@:
|
||||
mov [allocatedregions+ebx*4], eax
|
||||
inc [numallocatedregions]
|
||||
.no:
|
||||
end if
|
||||
pop ebx
|
||||
ret
|
||||
|
||||
pgfree:
|
||||
; in: ecx=pointer
|
||||
; destroys eax
|
||||
if CHECK_FOR_LEAKS
|
||||
jecxz .no
|
||||
mov eax, [numallocatedregions]
|
||||
@@:
|
||||
dec eax
|
||||
js .a
|
||||
cmp [allocatedregions+eax*4], ecx
|
||||
jnz @b
|
||||
jmp @f
|
||||
.a:
|
||||
int3
|
||||
jmp $
|
||||
@@:
|
||||
dec [numallocatedregions]
|
||||
@@:
|
||||
cmp eax, [numallocatedregions]
|
||||
jae @f
|
||||
push [allocatedregions+eax*4+4]
|
||||
pop [allocatedregions+eax*4]
|
||||
inc eax
|
||||
jmp @b
|
||||
@@:
|
||||
.no:
|
||||
end if
|
||||
push ebx
|
||||
push 68
|
||||
pop eax
|
||||
push 13
|
||||
pop ebx
|
||||
int 0x40
|
||||
pop ebx
|
||||
ret
|
||||
|
||||
|
||||
|
||||
|
||||
pgrealloc:
|
||||
; in: ecx=size, edx=pointer
|
||||
; out: eax=pointer
|
||||
push ebx
|
||||
push 68
|
||||
pop eax
|
||||
push 20
|
||||
pop ebx
|
||||
int 0x40
|
||||
if CHECK_FOR_LEAKS
|
||||
test edx, edx
|
||||
jz pgalloc.b
|
||||
test eax, eax
|
||||
jz .no
|
||||
cmp eax, edx
|
||||
jz .no
|
||||
xor ebx, ebx
|
||||
@@:
|
||||
cmp ebx, [numallocatedregions]
|
||||
jae .a
|
||||
cmp [allocatedregions+ebx*4], edx
|
||||
jz @f
|
||||
inc ebx
|
||||
jmp @b
|
||||
@@:
|
||||
mov [allocatedregions+ebx*4], eax
|
||||
jmp .no
|
||||
.a:
|
||||
int3
|
||||
jmp $
|
||||
.no:
|
||||
end if
|
||||
pop ebx
|
||||
ret
|
||||
|
||||
xpgalloc:
|
||||
; in: ecx=size
|
||||
; out: eax=pointer or NULL
|
||||
call pgalloc
|
||||
.common:
|
||||
test eax, eax
|
||||
jnz @f
|
||||
;call SayNoMem
|
||||
|
||||
@@:
|
||||
ret
|
||||
|
||||
xpgrealloc:
|
||||
; in: edx=pointer, ecx=new size
|
||||
; out: eax=pointer or NULL
|
||||
call pgrealloc
|
||||
jmp xpgalloc.common
|
||||
|
||||
getfreemem:
|
||||
; out: eax=size of free RAM in Kb
|
||||
push ebx
|
||||
mcall 18,16
|
||||
pop ebx
|
||||
ret
|
||||
|
||||
|
||||
|
||||
proc myAddFile name:dword, bdfe_info:dword, hFile:dword
|
||||
locals
|
||||
beginFile dd 0
|
||||
pos dd 0
|
||||
endl
|
||||
|
||||
;dps 'file unpack '
|
||||
;dpsP [name]
|
||||
;dnl
|
||||
pusha
|
||||
mov [pos],0
|
||||
|
||||
push ebp
|
||||
stdcall [aRead], [hFile], copy_buf, SIZE_COPY_BUF
|
||||
pop ebp
|
||||
|
||||
mov [fsWrite.cmd],2
|
||||
mov [fsWrite.pos],0
|
||||
mov [fsWrite.size],eax
|
||||
mov eax,[name]
|
||||
mov [fsWrite.path],eax
|
||||
mcall 70,fsWrite
|
||||
|
||||
.loop:
|
||||
mov eax, [fsWrite.size]
|
||||
add [pos], eax
|
||||
|
||||
|
||||
push ebp
|
||||
stdcall [aRead], [hFile], copy_buf, SIZE_COPY_BUF
|
||||
pop ebp
|
||||
|
||||
cmp eax,0
|
||||
jz .end
|
||||
|
||||
mov [fsWrite.cmd],3
|
||||
mov [fsWrite.size],eax
|
||||
mov eax,[pos]
|
||||
mov [fsWrite.pos],eax
|
||||
mcall 70,fsWrite
|
||||
jmp .loop
|
||||
.end:
|
||||
|
||||
|
||||
popa
|
||||
mov eax,1
|
||||
ret
|
||||
endp
|
||||
|
||||
|
||||
proc myAddDir name:dword, bdfe_info:dword
|
||||
dps 'log adddir'
|
||||
mov eax,[name]
|
||||
dpsP eax
|
||||
dnl
|
||||
|
||||
pusha
|
||||
mov eax,[name]
|
||||
mov [fsNewDir.path],eax
|
||||
mcall 70,fsNewDir
|
||||
;
|
||||
; mov edi,[name]
|
||||
; xor al,al
|
||||
; mov ecx,256
|
||||
; repne scasb
|
||||
; mov edx,256
|
||||
; sub edx,ecx
|
||||
; mov eax,[name]
|
||||
; mcall 30,1,eax
|
||||
popa
|
||||
mov eax,1
|
||||
ret
|
||||
endp
|
||||
|
||||
|
||||
;ª®¯¨àã¥â ¯®á«¥¤¥¥ ¨¬ï ¢ ¯®«®¬ ¨«¨ ®â®á¨â¥«ì®¬ ¯ã⨠¡¥§ à áè¨à¥¨ï
|
||||
proc cpLastName inp:dword, outp:dword
|
||||
push edi esi
|
||||
mov edi,[inp]
|
||||
xor al,al
|
||||
mov ecx,256 ; V
|
||||
repne scasb ;/fol1/file1.zip
|
||||
|
||||
mov al,'/'
|
||||
mov ecx,256
|
||||
std ; V
|
||||
repne scasb ;/fol1/file1.zip
|
||||
cld
|
||||
|
||||
mov esi,edi
|
||||
add esi,2
|
||||
mov ecx,256 ;/fol1/file1.zip
|
||||
mov edi,[outp] ;file1.zip
|
||||
@@: lodsb
|
||||
stosb
|
||||
test al,al
|
||||
jz @f
|
||||
loop @b
|
||||
@@:
|
||||
|
||||
mov al,'.'
|
||||
mov ecx,256
|
||||
std ; V
|
||||
repne scasb ;file1.zip
|
||||
cld
|
||||
mov [edi+1], byte 0
|
||||
|
||||
pop esi edi
|
||||
ret
|
||||
endp
|
||||
|
||||
|
||||
proc cpAllExcludeLastName inp:dword, outp:dword
|
||||
push edi esi
|
||||
mov edi,[inp]
|
||||
xor al,al
|
||||
mov ecx,256 ; V
|
||||
repne scasb ;/fol1/file1.zip
|
||||
|
||||
mov al,'/'
|
||||
mov ecx,256
|
||||
std ; V
|
||||
repne scasb ;/fol1/file1.zip
|
||||
cld
|
||||
mov edx,edi
|
||||
add edx, 2
|
||||
|
||||
mov esi,[inp]
|
||||
mov ecx,256 ;/fol1/file1.zip
|
||||
mov edi,[outp] ;file1.zip
|
||||
@@: lodsb
|
||||
stosb
|
||||
test al,al
|
||||
jz @f
|
||||
cmp esi,edx
|
||||
jae @f
|
||||
loop @b
|
||||
@@:
|
||||
xor al, al
|
||||
stosb
|
||||
|
||||
pop esi edi
|
||||
ret
|
||||
endp
|
260
programs/fs/unz/PARSE.INC
Normal file
260
programs/fs/unz/PARSE.INC
Normal file
@ -0,0 +1,260 @@
|
||||
; ret:
|
||||
; 0 - not found param
|
||||
; 1 - found param
|
||||
; 2 - error parsing
|
||||
|
||||
proc getLastParam ;¯®á«¥¤¨© ¯ à ¬¥âà ¯¨è¥â ¢ fInp
|
||||
xor al, al ;to end sring
|
||||
mov edi, params
|
||||
mov ecx, 4096
|
||||
repne scasb
|
||||
dec edi
|
||||
dec edi
|
||||
test ecx, ecx
|
||||
jz errorParsing
|
||||
|
||||
mov eax, ecx ; - spaces
|
||||
mov ecx, 4096
|
||||
sub ecx, eax
|
||||
mov al, ' '
|
||||
std
|
||||
repe scasb
|
||||
cld
|
||||
inc edi
|
||||
inc ecx
|
||||
|
||||
cmp edi, params
|
||||
je .noparams
|
||||
|
||||
cmp [edi], byte '"'
|
||||
je .quotation
|
||||
|
||||
mov al, ' ' ;find previous space or begin string
|
||||
std
|
||||
repne scasb
|
||||
cld
|
||||
inc edi
|
||||
inc edi
|
||||
|
||||
mov esi, edi ;copy
|
||||
mov ebx, edi
|
||||
mov edi, fInp
|
||||
|
||||
xor ecx, ecx
|
||||
@@:lodsb
|
||||
cmp al, ' '
|
||||
je @f
|
||||
test al, al
|
||||
je @f
|
||||
stosb
|
||||
inc ecx
|
||||
jmp @b
|
||||
@@:
|
||||
mov [edi], byte 0
|
||||
inc edi
|
||||
|
||||
mov edi, ebx ;clear
|
||||
mov al, ' '
|
||||
rep stosb
|
||||
|
||||
jmp .end
|
||||
.quotation:
|
||||
dec edi
|
||||
mov al, '"'
|
||||
std
|
||||
repne scasb
|
||||
cld
|
||||
add edi, 2
|
||||
cmp [edi-1], byte '"'
|
||||
jne .err
|
||||
|
||||
mov esi, edi
|
||||
mov ebx, edi
|
||||
mov edi, fInp
|
||||
xor ecx, ecx
|
||||
@@:lodsb
|
||||
cmp al, '"'
|
||||
je @f
|
||||
test al, al
|
||||
je @f
|
||||
stosb
|
||||
inc ecx
|
||||
jmp @b
|
||||
@@:
|
||||
mov [edi], byte 0
|
||||
inc edi
|
||||
|
||||
mov edi, ebx
|
||||
dec edi
|
||||
mov al, ' '
|
||||
add ecx, 2
|
||||
rep stosb
|
||||
|
||||
.end:
|
||||
mov eax, 1
|
||||
ret
|
||||
.err:
|
||||
mov eax, 2
|
||||
ret
|
||||
.noparams:
|
||||
xor eax, eax
|
||||
endp
|
||||
|
||||
|
||||
proc getParam2
|
||||
locals
|
||||
retrn rd 0
|
||||
endl
|
||||
mov [retrn], 0
|
||||
mov ebx, params
|
||||
.find_o:
|
||||
cmp [ebx], word '-o'
|
||||
jne .find_o2
|
||||
mov edx, ebx
|
||||
lea esi, [ebx+3]
|
||||
@@: ;skiping spaces
|
||||
cmp esi, pathOut+1024
|
||||
jae .errorParsing
|
||||
cmp byte[esi], ' '
|
||||
jne @f
|
||||
inc esi
|
||||
jmp @b
|
||||
@@: ;copying ; -o "file"
|
||||
mov ecx, 3
|
||||
cmp byte[esi], '"'
|
||||
jne ._notspace
|
||||
inc esi
|
||||
add ecx, 2
|
||||
mov edi, pathOut
|
||||
mov [retrn], 1
|
||||
@@: lodsb
|
||||
cmp al, '"'
|
||||
je .clear
|
||||
stosb
|
||||
inc ecx
|
||||
cmp esi, pathOut+1024
|
||||
jae errorParsing
|
||||
jmp @b
|
||||
|
||||
._notspace: ;copying ; -o file
|
||||
mov edi, pathOut
|
||||
@@: lodsb
|
||||
stosb
|
||||
inc ecx
|
||||
cmp al, ' '
|
||||
je .clear
|
||||
cmp esi, pathOut+1024
|
||||
jae errorParsing
|
||||
jmp @b
|
||||
|
||||
.clear: ;cleaning param
|
||||
mov [edi], byte 0
|
||||
inc edi
|
||||
mov [retrn], 1
|
||||
@@:
|
||||
mov byte[edx], ' '
|
||||
inc edx
|
||||
loop @b
|
||||
jmp @f
|
||||
|
||||
.find_o2:
|
||||
inc ebx
|
||||
cmp ebx, pathOut+1024
|
||||
jae @f
|
||||
cmp byte[ebx], 0
|
||||
je @f
|
||||
jmp .find_o
|
||||
@@:
|
||||
|
||||
|
||||
|
||||
mov eax, [retrn]
|
||||
ret
|
||||
.errorParsing:
|
||||
mov eax, 2
|
||||
ret
|
||||
endp
|
||||
|
||||
|
||||
proc getParam key:word
|
||||
locals
|
||||
retrn rd 0
|
||||
endl
|
||||
mov [retrn], 0
|
||||
mov ebx, params
|
||||
|
||||
.find_o:
|
||||
mov ax, [key]
|
||||
cmp [ebx], ax
|
||||
jne .find_o2
|
||||
|
||||
mov edx, ebx
|
||||
lea esi, [ebx+3]
|
||||
|
||||
@@: ;skiping spaces
|
||||
cmp esi, params+4096
|
||||
jae .errorParsing
|
||||
cmp byte[esi], ' '
|
||||
jne @f
|
||||
inc esi
|
||||
jmp @b
|
||||
@@:
|
||||
|
||||
;copying ; -f "file"
|
||||
mov ecx, 3
|
||||
cmp byte[esi], '"'
|
||||
jne ._notspace
|
||||
inc esi
|
||||
add ecx, 2
|
||||
mov edi, [endPointer]
|
||||
mov [retrn], 1
|
||||
@@: lodsb
|
||||
cmp al, '"'
|
||||
je .clear
|
||||
stosb
|
||||
inc ecx
|
||||
cmp esi, params+4096
|
||||
jae errorParsing
|
||||
jmp @b
|
||||
|
||||
._notspace: ;copying ; -f file
|
||||
mov edi, [endPointer]
|
||||
@@: lodsb
|
||||
stosb
|
||||
inc ecx
|
||||
cmp al, ' '
|
||||
je .clear
|
||||
cmp esi, params+4096
|
||||
jae errorParsing
|
||||
jmp @b
|
||||
|
||||
|
||||
.clear: ;cleaning param
|
||||
mov [edi], byte 0
|
||||
inc edi
|
||||
mov [endPointer], edi
|
||||
mov [retrn], 1
|
||||
@@:
|
||||
mov byte[edx], ' '
|
||||
inc edx
|
||||
loop @b
|
||||
|
||||
jmp @f
|
||||
|
||||
.find_o2:
|
||||
inc ebx
|
||||
cmp ebx, params+4096
|
||||
jae @f
|
||||
cmp byte[ebx], 0
|
||||
je @f
|
||||
jmp .find_o
|
||||
@@:
|
||||
|
||||
|
||||
|
||||
mov eax, [retrn]
|
||||
ret
|
||||
.errorParsing:
|
||||
mov eax, 2
|
||||
ret
|
||||
endp
|
994
programs/fs/unz/UNZ.ASM
Normal file
994
programs/fs/unz/UNZ.ASM
Normal file
@ -0,0 +1,994 @@
|
||||
;unz - à ᯠª®¢é¨ª, ¨á¯®«ì§ãî騩 archiver.obj. <20>®¤¤¥à¦¨¢ ¥â zip ¨ 7z.
|
||||
|
||||
;unz [-o output path] [-f file for unpack] [-f ...] [-h] file.zip
|
||||
;-h - hide GUI. If params is empty - do exit.
|
||||
|
||||
;unz -o /hd0/1/arci -f text1.txt file.zip -unpack in folder only file text1.txt
|
||||
;or
|
||||
;unz -o "/hd0/1/arci" -f "text1.txt" text2.txt "file.zip" -unpack in folder only file text1.txt and text2.txt
|
||||
|
||||
|
||||
;<3B>… <20>…€‹ˆ‡Ž‚€<E2809A><E282AC>Ž
|
||||
;unz -n "namezone" "file.zip" - open packed file, write list files of main folder in namezone
|
||||
;namezone:
|
||||
;dd 0 - ¥á«¨ ¨¬¥®¢ ï §® § ïâ , â® 1
|
||||
;dd cmd - 0 ¥â ª®¬ ¤ë
|
||||
; 1 ¯®«ãç¨âì ᯨ᮪ ä ©«®¢
|
||||
; 2 ¯®«ãç¨âì ä ©«
|
||||
; 3 ãáâ ®¢¨âì ⥪ã訩 ª â «®£ ¢ à娢¥
|
||||
; 4 § ¢¥àè¨âì à ¡®âã
|
||||
;data - ¤ ë¥, § ¢¨á¨â ®â ª®¬¬ ¤ë
|
||||
; 1 ¯®«ãç¨âì ᯨ᮪ ä ©«®¢
|
||||
; input
|
||||
; none
|
||||
; output
|
||||
; dd numfiles - ª®«¨ç¥á⢮ ä ©«®¢ ¨ ¯ ¯®ª ¢ ⥪ã饬 ª â «®£¥
|
||||
; strz file1...fileN - ᯨ᮪ áâப, à §¤¥«ñëå 0
|
||||
; 2 ¯®«ãç¨âì ä ©«
|
||||
; input
|
||||
; dd num bytes
|
||||
; strz filename (file1.txt of /fold1/file1.txt)
|
||||
; output
|
||||
; dd num bytes
|
||||
; data
|
||||
|
||||
use32
|
||||
org 0
|
||||
db 'MENUET01'
|
||||
dd 1, start, init_end, end_mem, stack_top, params, 0
|
||||
|
||||
|
||||
include 'lang.inc'
|
||||
include '../../macros.inc'
|
||||
include '../../proc32.inc'
|
||||
include '../../develop/libraries/box_lib/trunk/box_lib.mac'
|
||||
include '../../dll.inc'
|
||||
include 'debug.inc'
|
||||
|
||||
version equ '0.65'
|
||||
version_dword equ 0*10000h + 65
|
||||
|
||||
|
||||
|
||||
SIZE_COPY_BUF = 1024*1024*2
|
||||
|
||||
virtual at 0
|
||||
kfar_info_struc:
|
||||
.lStructSize dd ?
|
||||
.kfar_ver dd ?
|
||||
.open dd ?
|
||||
.open2 dd ?
|
||||
.read dd ?
|
||||
.write dd ?
|
||||
.seek dd ?
|
||||
.tell dd ?
|
||||
.flush dd ?
|
||||
.filesize dd ?
|
||||
.close dd ?
|
||||
.pgalloc dd ?
|
||||
.pgrealloc dd ?
|
||||
.pgfree dd ?
|
||||
.getfreemem dd ?
|
||||
.pgalloc2 dd ?
|
||||
.pgrealloc2 dd ?
|
||||
.pgfree2 dd ?
|
||||
.menu dd ?
|
||||
.menu_centered_in dd ?
|
||||
.DialogBox dd ?
|
||||
.SayErr dd ?
|
||||
.Message dd ?
|
||||
.cur_console_size dd ?
|
||||
end virtual
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
include 'parse.inc'
|
||||
include 'fs.inc'
|
||||
|
||||
;-- CODE -------------------------------------------------------------------
|
||||
|
||||
|
||||
start:
|
||||
mcall 68, 11
|
||||
mcall 40, 100111b + 0C0000000h
|
||||
stdcall dll.Load, IMPORTS
|
||||
test eax, eax
|
||||
jnz exit
|
||||
mov [pathOut],0
|
||||
|
||||
;stdcall SayErr,strErrorExc
|
||||
;mcall -1
|
||||
;----------------------------
|
||||
;1. find input file, clear
|
||||
;2. find -o, copy data, clear
|
||||
;3. find -f, add pointer, copy data, clear
|
||||
;4. find -c, check variable, clear
|
||||
;1.
|
||||
call getLastParam
|
||||
test eax, eax
|
||||
je wm_redraw
|
||||
dec eax
|
||||
je .arbeit
|
||||
jmp errorParsing
|
||||
|
||||
.arbeit:
|
||||
;2.
|
||||
call getParam2
|
||||
cmp eax, 2
|
||||
je errorParsing
|
||||
|
||||
;3.
|
||||
|
||||
@@:
|
||||
mov eax, [iFiles]
|
||||
shl eax, 2
|
||||
add eax, files
|
||||
m2m dword[eax], dword[endPointer]
|
||||
stdcall getParam, '-f'
|
||||
cmp eax, 2
|
||||
je errorParsing
|
||||
inc [iFiles]
|
||||
cmp eax, 1
|
||||
je @b
|
||||
|
||||
;4.
|
||||
mov edi, params
|
||||
mov ax,'-h'
|
||||
@@: cmp word [edi], ax
|
||||
je .check
|
||||
inc edi
|
||||
cmp edi, params+1024
|
||||
je @f
|
||||
cmp byte[edi],0
|
||||
je @f
|
||||
jmp @b
|
||||
.check:
|
||||
call startUnpack
|
||||
mcall -1
|
||||
@@:
|
||||
stdcall [OpenDialog_Init],OpenDialog_data
|
||||
|
||||
;init edit fields --------------
|
||||
xor al,al
|
||||
mov edi,fInp
|
||||
mov ecx,1024
|
||||
repne scasb
|
||||
inc ecx
|
||||
mov eax,1024
|
||||
sub eax,ecx
|
||||
mov dword[edtPack.size],eax
|
||||
mov dword[edtPack.pos],eax
|
||||
|
||||
xor al, al
|
||||
mov edi, pathOut
|
||||
mov ecx, 1024
|
||||
repne scasb
|
||||
inc ecx
|
||||
mov eax, 1024
|
||||
sub eax, ecx
|
||||
mov dword[edtUnpPath.size], eax
|
||||
mov dword[edtUnpPath.pos], eax
|
||||
|
||||
|
||||
;main loop --------------------
|
||||
wm_redraw:
|
||||
call winRedraw
|
||||
|
||||
still:
|
||||
mcall 10
|
||||
cmp eax, 1
|
||||
je wm_redraw
|
||||
cmp eax, 2
|
||||
je wm_key
|
||||
cmp eax, 3
|
||||
je wm_button
|
||||
cmp eax, 6
|
||||
je wm_mouse
|
||||
|
||||
jmp still
|
||||
|
||||
wm_key:
|
||||
mcall 2
|
||||
cmp [bWinChild],0
|
||||
jne still
|
||||
|
||||
stdcall [edit_box_key],edtPack
|
||||
stdcall [edit_box_key],edtUnpPath
|
||||
|
||||
jmp still
|
||||
|
||||
|
||||
wm_button:
|
||||
mcall 17
|
||||
cmp [bWinChild],0
|
||||
jne still
|
||||
|
||||
cmp ah, 3
|
||||
jne @f
|
||||
call selectInput
|
||||
jmp wm_redraw
|
||||
@@:
|
||||
cmp ah, 4
|
||||
jne @f
|
||||
call selectOutFold
|
||||
jmp wm_redraw
|
||||
@@:
|
||||
|
||||
cmp ah, 2
|
||||
jne @f
|
||||
;mcall 51,1,startUnpack,stackUnpack
|
||||
;mov [bWinChild],1
|
||||
call startUnpack
|
||||
jmp wm_redraw
|
||||
@@:
|
||||
|
||||
cmp ah, 1
|
||||
je exit
|
||||
jmp still
|
||||
|
||||
wm_mouse:
|
||||
cmp [bWinChild],0
|
||||
jne still
|
||||
stdcall [edit_box_mouse],edtPack
|
||||
stdcall [edit_box_mouse],edtUnpPath
|
||||
|
||||
jmp still
|
||||
|
||||
exit:
|
||||
mcall -1
|
||||
|
||||
errorParsing:
|
||||
dps 'errorParsing'
|
||||
mcall -1
|
||||
|
||||
;--- functions ------------------------------------------------------------------
|
||||
|
||||
proc winRedraw
|
||||
mcall 12, 1
|
||||
mcall 48, 3, sc, sizeof.system_colors
|
||||
mov edx, [sc.work]
|
||||
or edx, 0x33000000
|
||||
mcall 0, <200,320>, <200,130>, , , title
|
||||
mcall 8, <113,100>,<65,25>,2,[sc.work_button]
|
||||
mcall 8, <280,15>,<11,14>,3,[sc.work_button]
|
||||
mcall 8, <280,15>,<33,14>,4,[sc.work_button]
|
||||
|
||||
edit_boxes_set_sys_color edtPack,endEdits,sc
|
||||
stdcall [edit_box_draw],edtPack
|
||||
stdcall [edit_box_draw],edtUnpPath
|
||||
|
||||
|
||||
cmp [redInput],0
|
||||
jne @f
|
||||
mov ecx,[sc.work_text]
|
||||
or ecx,90000000h
|
||||
jmp .l1
|
||||
@@:
|
||||
mov ecx,90FF0000h
|
||||
.l1:
|
||||
mcall 4, <15,11>, , strInp
|
||||
mov ecx,[sc.work_text]
|
||||
or ecx,90000000h
|
||||
mcall 4, <15,32>, , strPath
|
||||
mov ecx,[sc.work_button_text]
|
||||
or ecx,90000000h
|
||||
mcall 4, <140,70>, , strGo
|
||||
|
||||
mcall 12, 2
|
||||
ret
|
||||
endp
|
||||
|
||||
;region
|
||||
selectInput:
|
||||
mov [OpenDialog_data.type],0
|
||||
stdcall [OpenDialog_Start],OpenDialog_data
|
||||
mov edi,ODAreaPath
|
||||
xor al,al
|
||||
or ecx,-1
|
||||
repne scasb
|
||||
sub edi,ODAreaPath
|
||||
dec edi
|
||||
mov dword[edtPack+12*4],edi
|
||||
mov ecx,edi
|
||||
inc ecx
|
||||
mov edi,fInp
|
||||
mov esi,ODAreaPath
|
||||
rep movsb
|
||||
mov [redInput],0
|
||||
ret
|
||||
;endregion
|
||||
|
||||
;region
|
||||
selectOutFold:
|
||||
mov [OpenDialog_data.type],2
|
||||
stdcall [OpenDialog_Start],OpenDialog_data
|
||||
mov edi,ODAreaPath
|
||||
xor al,al
|
||||
or ecx,-1
|
||||
repne scasb
|
||||
sub edi,ODAreaPath
|
||||
dec edi
|
||||
mov dword[edtUnpPath+12*4],edi
|
||||
mov ecx,edi
|
||||
inc ecx
|
||||
mov edi,pathOut
|
||||
mov esi,ODAreaPath
|
||||
rep movsb
|
||||
ret
|
||||
;endregion
|
||||
|
||||
|
||||
;-------------------------------------------------------------------------------
|
||||
|
||||
allfiles dd 0
|
||||
succfiles dd 0
|
||||
numbytes dd 0
|
||||
|
||||
proc startUnpack
|
||||
locals
|
||||
paramUnp rd 1
|
||||
sizeUnpack rd 1
|
||||
hFile rd 1
|
||||
hFileZip rd 1
|
||||
hPlugin rd 1
|
||||
pathFold rb 256
|
||||
endl
|
||||
;if input not corrected
|
||||
cmp [fInp],byte 0
|
||||
je .errNullInp
|
||||
|
||||
; mcall 68, 24, Exception, 0FFFFFFFFh ;??
|
||||
;init plugin
|
||||
push ebp
|
||||
stdcall [aPluginLoad],kfar_info
|
||||
pop ebp
|
||||
|
||||
|
||||
;set current directory, create folder
|
||||
cmp [pathOut],0
|
||||
jne @f
|
||||
lea eax,[pathFold]
|
||||
stdcall cpLastName, fInp, eax
|
||||
lea eax,[pathFold]
|
||||
mov [fsNewDir.path],eax
|
||||
mcall 70, fsNewDir
|
||||
mov ecx, [fsNewDir.path]
|
||||
|
||||
mcall 30,4,,1
|
||||
jmp .n
|
||||
@@:
|
||||
mcall 30,4,pathOut,1
|
||||
.n:
|
||||
|
||||
;open and read first 1KB
|
||||
stdcall open, fInp, O_READ
|
||||
mov [hFileZip], eax
|
||||
mcall 70,fsZip
|
||||
test eax,eax
|
||||
jnz .errNotFound
|
||||
mcall 70,fsZipRead
|
||||
|
||||
|
||||
;open pack
|
||||
push ebp
|
||||
stdcall [aOpenFilePlugin],[hFileZip],bdvkPack,filedata_buffer,filedata_buffer_size ,0 ,0 , fInp
|
||||
pop ebp
|
||||
|
||||
test eax,eax
|
||||
jnz @f
|
||||
cmp ebx,0 ;;/ ŠŽ‘’›‹œ!!!!
|
||||
je .errNotFound ;;§ 票¥ ebx ¯®«ã祮 ®¯ëâë¬ ¯ãâñ¬.
|
||||
cmp ebx,400h ;;ª ª ®® ¡ã¤¥â à ¡®â âì á ¤à㣨¬¨ ¢¥àá¨ï¬¨
|
||||
je .errNotSupp ;;¡¨¡«¨®â¥ª¨ - ¥ ïá®!
|
||||
@@:
|
||||
mov [hPlugin],eax
|
||||
|
||||
;get num of all files
|
||||
; stdcall calcSizeArch,[hPlugin]
|
||||
; push ebp
|
||||
; stdcall [aReadFolder], [hPlugin]
|
||||
; pop ebp
|
||||
|
||||
|
||||
|
||||
; push ebp
|
||||
; stdcall [aOpen], [hPlugin], .str1, O_READ
|
||||
; pop ebp
|
||||
;
|
||||
; push ebp
|
||||
; stdcall [aSetpos],[hPlugin],0,POSEND
|
||||
; pop ebp
|
||||
; add [numbytes],eax
|
||||
|
||||
|
||||
|
||||
;unpack
|
||||
; void __stdcall GetFiles(HANDLE hPlugin, int NumItems, void* items[], void* addfile, void* adddir);
|
||||
push ebp
|
||||
stdcall [aGetFiles], [hPlugin], -1, 0, myAddFile, myAddDir
|
||||
pop ebp
|
||||
|
||||
;jmp @f
|
||||
; .str1 db '/LICENSE.txt',0
|
||||
;@@:
|
||||
|
||||
;HANDLE __stdcall open(HANDLE hPlugin, const char* filename, int mode);
|
||||
;Žâªàëâì ä ©« filename. <20> à ¬¥âà mode § १¥à¢¨à®¢ ¨ ¢ ⥪ã饩 ¢¥àᨨ kfar ¢á¥£¤ à ¢¥ 1.
|
||||
; push ebp
|
||||
; stdcall [aOpen], [hPlugin], .str1, O_READ
|
||||
; pop ebp
|
||||
|
||||
; mov [hFile],eax
|
||||
;unsigned __stdcall read(HANDLE hFile, void* buf, unsigned size);
|
||||
;—⥨¥ size ¡ ©â ¢ ¡ãä¥à buf ¨§ ä ©« hFile, à ¥¥ ®âªàë⮣® ç¥à¥§ open.
|
||||
;size ªà ⥠512 ¡ ©â
|
||||
;‚®§¢à é ¥¬®¥ § 票¥: ç¨á«® ¯à®ç¨â ëå ¡ ©â, -1 ¯à¨ ®è¨¡ª¥.
|
||||
; push ebp
|
||||
; stdcall [aRead], [hFile], copy_buf, SIZE_COPY_BUF
|
||||
; pop ebp
|
||||
;
|
||||
; mcall 70, fsWrite
|
||||
;void __stdcall close(HANDLE hFile);
|
||||
push ebp
|
||||
stdcall [aClose], [hFile]
|
||||
mov [bWinChild],0
|
||||
pop ebp
|
||||
|
||||
push ebp
|
||||
stdcall [aClosePlugin], [hPlugin]
|
||||
mov [bWinChild],0
|
||||
|
||||
mov [fsRunNotifyOK.param],strUnpackOk
|
||||
mcall 70,fsRunNotifyOK
|
||||
pop ebp
|
||||
ret ;SUCCESS
|
||||
|
||||
|
||||
.errNotFound:
|
||||
; stdcall SimpleSayErr,strNotFound
|
||||
mov [bWinChild],0
|
||||
mov [fsRunNotifyOK.param],strUnpackFault
|
||||
mcall 70,fsRunNotifyOK
|
||||
ret
|
||||
|
||||
.errNotSupp:
|
||||
mov eax,[fsNewDir.path]
|
||||
mov [fsDelDir.path],eax
|
||||
mcall 70, fsDelDir
|
||||
|
||||
mov [bWinChild],0
|
||||
mov [fsRunNotifyOK.param],strUnpackFault
|
||||
mcall 70,fsRunNotifyOK
|
||||
ret
|
||||
|
||||
.errNullInp:
|
||||
mov [redInput],1
|
||||
mov [bWinChild],0
|
||||
ret
|
||||
endp
|
||||
|
||||
|
||||
proc Exception param1:dword
|
||||
stdcall SimpleSayErr,strErrorExc
|
||||
ret
|
||||
endp
|
||||
|
||||
proc debugInt3
|
||||
dps '<27> ¨ª !!!!!!!!!!!!!!!!!!!!!!!!!'
|
||||
dnl
|
||||
int3
|
||||
ret
|
||||
endp
|
||||
|
||||
|
||||
proc calcSizeArch hPlugin:dword
|
||||
locals
|
||||
bdwk rb 560
|
||||
endl
|
||||
;int __stdcall ReadFolder(HANDLE hPlugin, unsigned dirinfo_start,
|
||||
; unsigned dirinfo_size, void* dirdata);
|
||||
int3
|
||||
push ebp
|
||||
lea eax,[bdwk]
|
||||
stdcall [aReadFolder], [hPlugin],1,560,eax
|
||||
pop ebp
|
||||
|
||||
ret
|
||||
endp
|
||||
;-------------------------------------------------------------------------------
|
||||
;-------------------------------------------------------------------------------
|
||||
;-------------------------------------------------------------------------------
|
||||
|
||||
;SayErr int num_strings, const char* strings[],
|
||||
; int num_buttons, const char* buttons[]);
|
||||
|
||||
proc SayErr num_strings:dword, strings:dword,num_buttons:dword, buttons:dword
|
||||
pushad
|
||||
cmp [num_strings],1
|
||||
je @f
|
||||
m2m [errmess0], strErrorExc
|
||||
jmp .l1
|
||||
@@:
|
||||
mov ebx,[strings]
|
||||
m2m [errmess0], dword [ebx]
|
||||
.l1:
|
||||
mcall 51,1,threadSayErr,stackDlg
|
||||
popad
|
||||
mov eax,1
|
||||
ret
|
||||
endp
|
||||
|
||||
proc SimpleSayErr str:dword
|
||||
pushad
|
||||
m2m [errmess0],[str]
|
||||
mcall 51,1,threadSayErr,stackDlg
|
||||
popad
|
||||
ret
|
||||
endp
|
||||
|
||||
|
||||
proc threadSayErr
|
||||
mcall 40, 111b+0C000000h
|
||||
.wm_redraw:
|
||||
mcall 12, 1
|
||||
mcall 48, 3, sc, sizeof.system_colors
|
||||
mov edx, [sc.work]
|
||||
or edx, 0x33000000
|
||||
mcall 0, <220,420>, <220,110>, , , title
|
||||
|
||||
mov ecx,[sc.work_text]
|
||||
or ecx,90000000h
|
||||
mov edx,[errmess0]
|
||||
mcall 4, <15,11>
|
||||
|
||||
mcall 8, <105,100>,<45,25>,1,[sc.work_button]
|
||||
mov ecx,[sc.work_button_text]
|
||||
or ecx,90000000h
|
||||
mcall 4, <147,51>, , strOk
|
||||
|
||||
mcall 12, 2
|
||||
|
||||
.still:
|
||||
mcall 10
|
||||
cmp eax, 1
|
||||
je .wm_redraw
|
||||
cmp eax, 2
|
||||
je .wm_key
|
||||
cmp eax, 3
|
||||
je .wm_button
|
||||
jmp .still
|
||||
|
||||
.wm_button:
|
||||
mcall 17
|
||||
|
||||
cmp ah, 1
|
||||
je .exit
|
||||
jmp .still
|
||||
|
||||
.wm_key:
|
||||
mcall 2
|
||||
jmp .still
|
||||
.exit:
|
||||
mcall -1
|
||||
endp
|
||||
|
||||
;-------------------------------------------------------------------------------
|
||||
;-------------------------------------------------------------------------------
|
||||
;-------------------------------------------------------------------------------
|
||||
; "enter password" dialog for KFar
|
||||
;password_dlg:
|
||||
; dd 1 ; use standard dialog colors
|
||||
; dd -1 ; center window by x
|
||||
; dd -1 ; center window by y
|
||||
;.width dd ? ; width (will be filled according to current console width)
|
||||
; dd 2 ; height
|
||||
; dd 4, 2 ; border size
|
||||
; dd aEnterPasswordTitle ; title
|
||||
; dd ? ; colors (will be set by KFar)
|
||||
; dd 0 ; used internally by dialog manager, ignored
|
||||
; dd 0, 0 ; reserved for DlgProc
|
||||
; dd 2 ; 2 controls
|
||||
;; the string "enter password"
|
||||
; dd 1 ; type: static
|
||||
; dd 1,0 ; upper-left position
|
||||
;.width1 dd ?,0 ; bottom-right position
|
||||
; dd aEnterPassword ; data
|
||||
; dd 0 ; flags
|
||||
;; editbox for password
|
||||
; dd 3 ; type: edit
|
||||
; dd 1,1 ; upper-left position
|
||||
;.width2 dd ?,0 ; bottom-right position
|
||||
; dd password_data ; data
|
||||
; dd 2Ch ; flags
|
||||
|
||||
|
||||
|
||||
proc DialogBox dlgInfo:dword
|
||||
pushad
|
||||
mov ebx,[dlgInfo]
|
||||
mov eax,[ebx+19*4]
|
||||
mov [forpassword],eax
|
||||
mov byte[eax], 0
|
||||
mov [stateDlg], 0
|
||||
mcall 51,1,threadDialogBox,stackDlg
|
||||
|
||||
;wait thread...
|
||||
@@: cmp [stateDlg],0
|
||||
jne @f
|
||||
mcall 5,1
|
||||
jmp @b
|
||||
@@:
|
||||
popad
|
||||
cmp [stateDlg], 1
|
||||
jne @f
|
||||
xor eax, eax
|
||||
ret
|
||||
@@:
|
||||
or eax, -1
|
||||
ret
|
||||
endp
|
||||
|
||||
proc threadDialogBox
|
||||
|
||||
mcall 40, 100111b+0C000000h
|
||||
mov eax,[forpassword]
|
||||
mov [edtPassword+4*9],eax
|
||||
xor eax,eax
|
||||
mov dword[edtPassword.size], eax
|
||||
mov dword[edtPassword.pos], eax
|
||||
|
||||
.wm_redraw:
|
||||
mcall 12, 1
|
||||
mcall 48, 3, sc, sizeof.system_colors
|
||||
mov edx, [sc.work]
|
||||
or edx, 0x33000000
|
||||
mcall 0, <200,320>, <200,140>, , , title
|
||||
|
||||
edit_boxes_set_sys_color edtPack,endEdits,sc
|
||||
stdcall [edit_box_draw],edtPassword
|
||||
|
||||
|
||||
mov ecx,[sc.work_text]
|
||||
or ecx,90000000h
|
||||
mcall 4, <56,12>, , strGetPass
|
||||
|
||||
mcall 8, <70,80>,<74,22>,2,[sc.work_button]
|
||||
mov ecx,[sc.work_button_text]
|
||||
or ecx,90000000h
|
||||
mcall 4, <103,79>, , strOk
|
||||
|
||||
mcall 8, <165,80>,<74,22>,1,[sc.work_button]
|
||||
mov ecx,[sc.work_button_text]
|
||||
or ecx,90000000h
|
||||
mcall 4, <182,79>, , strCancel
|
||||
|
||||
|
||||
mcall 12, 2
|
||||
|
||||
.still:
|
||||
mcall 10
|
||||
cmp eax, 1
|
||||
je .wm_redraw
|
||||
cmp eax, 2
|
||||
je .wm_key
|
||||
cmp eax, 3
|
||||
je .wm_button
|
||||
cmp eax, 6
|
||||
je .wm_mouse
|
||||
|
||||
jmp .still
|
||||
|
||||
.wm_key:
|
||||
mcall 2
|
||||
stdcall [edit_box_key],edtPassword
|
||||
jmp .still
|
||||
|
||||
|
||||
.wm_button:
|
||||
mcall 17
|
||||
|
||||
cmp ah, 2 ;OK
|
||||
jne @f
|
||||
mov [stateDlg],1
|
||||
jmp .exit
|
||||
@@:
|
||||
|
||||
cmp ah, 1 ;Close window or Cancel
|
||||
jne .still
|
||||
mov [stateDlg],2
|
||||
jmp .exit
|
||||
|
||||
.wm_mouse:
|
||||
stdcall [edit_box_mouse],edtPassword
|
||||
|
||||
|
||||
jmp .still
|
||||
|
||||
.exit:
|
||||
mcall -1
|
||||
endp
|
||||
|
||||
|
||||
;-- DATA -------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
sc system_colors
|
||||
|
||||
|
||||
title db 'uNZ v0.1 alpha',0
|
||||
bWinChild db 0 ;1 - ¤®ç¥à¥¥ ®ª® ¥áâì, £« ¢®¥ ®ª® ¥ ¤®«¦® ॠ£¨à®¢ âì
|
||||
redInput db 0 ;1 - ¯®¤á¢¥â¨âì ªà áë¬ ¤¯¨áì
|
||||
|
||||
|
||||
if lang eq ru
|
||||
strGo db '<27> ᯠª®¢ âì',0
|
||||
strInp db '€à娢',0
|
||||
strPath db 'Šã¤ ',0
|
||||
else
|
||||
strGo db 'Unpack',0
|
||||
strInp db 'Pack',0
|
||||
strPath db 'Wohin',0
|
||||
strError db 'Error',0
|
||||
strErrorExc db 'Unrecognized error',0
|
||||
strOk db 'OK',0
|
||||
strGetPass db 'Password:',0
|
||||
strCancel db 'Cancel',0
|
||||
strUnpackOk db 'Unpacked successfuly',0
|
||||
strUnpackFault db 'Unpacked fault',0
|
||||
strNotSupport db 'Format not support',0
|
||||
strNotFound db 'File not found',0
|
||||
strNull db 0
|
||||
end if
|
||||
|
||||
|
||||
strDots db '..',0
|
||||
|
||||
;--------
|
||||
; int __stdcall SayErr(int num_strings, const char* strings[],
|
||||
; int num_buttons, const char* buttons[]);
|
||||
; int __stdcall DialogBox(DLGDATA* dlg);
|
||||
|
||||
forpassword rd 1
|
||||
stateDlg dd 0 ;0 - in process, 1 - button ok, 2 - button cancel
|
||||
errmess0 dd strErrorExc
|
||||
|
||||
|
||||
kfar_info:
|
||||
dd .size
|
||||
dd version_dword
|
||||
dd open
|
||||
dd open2
|
||||
dd read
|
||||
dd -1 ; write: to be implemented
|
||||
dd seek
|
||||
dd tell
|
||||
dd -1 ; flush: to be implemented
|
||||
dd filesize
|
||||
dd close
|
||||
dd xpgalloc
|
||||
dd xpgrealloc
|
||||
dd pgfree
|
||||
dd getfreemem
|
||||
dd debugInt3;libini_alloc
|
||||
dd debugInt3;libini_realloc
|
||||
dd debugInt3;libini_free
|
||||
dd debugInt3;menu
|
||||
dd debugInt3;menu_centered_in
|
||||
dd DialogBox;DialogBox
|
||||
dd SayErr ;SayErr
|
||||
dd debugInt3;Message
|
||||
dd 0 ;cur_width
|
||||
.size = $ - kfar_info
|
||||
;--------
|
||||
|
||||
|
||||
iFiles dd 0 ;ª®«¨ç¥á⢮ ¢ë£à㦠¥¬ëå ä ©«®¢
|
||||
endPointer dd buffer
|
||||
|
||||
|
||||
fsZip:
|
||||
.cmd dd 5
|
||||
dd 0
|
||||
dd 0
|
||||
.size dd 0
|
||||
.buf dd bdvkPack
|
||||
db 0
|
||||
dd fInp
|
||||
|
||||
fsZipRead:
|
||||
.cmd dd 0
|
||||
dd 0
|
||||
dd 0
|
||||
.size dd 1024
|
||||
.buf dd filedata_buffer
|
||||
db 0
|
||||
dd fInp
|
||||
|
||||
|
||||
fsWrite:
|
||||
.cmd dd 2 ;2 rewrite, 3 - write
|
||||
.pos dd 0
|
||||
.hpos dd 0
|
||||
.size dd SIZE_COPY_BUF
|
||||
.buf dd copy_buf
|
||||
db 0
|
||||
.path dd 0
|
||||
|
||||
|
||||
fsNewDir:
|
||||
.cmd dd 9
|
||||
dd 0
|
||||
dd 0
|
||||
dd 0
|
||||
dd 0
|
||||
db 0
|
||||
.path dd 0
|
||||
|
||||
fsDelDir:
|
||||
.cmd dd 8
|
||||
dd 0
|
||||
dd 0
|
||||
dd 0
|
||||
dd 0
|
||||
db 0
|
||||
.path dd 0
|
||||
|
||||
|
||||
|
||||
fsRunNotifyOK:
|
||||
.cmd dd 7
|
||||
dd 0
|
||||
.param dd strUnpackOk
|
||||
.size dd 0
|
||||
.buf dd 0
|
||||
db '/sys/@notify',0
|
||||
|
||||
|
||||
|
||||
edtPack edit_box 200,70,11 ,0FFFFFFh,06F9480h,0FFh,0h,0x90000000,255,\
|
||||
fInp, mouse_dd,0,0,0
|
||||
edtUnpPath edit_box 200,70,33,0FFFFFFh,06F9480h,0FFh,0h,0x90000000,255, \
|
||||
pathOut, mouse_dd,0,0,0
|
||||
edtPassword edit_box 200,56,40,0FFFFFFh,06F9480h,0FFh,0h,0x90000000,255, \
|
||||
password, mouse_dd,0,0,0
|
||||
endEdits:
|
||||
|
||||
;-------------------------------------------------------------------------------
|
||||
OpenDialog_data:
|
||||
.type dd 0 ;0-open, 1-save, 2-select folder
|
||||
.procinfo dd RBProcInfo ;+4
|
||||
.com_area_name dd communication_area_name ;+8
|
||||
.com_area dd 0 ;+12
|
||||
.opendir_pach dd temp_dir_pach ;+16
|
||||
.dir_default_pach dd communication_area_default_pach ;+20
|
||||
.start_path dd open_dialog_path ;+24
|
||||
.draw_window dd winRedraw ;+28
|
||||
.status dd 0 ;+32
|
||||
.openfile_pach dd ODAreaPath; ;+36
|
||||
.filename_area dd 0; ;+40
|
||||
.filter_area dd Filter
|
||||
.x:
|
||||
.x_size dw 420 ;+48 ; Window X size
|
||||
.x_start dw 100 ;+50 ; Window X position
|
||||
.y:
|
||||
.y_size dw 320 ;+52 ; Window y size
|
||||
.y_start dw 100 ;+54 ; Window Y position
|
||||
|
||||
communication_area_name:
|
||||
db 'FFFFFFFF_open_dialog',0
|
||||
open_dialog_path:
|
||||
db '/sys/File managers/opendial',0
|
||||
|
||||
communication_area_default_pach:
|
||||
db '/sys',0
|
||||
|
||||
Filter dd 0
|
||||
|
||||
|
||||
; int __stdcall ReadFolder(HANDLE hPlugin,
|
||||
; unsigned dirinfo_start, unsigned dirinfo_size, void* dirdata);
|
||||
; void __stdcall ClosePlugin(HANDLE hPlugin);
|
||||
; bool __stdcall SetFolder(HANDLE hPlugin,
|
||||
; const char* relative_path, const char* absolute_path);
|
||||
; void __stdcall GetOpenPluginInfo(HANDLE hPlugin, OpenPluginInfo* info);
|
||||
; void __stdcall GetFiles(HANDLE hPlugin, int NumItems, void* items[],
|
||||
; void* addfile, void* adddir);
|
||||
; bool __stdcall addfile(const char* name, void* bdfe_info, HANDLE hFile);
|
||||
; bool __stdcall adddir(const char* name, void* bdfe_info);
|
||||
; int __stdcall getattr(HANDLE hPlugin, const char* filename, void* info);
|
||||
; HANDLE __stdcall open(HANDLE hPlugin, const char* filename, int mode);
|
||||
; void __stdcall setpos(HANDLE hFile, __int64 pos);
|
||||
; unsigned __stdcall read(HANDLE hFile, void* buf, unsigned size);
|
||||
; void __stdcall close(HANDLE hFile);
|
||||
IMPORTS:
|
||||
library archiver, 'archiver.obj',\
|
||||
box_lib ,'box_lib.obj',\
|
||||
proc_lib,'proc_lib.obj'
|
||||
|
||||
import archiver,\
|
||||
aPluginLoad , 'plugin_load',\
|
||||
aOpenFilePlugin , 'OpenFilePlugin',\
|
||||
aClosePlugin , 'ClosePlugin',\
|
||||
aReadFolder , 'ReadFolder',\
|
||||
aSetFolder , 'SetFolder',\
|
||||
aGetFiles , 'GetFiles',\
|
||||
aGetOpenPluginInfo , 'GetOpenPluginInfo',\
|
||||
aGetattr , 'getattr',\
|
||||
aOpen , 'open',\
|
||||
aRead , 'read',\
|
||||
aSetpos , 'setpos',\
|
||||
aClose , 'close',\
|
||||
aDeflateUnpack , 'deflate_unpack',\
|
||||
aDeflateUnpack2 , 'deflate_unpack2'
|
||||
|
||||
import proc_lib,\
|
||||
OpenDialog_Init ,'OpenDialog_init',\
|
||||
OpenDialog_Start ,'OpenDialog_start'
|
||||
import box_lib,\
|
||||
edit_box_draw ,'edit_box',\
|
||||
edit_box_key ,'edit_box_key',\
|
||||
edit_box_mouse ,'edit_box_mouse'
|
||||
|
||||
|
||||
IncludeIGlobals
|
||||
|
||||
;-- UDATA -----------------------------------------------------------------------------
|
||||
init_end:
|
||||
align 16
|
||||
IncludeUGlobals
|
||||
|
||||
|
||||
;params db 'unz -o "fil epar1" -f "arch1.txt" -f "ar ch2.txt" file1',0
|
||||
;params db 'unz -o "fil epar1" -f arch1.txt -f "ar ch2.txt" file1',0
|
||||
;params db '/hd0/1/unz/xboot-1-0-build-14-en-win.zip',0
|
||||
;rb 4096
|
||||
|
||||
fInp rb 1024
|
||||
pathOut rb 1024
|
||||
files rd 256
|
||||
password rb 256
|
||||
|
||||
fZipInfo rb 40
|
||||
|
||||
mouse_dd rd 1
|
||||
RBProcInfo rb 1024
|
||||
temp_dir_pach rb 1024
|
||||
ODAreaPath rb 1024
|
||||
|
||||
|
||||
|
||||
;--------
|
||||
|
||||
copy_buf rb SIZE_COPY_BUF
|
||||
|
||||
execdata rb 1024
|
||||
execdataend:
|
||||
|
||||
filedata_buffer_size = 1024
|
||||
filedata_buffer rb filedata_buffer_size
|
||||
|
||||
CopyDestEditBuf rb 12+512+1
|
||||
.length = $ - CopyDestEditBuf - 13
|
||||
|
||||
bdvkPack rb 560
|
||||
|
||||
;--------
|
||||
|
||||
buffer rb 4096 ;for string of file name or extract
|
||||
params rb 4096
|
||||
|
||||
rb 1024
|
||||
stackUnpack:
|
||||
|
||||
rb 1024
|
||||
stackDlg:
|
||||
|
||||
rb 1024
|
||||
stack_top:
|
||||
|
||||
end_mem:
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user