Subversion Repositories Kolibri OS

Rev

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