Subversion Repositories Kolibri OS

Rev

Rev 8900 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
7113 GerdtR 1
;unz - распаковщик, использующий archiver.obj. Поддерживает zip и 7z.
2
 
3
;unz [-o output path] [-f file for unpack] [-f ...] [-h] file.zip
4
;-h - hide GUI. If params is empty - do exit.
5
 
6
;unz -o /hd0/1/arci -f text1.txt file.zip -unpack in folder only file text1.txt
7
;or
8
;unz -o "/hd0/1/arci" -f "text1.txt" text2.txt "file.zip" -unpack in folder only file text1.txt and text2.txt
9
 
10
 
11
;НЕ РЕАЛИЗОВАННО
12
;unz -n "namezone" "file.zip"  - open packed file, write list files of main folder in namezone
13
;namezone:
14
;dd 0 - если именнованая зона занята, то 1
15
;dd cmd - 0 нет команды
16
;         1 получить список файлов
17
;         2 получить файл
18
;         3 установить текуший каталог в архиве
19
;         4 завершить работу
20
;data - данные, зависит от комманды
21
; 1 получить список файлов
22
; input
23
;   none
24
; output
25
;   dd numfiles - количество файлов и папок в текущем каталоге
26
;   strz file1...fileN - список строк, разделённых 0
27
; 2 получить файл
28
; input
29
;   dd num bytes
30
;   strz filename (file1.txt of /fold1/file1.txt)
31
; output
32
;   dd num bytes
33
;   data
34
 
35
use32
36
org    0
37
db     'MENUET01'
38
dd     1, start, init_end, end_mem, stack_top, params,	0
39
 
40
 
41
include 'lang.inc'
42
include '../../macros.inc'
43
include '../../proc32.inc'
44
include '../../develop/libraries/box_lib/trunk/box_lib.mac'
45
include '../../dll.inc'
7538 leency 46
;include '../../debug.inc'
7113 GerdtR 47
include 'debug.inc'
48
 
7538 leency 49
version equ '0.70'
50
version_dword equ 0*10000h + 70
7113 GerdtR 51
 
7157 leency 52
WIN_W = 400
7113 GerdtR 53
SIZE_COPY_BUF = 1024*1024*2
7538 leency 54
MM_MAX_BLOCKS equ 1024
7113 GerdtR 55
 
7538 leency 56
 
7113 GerdtR 57
virtual at 0
58
kfar_info_struc:
59
.lStructSize	dd	?
60
.kfar_ver	dd	?
61
.open		dd	?
62
.open2		dd	?
63
.read		dd	?
64
.write		dd	?
65
.seek		dd	?
66
.tell		dd	?
67
.flush		dd	?
68
.filesize	dd	?
69
.close		dd	?
70
.pgalloc	dd	?
71
.pgrealloc	dd	?
72
.pgfree 	dd	?
73
.getfreemem	dd	?
74
.pgalloc2	dd	?
75
.pgrealloc2	dd	?
76
.pgfree2	dd	?
77
.menu		dd	?
78
.menu_centered_in dd	?
79
.DialogBox	dd	?
80
.SayErr 	dd	?
81
.Message	dd	?
82
.cur_console_size dd	?
83
end virtual
84
 
85
 
86
 
7538 leency 87
;--  CODE  -------------------------------------------------------------------
7113 GerdtR 88
 
89
include 'parse.inc'
90
include 'fs.inc'
7538 leency 91
include 'file_tree.inc'
92
include 'memory_manager.inc'
93
include 'dialogs.inc'
7113 GerdtR 94
 
95
 
96
start:
7538 leency 97
;dnl
98
;dpsP params
99
;dnl
7113 GerdtR 100
	mcall	68, 11
101
	mcall	40, 100111b + 0C0000000h
102
	stdcall dll.Load, IMPORTS
103
	test	eax, eax
104
	jnz	exit
105
	mov	[pathOut],0
106
 
107
;----------------------------
108
	;1. find input file, clear
109
	;2. find -o, copy data, clear
110
	;3. find -f, add pointer, copy data, clear
111
	;4. find -c, check variable, clear
112
;1.
113
	call	getLastParam
114
	test	eax, eax
115
	je	wm_redraw
116
	dec	eax
117
	je	.arbeit
118
	jmp	errorParsing
119
 
120
.arbeit:
121
;2.
7538 leency 122
	call	getParamOutPath
7113 GerdtR 123
	cmp	eax, 2
124
	je	errorParsing
125
 
126
;3.
127
 
128
   @@:
129
	mov	eax, [iFiles]
130
	shl	eax, 2
131
	add	eax, files
132
	m2m	dword[eax], dword[endPointer]
133
	stdcall getParam, '-f'
134
	cmp	eax, 2
135
	je	errorParsing
136
	inc	[iFiles]
137
	cmp	eax, 1
138
	je	@b
139
 
140
;4.
141
	mov	edi, params
142
	mov	ax,'-h'
143
@@:	cmp	word [edi], ax
144
	je	.check
145
	inc	edi
146
	cmp	edi, params+1024
147
	je	@f
148
	cmp	byte[edi],0
149
	je	@f
150
	jmp	@b
151
.check:
7538 leency 152
	call  startUnpack
153
	mcall -1
7113 GerdtR 154
@@:
7538 leency 155
 
7113 GerdtR 156
	stdcall [OpenDialog_Init],OpenDialog_data
157
 
158
;init edit fields  --------------
159
	xor	al,al
160
	mov	edi,fInp
161
	mov	ecx,1024
162
	repne	scasb
163
	inc	ecx
164
	mov	eax,1024
165
	sub	eax,ecx
166
	mov	dword[edtPack.size],eax
167
	mov	dword[edtPack.pos],eax
168
 
169
	xor	al, al
170
	mov	edi, pathOut
171
	mov	ecx, 1024
172
	repne	scasb
173
	inc	ecx
174
	mov	eax, 1024
175
	sub	eax, ecx
176
	mov	dword[edtUnpPath.size], eax
177
	mov	dword[edtUnpPath.pos], eax
178
 
179
;main loop --------------------
180
wm_redraw:
181
	call winRedraw
182
 
183
still:
184
	mcall	10
185
	cmp	eax, 1
186
	je	wm_redraw
187
	cmp	eax, 2
188
	je	wm_key
189
	cmp	eax, 3
190
	je	wm_button
191
	cmp	eax, 6
192
	je	wm_mouse
193
 
194
	jmp	still
195
 
196
wm_key:
197
	mcall	2
198
	cmp	[bWinChild],0
199
	jne	still
200
 
201
	stdcall [edit_box_key],edtPack
202
	stdcall [edit_box_key],edtUnpPath
203
 
204
	jmp	still
205
 
206
 
207
wm_button:
208
	mcall	17
209
	cmp	[bWinChild],0
210
	jne	still
211
 
212
	cmp	ah, 3
213
	jne	@f
214
	call selectInput
215
	jmp	wm_redraw
216
    @@:
217
	cmp	ah, 4
218
	jne	@f
219
	call selectOutFold
220
	jmp	wm_redraw
221
    @@:
222
 
223
	cmp	ah, 2
224
	jne	@f
7538 leency 225
	mcall	51,1,startUnpack,stackUnpack
226
	mov	[bWinChild],1
227
	;call   startUnpack
7113 GerdtR 228
	jmp	wm_redraw
229
    @@:
230
 
231
	cmp	ah, 1
232
	je	exit
233
	jmp	still
234
 
235
wm_mouse:
236
	cmp	[bWinChild],0
237
	jne	still
238
	stdcall [edit_box_mouse],edtPack
239
	stdcall [edit_box_mouse],edtUnpPath
240
	jmp	still
241
 
242
exit:
243
	mcall	-1
244
 
245
errorParsing:
7538 leency 246
dph edx
247
 
248
	dps ' errorParsing'
7113 GerdtR 249
	mcall	-1
250
 
251
;--- functions ------------------------------------------------------------------
252
 
253
proc winRedraw
254
	mcall 12, 1
255
	mcall 48, 3, sc, sizeof.system_colors
256
	mov   edx, [sc.work]
7157 leency 257
	or	  edx, 0x34000000
258
	mcall 0, <200,WIN_W>, <200,130>, , , title
259
	mcall 8, <100,100>,<65,25>,2,[sc.work_button]
260
	mcall 8, <(WIN_W-52),33>,<10,20>,3,[sc.work_button]
261
	mcall 8, <(WIN_W-52),33>,<35,20>,4,[sc.work_button]
7113 GerdtR 262
 
263
	edit_boxes_set_sys_color edtPack,endEdits,sc
264
	stdcall [edit_box_draw],edtPack
265
	stdcall [edit_box_draw],edtUnpPath
266
 
7538 leency 267
 
7113 GerdtR 268
	cmp	[redInput],0
269
	jne	@f
270
	mov	ecx,[sc.work_text]
271
	or	ecx,90000000h
272
	jmp	.l1
273
      @@:
274
	mov	 ecx,90FF0000h
275
     .l1:
7157 leency 276
	mcall 4, <15,16>, , strInp
7113 GerdtR 277
	mov	ecx,[sc.work_text]
278
	or	ecx,90000000h
7157 leency 279
	mcall 4, <15,37>, , strPath
7113 GerdtR 280
	mov	ecx,[sc.work_button_text]
281
	or	ecx,90000000h
7157 leency 282
if lang eq ru
283
	mcall 4, <107,70>, , strGo
284
else
285
	mcall 4, <127,70>, , strGo
286
end if
287
	mcall 4, <(WIN_W-47),12>, , strDots
288
	mcall 4, <(WIN_W-47),37>, , strDots
7113 GerdtR 289
 
290
	mcall 12, 2
291
	ret
292
endp
293
 
294
;region
295
selectInput:
296
	mov	[OpenDialog_data.type],0
297
	stdcall [OpenDialog_Start],OpenDialog_data
298
	mov	edi,ODAreaPath
299
	xor	al,al
300
	or	ecx,-1
301
	repne	scasb
302
	sub	edi,ODAreaPath
303
	dec	edi
304
	mov	dword[edtPack+12*4],edi
305
	mov	ecx,edi
306
	inc	ecx
307
	mov	edi,fInp
308
	mov	esi,ODAreaPath
309
	rep	movsb
310
	mov	[redInput],0
311
	ret
312
;endregion
313
 
314
;region
315
selectOutFold:
316
	mov	[OpenDialog_data.type],2
317
	stdcall [OpenDialog_Start],OpenDialog_data
318
	mov	edi,ODAreaPath
319
	xor	al,al
320
	or	ecx,-1
321
	repne	scasb
322
	sub	edi,ODAreaPath
323
	dec	edi
324
	mov	dword[edtUnpPath+12*4],edi
325
	mov	ecx,edi
326
	inc	ecx
327
	mov	edi,pathOut
328
	mov	esi,ODAreaPath
329
	rep	movsb
330
	ret
331
;endregion
332
 
333
 
334
;-------------------------------------------------------------------------------
335
 
336
allfiles dd 0
337
succfiles dd 0
338
numbytes dd 0
339
 
340
proc startUnpack
341
locals
342
  paramUnp	rd 1
343
  sizeUnpack	rd 1
344
  hFile rd 1
345
  hFileZip rd 1
346
  hPlugin rd 1
347
  pathFold rb 256
348
endl
349
;if input not corrected
350
	cmp	[fInp],byte 0
351
	je	.errNullInp
352
 
353
    ;    mcall   68, 24, Exception, 0FFFFFFFFh ;??
354
;init plugin
355
	push	ebp
356
	stdcall [aPluginLoad],kfar_info
357
	pop	ebp
358
 
359
 
360
;set current directory, create folder
361
	cmp	[pathOut],0
362
	jne	@f
363
	lea	eax,[pathFold]
364
	stdcall cpLastName, fInp, eax
365
	lea	eax,[pathFold]
366
	mov	[fsNewDir.path],eax
367
	mcall	70, fsNewDir
368
	mov	ecx, [fsNewDir.path]
369
 
370
	mcall	30,4,,1
371
	jmp	.n
372
@@:
373
	mcall	30,4,pathOut,1
374
.n:
375
 
376
;open and read first 1KB
377
	stdcall open, fInp, O_READ
378
	mov	[hFileZip], eax
379
	mcall	70,fsZip
380
	test	eax,eax
381
	jnz	.errNotFound
382
	mcall	70,fsZipRead
383
 
384
 
385
;open pack
386
	push	ebp
387
	stdcall [aOpenFilePlugin],[hFileZip],bdvkPack,filedata_buffer,filedata_buffer_size ,0 ,0 , fInp
388
	pop	ebp
389
 
390
	test	eax,eax
391
	jnz	@f
392
	cmp	ebx,0		;;/ КОСТЫЛЬ!!!!
393
	je	 .errNotFound	;;значение ebx получено опытным путём.
7538 leency 394
	cmp	ebx,400h
395
	je	 .errNotSupp
7113 GerdtR 396
      @@:
397
	mov	[hPlugin],eax
398
 
399
;get num of all files
7538 leency 400
       ; stdcall calcSizeArch,[hPlugin]
401
	push	ebp
402
	stdcall [aSetFolder],[hPlugin], .strRoot,0
403
	pop	ebp
7113 GerdtR 404
;unpack
405
;       void __stdcall GetFiles(HANDLE hPlugin, int NumItems, void* items[], void* addfile, void* adddir);
406
	push	ebp
407
	stdcall [aGetFiles], [hPlugin], -1, 0, myAddFile, myAddDir
408
	pop	ebp
409
 
7538 leency 410
jmp @f
411
   .str1 db '/LICENSE.txt',0
412
   .strRoot db '.svn',0
413
@@:
7113 GerdtR 414
 
415
;HANDLE __stdcall open(HANDLE hPlugin, const char* filename, int mode);
416
;Открыть файл filename. Параметр mode зарезервирован и в текущей версии kfar всегда равен 1.
417
 ;       push    ebp
418
 ;       stdcall [aOpen], [hPlugin], .str1, O_READ
419
 ;       pop     ebp
420
 
421
 ;       mov     [hFile],eax
422
;unsigned __stdcall read(HANDLE hFile, void* buf, unsigned size);
423
;Чтение size байт в буфер buf из файла hFile, ранее открытого через open.
424
;size кратен 512 байт
425
;Возвращаемое значение: число прочитанных байт, -1 при ошибке.
426
 ;       push    ebp
427
 ;       stdcall [aRead], [hFile], copy_buf, SIZE_COPY_BUF
428
 ;       pop     ebp
429
 ;
430
;        mcall   70, fsWrite
431
;void __stdcall close(HANDLE hFile);
432
	push	ebp
433
	stdcall [aClose], [hFile]
434
	mov	[bWinChild],0
435
	pop	ebp
436
 
437
	push	ebp
438
	stdcall [aClosePlugin], [hPlugin]
439
	mov	[bWinChild],0
440
 
441
	mov	[fsRunNotifyOK.param],strUnpackOk
442
	mcall	70,fsRunNotifyOK
443
	pop	ebp
444
	ret		;SUCCESS
445
 
446
 
447
.errNotFound:
448
;        stdcall SimpleSayErr,strNotFound
449
	mov	[bWinChild],0
450
	mov	[fsRunNotifyOK.param],strUnpackFault
451
	mcall	70,fsRunNotifyOK
452
	ret
453
 
454
.errNotSupp:
455
	mov	eax,[fsNewDir.path]
456
	mov	[fsDelDir.path],eax
457
	mcall	70, fsDelDir
458
 
459
	mov	[bWinChild],0
460
	mov	[fsRunNotifyOK.param],strUnpackFault
461
	mcall	70,fsRunNotifyOK
462
	ret
463
 
464
.errNullInp:
465
	mov	[redInput],1
466
	mov	[bWinChild],0
467
	ret
468
endp
469
 
470
 
471
proc Exception param1:dword
472
	stdcall SimpleSayErr,strErrorExc
473
	ret
474
endp
475
 
476
proc debugInt3
477
	dps 'Паника!!!!!!!!!!!!!!!!!!!!!!!!!'
478
	dnl
479
	int3
480
	ret
481
endp
482
 
483
 
7538 leency 484
allnumbytes dd 0
485
strBackFold db '../',0
486
 
7113 GerdtR 487
proc calcSizeArch hPlugin:dword
488
locals
489
  bdwk rb 560
7538 leency 490
  num	rd 1
7113 GerdtR 491
endl
492
;int __stdcall ReadFolder(HANDLE hPlugin, unsigned dirinfo_start,
493
;        unsigned dirinfo_size, void* dirdata);
7538 leency 494
	mov	[num],0
495
    ;    int3
496
.mainloop:
7113 GerdtR 497
	push	ebp
7538 leency 498
	lea	eax, [bdwk]
499
	stdcall [aReadFolder], [hPlugin],[num],1,eax
7113 GerdtR 500
	pop	ebp
501
 
7538 leency 502
	cmp	eax,6
503
	je	.lastFile
504
;??????????????????????????????????????????????????????????????????????????????????????????????????
505
	lea	ebx,[bdwk+0x20]      ;почему либа пишет в смещение +0x20 - неизестно
506
	test	[ebx],dword 10h
507
	jz	@f
508
;bool __stdcall SetFolder(HANDLE hPlugin, const char* relative_path,
509
;                         const char* absolute_path);
7113 GerdtR 510
 
7538 leency 511
	push	ebp
512
	lea	eax,[ebx+40]
513
dps 'Folder: '
514
dpsP eax
515
dnl
516
	stdcall [aSetFolder],[hPlugin], eax,0
7113 GerdtR 517
 
7538 leency 518
	pop	ebp
519
	stdcall calcSizeArch, [hPlugin]
520
	inc	[num]
521
	jmp	.mainloop
522
   @@:
7162 leency 523
 
7538 leency 524
	lea	ebx,[bdwk+0x20]
525
lea	eax,[ebx+40]
526
dps 'File: '
527
dpsP eax
528
dnl
529
	mov	eax,[ebx+32]
530
	add	[allnumbytes],eax
531
	inc	[num]
532
	jmp	.mainloop
7162 leency 533
 
7538 leency 534
.lastFile:
535
;        lea     ebx,[bdwk+0x20]
536
;        test    [ebx],dword 10h
537
;        jz      @f
538
;
539
;        push    ebp
540
;        lea     eax,[ebx+40]
541
;        stdcall [aSetFolder],[hPlugin], eax,0
542
;        pop     ebp
543
;        stdcall calcSizeArch, [hPlugin]
544
;    @@:
545
 
546
 
547
	push	ebp
548
	stdcall [aSetFolder],[hPlugin], strBackFold,0
549
	pop	ebp
7113 GerdtR 550
	ret
551
endp
552
 
553
 
7538 leency 554
proc rec_calcSize hPlugin:dword
555
locals
556
  bdwk rb 560
557
endl
558
;int __stdcall ReadFolder(HANDLE hPlugin, unsigned dirinfo_start,
559
;        unsigned dirinfo_size, void* dirdata);
560
;bool __stdcall SetFolder(HANDLE hPlugin, const char* relative_path, const char* absolute_path);
561
	push	ebp
562
	lea	eax,[bdwk]
563
	stdcall [aReadFolder], [hPlugin],1,560,eax
564
	pop	ebp
7113 GerdtR 565
 
566
	ret
567
endp
7538 leency 568
;-------------------------------------------------------------------------------
569
;-------------------------------------------------------------------------------
570
;-------------------------------------------------------------------------------
7113 GerdtR 571
 
7538 leency 572
hTrPlugin dd 0
7113 GerdtR 573
 
7538 leency 574
;eax - file struct for sys70
7113 GerdtR 575
 
7538 leency 576
proc rdFoldforTree
577
locals
578
  fi rd 0
579
endl
580
	cmp	[hTrPlugin],0
581
	je	.exit
582
	push	ebx edi esi
7113 GerdtR 583
 
7538 leency 584
	mov	[fi],eax
585
	push	ebp
586
	stdcall [aSetFolder],[hTrPlugin], [eax+20],0
587
	mov	ebp,[esp]
588
			  ;hPlug,startBlock,numBlocks,buffer
589
	stdcall [aReadFolder], [hTrPlugin],dword[eax+4],\
590
			dword[eax+12],dword[eax+16]
591
	pop	ebp
7113 GerdtR 592
 
7538 leency 593
	;cmp     eax,6
594
	;je      .lastFile
7113 GerdtR 595
 
7538 leency 596
	;lea     ebx,[bdwk+0x20]      ;почему либа пишет в смещение +0x20 - неизестно
7113 GerdtR 597
 
7538 leency 598
	pop	esi edi ebx
7113 GerdtR 599
.exit:
7538 leency 600
	ret
7113 GerdtR 601
endp
602
 
603
;--  DATA  -------------------------------------------------------------------
604
 
605
 
606
 
607
sc system_colors
608
 
609
 
610
bWinChild db 0	;1 - дочернее окно есть, главное окно не должно реагировать
611
redInput  db 0	;1 - подсветить красным надпись
612
 
613
if lang eq ru
7538 leency 614
 title db 'uNZ v0.2 - Распаковщик Zip и 7z',0
7113 GerdtR 615
 strGo db 'Распаковать',0
7157 leency 616
 strInp db  '    Архив',0
617
 strPath db 'Извлечь в',0
618
 strError db 'Ошибка',0
619
 strErrorExc db 'Неопознанная ошибка',0
620
 strOk	db 'OK',0
621
 strGetPass db 'Пароль',0
622
 strCancel  db 'Отмена',0
623
 strUnpackOk  db "'Успешно распаковано' -O",0
624
 strUnpackFault  db "'Ошибка распаковки' -E",0
625
 strNotSupport db "'Неподдерживаемый формат архива' -E",0
626
 strNotFound db "'Файл не найден' -E",0
7169 leency 627
else if lang eq es
7538 leency 628
 title db 'uNZ v0.2 - Desarchivador para Zip y 7z',0
7169 leency 629
 strGo db 'Desarchivar',0
630
 strInp db 'Archivar',0
631
 strPath db 'Extraer en',0
632
 strError db 'Error',0
633
 strErrorExc db 'Error desconocido',0
634
 strOk db 'OK',0
635
 strGetPass db 'Contrasena',0
636
 strCancel db 'Cancelar',0
637
 strUnpackOk db "'Extracion exitosa' -O",0
638
 strUnpackFault db "'Fallo al extraer' -E",0
639
 strNotSupport db "'El formato del archivo no es soportado' -E",0
640
 strNotFound db "'Archivo no encontrado' -E",0
7113 GerdtR 641
else
7538 leency 642
 title db 'uNZ v0.2 - Unarchiver of Zip and 7z',0
7157 leency 643
 strGo db   'Unpack',0
644
 strInp db  'Archive',0
645
 strPath db 'Extract to',0
7113 GerdtR 646
 strError db 'Error',0
647
 strErrorExc db 'Unrecognized error',0
648
 strOk	db 'OK',0
7157 leency 649
 strGetPass db 'Password',0
7113 GerdtR 650
 strCancel  db 'Cancel',0
7157 leency 651
 strUnpackOk  db "'Unpacked successfuly' -O",0
7169 leency 652
 strUnpackFault  db "'Unprack failed' -E",0
7157 leency 653
 strNotSupport db "'Archive format is not supported' -E",0
654
 strNotFound db "'File not found' -E",0
7113 GerdtR 655
end if
656
 
657
 
7538 leency 658
 
659
strDots db '...', 0
660
 
7113 GerdtR 661
;--------
662
; int __stdcall SayErr(int num_strings, const char* strings[],
663
;                      int num_buttons, const char* buttons[]);
664
; int __stdcall DialogBox(DLGDATA* dlg);
665
 
666
stateDlg dd 0 ;0 - in process, 1 - button ok, 2 - button cancel
667
errmess0 dd strErrorExc
668
 
669
 
670
kfar_info:
671
	dd	.size
672
	dd	version_dword
673
	dd	open
674
	dd	open2
675
	dd	read
676
	dd	-1	; write: to be implemented
677
	dd	seek
678
	dd	tell
679
	dd	-1	; flush: to be implemented
680
	dd	filesize
681
	dd	close
682
	dd	xpgalloc
683
	dd	xpgrealloc
684
	dd	pgfree
685
	dd	getfreemem
686
	dd	debugInt3;libini_alloc
687
	dd	debugInt3;libini_realloc
688
	dd	debugInt3;libini_free
689
	dd	debugInt3;menu
690
	dd	debugInt3;menu_centered_in
691
	dd	DialogBox;DialogBox
692
	dd	SayErr	 ;SayErr
693
	dd	debugInt3;Message
694
	dd	0	;cur_width
695
.size = $ - kfar_info
696
;--------
697
 
698
 
7538 leency 699
iFiles dd 0	;количество распаковываемых файлов
7113 GerdtR 700
endPointer dd buffer
701
 
702
 
703
fsZip:
704
.cmd	dd 5
705
	dd 0
706
	dd 0
707
.size	dd 0
708
.buf	dd bdvkPack
709
	db 0
710
	dd fInp
711
 
712
fsZipRead:
713
.cmd	dd 0
714
	dd 0
715
	dd 0
716
.size	dd 1024
717
.buf	dd filedata_buffer
718
	db 0
719
	dd fInp
720
 
721
 
722
fsWrite:
723
.cmd	dd 2	;2 rewrite, 3 - write
724
.pos	dd 0
725
.hpos	dd 0
726
.size	dd SIZE_COPY_BUF
727
.buf	dd copy_buf
728
	db 0
729
.path	dd 0
730
 
731
 
732
fsNewDir:
733
.cmd	dd 9
734
	dd 0
735
	dd 0
736
	dd 0
737
	dd 0
738
	db 0
739
.path	dd 0
740
 
741
fsDelDir:
742
.cmd	dd 8
743
	dd 0
744
	dd 0
745
	dd 0
746
	dd 0
747
	db 0
748
.path	dd 0
749
 
750
 
751
 
752
fsRunNotifyOK:
753
.cmd	dd 7
754
	dd 0
755
.param	dd strUnpackOk
756
.size	dd 0
757
.buf	dd 0
758
	db '/sys/@notify',0
759
 
760
 
761
 
7157 leency 762
edtPack     edit_box (WIN_W-100-60),100,10,0FFFFFFh,0xff,0x80ff,0h,0x90000000,\
8780 leency 763
            1024, fInp, 0,0,0,0
7157 leency 764
edtUnpPath  edit_box (WIN_W-100-60),100,35,0FFFFFFh,0xff,0x80ff,0h,0x90000000,\
8780 leency 765
            1024, pathOut, 0,0,0,0
766
edtPassword edit_box 200, 56, 40, 0FFFFFFh,0xff,0x80ff,0h,0x90000000,\
8900 dunkaist 767
            255, 0, 0, ed_focus+ed_always_focus ;+ed_pass
8780 leency 768
 
7113 GerdtR 769
endEdits:
770
 
7538 leency 771
 
772
 
7113 GerdtR 773
;-------------------------------------------------------------------------------
774
OpenDialog_data:
775
.type			dd 0	;0-open, 1-save, 2-select folder
776
.procinfo		dd RBProcInfo	    ;+4
777
.com_area_name		dd communication_area_name	;+8
778
.com_area		dd 0	;+12
779
.opendir_pach		dd temp_dir_pach	;+16
780
.dir_default_pach	dd communication_area_default_pach	;+20
781
.start_path		dd open_dialog_path	;+24
782
.draw_window		dd winRedraw		   ;+28
783
.status 		dd 0	;+32
784
.openfile_pach		dd ODAreaPath;   ;+36
785
.filename_area		dd 0;        ;+40
786
.filter_area		dd Filter
787
.x:
788
.x_size 		dw 420 ;+48 ; Window X size
789
.x_start		dw 100 ;+50 ; Window X position
790
.y:
791
.y_size 		dw 320 ;+52 ; Window y size
792
.y_start		dw 100 ;+54 ; Window Y position
793
 
794
communication_area_name:
795
	db 'FFFFFFFF_open_dialog',0
796
open_dialog_path:
797
	db '/sys/File managers/opendial',0
798
 
799
communication_area_default_pach:
800
	db '/sys',0
801
 
802
Filter	dd 0
803
 
804
 
805
; int __stdcall         ReadFolder(HANDLE hPlugin,
806
;       unsigned dirinfo_start, unsigned dirinfo_size, void* dirdata);
807
; void __stdcall        ClosePlugin(HANDLE hPlugin);
808
; bool __stdcall        SetFolder(HANDLE hPlugin,
809
;       const char* relative_path, const char* absolute_path);
810
; void __stdcall        GetOpenPluginInfo(HANDLE hPlugin, OpenPluginInfo* info);
811
; void __stdcall        GetFiles(HANDLE hPlugin, int NumItems, void* items[],
812
;       void* addfile, void* adddir);
813
;       bool __stdcall addfile(const char* name, void* bdfe_info, HANDLE hFile);
814
;       bool __stdcall adddir(const char* name, void* bdfe_info);
815
; int __stdcall         getattr(HANDLE hPlugin, const char* filename, void* info);
816
; HANDLE __stdcall      open(HANDLE hPlugin, const char* filename, int mode);
817
; void __stdcall        setpos(HANDLE hFile, __int64 pos);
818
; unsigned __stdcall    read(HANDLE hFile, void* buf, unsigned size);
819
; void __stdcall        close(HANDLE hFile);
820
IMPORTS:
821
library archiver, 'archiver.obj',\
822
	box_lib ,'box_lib.obj',\
823
	proc_lib,'proc_lib.obj'
824
 
825
import	archiver,\
826
	aPluginLoad	,      'plugin_load',\
827
	aOpenFilePlugin ,      'OpenFilePlugin',\
828
	aClosePlugin	,      'ClosePlugin',\
829
	aReadFolder	,      'ReadFolder',\
830
	aSetFolder	,      'SetFolder',\
831
	aGetFiles	,      'GetFiles',\
832
	aGetOpenPluginInfo ,   'GetOpenPluginInfo',\
833
	aGetattr	,      'getattr',\
834
	aOpen		,      'open',\
835
	aRead		,      'read',\
836
	aSetpos 	,      'setpos',\
837
	aClose		,      'close',\
838
	aDeflateUnpack	,      'deflate_unpack',\
839
	aDeflateUnpack2 ,      'deflate_unpack2'
840
 
841
import	proc_lib,\
842
	OpenDialog_Init 	,'OpenDialog_init',\
843
	OpenDialog_Start	,'OpenDialog_start'
844
import	box_lib,\
9568 IgorA 845
	edit_box_draw		,'edit_box_draw',\
7113 GerdtR 846
	edit_box_key		,'edit_box_key',\
847
	edit_box_mouse		,'edit_box_mouse'
848
 
849
 
850
IncludeIGlobals
851
 
7538 leency 852
params1 db '-o "/hd0/1/unz/pig" -h "/hd0/1/unz/abc1"',0
7113 GerdtR 853
;--  UDATA  -----------------------------------------------------------------------------
854
init_end:
855
align 16
856
IncludeUGlobals
857
 
7538 leency 858
path rb 512
7113 GerdtR 859
 
860
;params db 'unz -o "fil epar1" -f "arch1.txt" -f "ar ch2.txt" file1',0
861
;params db 'unz -o "fil epar1" -f arch1.txt -f "ar ch2.txt" file1',0
862
 
863
fInp	rb 1024
7538 leency 864
pathOut rb 1024 	;путь, куда распакуется всё
7113 GerdtR 865
files	rd 256
866
 
867
fZipInfo	 rb 40
868
 
869
RBProcInfo	rb 1024
870
temp_dir_pach	rb 1024
871
ODAreaPath	rb 1024
872
 
873
 
874
 
875
;--------
876
 
877
copy_buf rb SIZE_COPY_BUF
878
 
879
execdata rb	1024
880
execdataend:
881
 
882
filedata_buffer_size = 1024
883
filedata_buffer rb	filedata_buffer_size
884
 
885
CopyDestEditBuf 	rb	12+512+1
886
.length = $ - CopyDestEditBuf - 13
887
 
888
bdvkPack rb 560
889
 
7538 leency 890
 
891
 
892
;------------ memory_manager.inc
893
align 4
894
MM_NBlocks	rd 1  ;количество выделенных блоков памяти
895
MM_BlocksInfo	rd 2*MM_MAX_BLOCKS  ;begin,size
896
 
897
 
7113 GerdtR 898
;--------
899
 
7538 leency 900
buffer	rb 4096 ;for string of file name for extract
7113 GerdtR 901
params rb 4096
902
 
903
	rb 1024
904
stackUnpack:
905
 
906
	rb 1024
907
stackDlg:
908
 
909
	rb 1024
910
stack_top:
911
 
912
end_mem:
913