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