Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | Download | RSS feed

  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.  
  51.  
  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]
  252.         or        edx, 0x33000000
  253.         mcall 0, <200,320>, <200,130>, , , title
  254.         mcall 8, <113,100>,<65,25>,2,[sc.work_button]
  255.         mcall 8, <280,15>,<11,14>,3,[sc.work_button]
  256.         mcall 8, <280,15>,<33,14>,4,[sc.work_button]
  257.  
  258.         edit_boxes_set_sys_color edtPack,endEdits,sc
  259.         stdcall [edit_box_draw],edtPack
  260.         stdcall [edit_box_draw],edtUnpPath
  261.  
  262.  
  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:
  271.         mcall 4, <15,11>, , strInp
  272.         mov     ecx,[sc.work_text]
  273.         or      ecx,90000000h
  274.         mcall 4, <15,32>, , strPath
  275.         mov     ecx,[sc.work_button_text]
  276.         or      ecx,90000000h
  277.         mcall 4, <140,70>, , strGo
  278.  
  279.         mcall 12, 2
  280.         ret
  281. endp
  282.  
  283. ;region
  284. selectInput:
  285.         mov     [OpenDialog_data.type],0
  286.         stdcall [OpenDialog_Start],OpenDialog_data
  287.         mov     edi,ODAreaPath
  288.         xor     al,al
  289.         or      ecx,-1
  290.         repne   scasb
  291.         sub     edi,ODAreaPath
  292.         dec     edi
  293.         mov     dword[edtPack+12*4],edi
  294.         mov     ecx,edi
  295.         inc     ecx
  296.         mov     edi,fInp
  297.         mov     esi,ODAreaPath
  298.         rep     movsb
  299.         mov     [redInput],0
  300.         ret
  301. ;endregion
  302.  
  303. ;region
  304. selectOutFold:
  305.         mov     [OpenDialog_data.type],2
  306.         stdcall [OpenDialog_Start],OpenDialog_data
  307.         mov     edi,ODAreaPath
  308.         xor     al,al
  309.         or      ecx,-1
  310.         repne   scasb
  311.         sub     edi,ODAreaPath
  312.         dec     edi
  313.         mov     dword[edtUnpPath+12*4],edi
  314.         mov     ecx,edi
  315.         inc     ecx
  316.         mov     edi,pathOut
  317.         mov     esi,ODAreaPath
  318.         rep     movsb
  319.         ret
  320. ;endregion
  321.  
  322.  
  323. ;-------------------------------------------------------------------------------
  324.  
  325. allfiles dd 0
  326. succfiles dd 0
  327. numbytes dd 0
  328.  
  329. proc startUnpack
  330. locals
  331.   paramUnp      rd 1
  332.   sizeUnpack    rd 1
  333.   hFile rd 1
  334.   hFileZip rd 1
  335.   hPlugin rd 1
  336.   pathFold rb 256
  337. endl
  338. ;if input not corrected
  339.         cmp     [fInp],byte 0
  340.         je      .errNullInp
  341.  
  342.     ;    mcall   68, 24, Exception, 0FFFFFFFFh ;??
  343. ;init plugin
  344.         push    ebp
  345.         stdcall [aPluginLoad],kfar_info
  346.         pop     ebp
  347.  
  348.  
  349. ;set current directory, create folder
  350.         cmp     [pathOut],0
  351.         jne     @f
  352.         lea     eax,[pathFold]
  353.         stdcall cpLastName, fInp, eax
  354.         lea     eax,[pathFold]
  355.         mov     [fsNewDir.path],eax
  356.         mcall   70, fsNewDir
  357.         mov     ecx, [fsNewDir.path]
  358.  
  359.         mcall   30,4,,1
  360.         jmp     .n
  361. @@:
  362.         mcall   30,4,pathOut,1
  363. .n:
  364.  
  365. ;open and read first 1KB
  366.         stdcall open, fInp, O_READ
  367.         mov     [hFileZip], eax
  368.         mcall   70,fsZip
  369.         test    eax,eax
  370.         jnz     .errNotFound
  371.         mcall   70,fsZipRead
  372.  
  373.  
  374. ;open pack
  375.         push    ebp
  376.         stdcall [aOpenFilePlugin],[hFileZip],bdvkPack,filedata_buffer,filedata_buffer_size ,0 ,0 , fInp
  377.         pop     ebp
  378.  
  379.         test    eax,eax
  380.         jnz     @f
  381.         cmp     ebx,0           ;;/ КОСТЫЛЬ!!!!
  382.         je       .errNotFound   ;;значение ebx получено опытным путём.
  383.         cmp     ebx,400h        ;;как оно будет работать с другими версиями
  384.         je       .errNotSupp    ;;библиотеки - не ясно!
  385.       @@:
  386.         mov     [hPlugin],eax
  387.  
  388. ;get num of all files
  389. ;        stdcall calcSizeArch,[hPlugin]
  390. ;        push    ebp
  391. ;        stdcall [aReadFolder], [hPlugin]
  392. ;        pop     ebp
  393.  
  394.  
  395.  
  396. ;        push    ebp
  397. ;        stdcall [aOpen], [hPlugin], .str1, O_READ
  398. ;        pop     ebp
  399. ;
  400. ;        push    ebp
  401. ;        stdcall [aSetpos],[hPlugin],0,POSEND
  402. ;        pop     ebp
  403. ;        add     [numbytes],eax
  404.  
  405.  
  406.  
  407. ;unpack
  408. ;       void __stdcall GetFiles(HANDLE hPlugin, int NumItems, void* items[], void* addfile, void* adddir);
  409.         push    ebp
  410.         stdcall [aGetFiles], [hPlugin], -1, 0, myAddFile, myAddDir
  411.         pop     ebp
  412.  
  413. ;jmp @f
  414. ;   .str1 db '/LICENSE.txt',0
  415. ;@@:
  416.  
  417. ;HANDLE __stdcall open(HANDLE hPlugin, const char* filename, int mode);
  418. ;Открыть файл filename. Параметр mode зарезервирован и в текущей версии kfar всегда равен 1.
  419.  ;       push    ebp
  420.  ;       stdcall [aOpen], [hPlugin], .str1, O_READ
  421.  ;       pop     ebp
  422.  
  423.  ;       mov     [hFile],eax
  424. ;unsigned __stdcall read(HANDLE hFile, void* buf, unsigned size);
  425. ;Чтение size байт в буфер buf из файла hFile, ранее открытого через open.
  426. ;size кратен 512 байт
  427. ;Возвращаемое значение: число прочитанных байт, -1 при ошибке.
  428.  ;       push    ebp
  429.  ;       stdcall [aRead], [hFile], copy_buf, SIZE_COPY_BUF
  430.  ;       pop     ebp
  431.  ;
  432. ;        mcall   70, fsWrite
  433. ;void __stdcall close(HANDLE hFile);
  434.         push    ebp
  435.         stdcall [aClose], [hFile]
  436.         mov     [bWinChild],0
  437.         pop     ebp
  438.  
  439.         push    ebp
  440.         stdcall [aClosePlugin], [hPlugin]
  441.         mov     [bWinChild],0
  442.  
  443.         mov     [fsRunNotifyOK.param],strUnpackOk
  444.         mcall   70,fsRunNotifyOK
  445.         pop     ebp
  446.         ret             ;SUCCESS
  447.  
  448.  
  449. .errNotFound:
  450. ;        stdcall SimpleSayErr,strNotFound
  451.         mov     [bWinChild],0
  452.         mov     [fsRunNotifyOK.param],strUnpackFault
  453.         mcall   70,fsRunNotifyOK
  454.         ret
  455.  
  456. .errNotSupp:
  457.         mov     eax,[fsNewDir.path]
  458.         mov     [fsDelDir.path],eax
  459.         mcall   70, fsDelDir
  460.  
  461.         mov     [bWinChild],0
  462.         mov     [fsRunNotifyOK.param],strUnpackFault
  463.         mcall   70,fsRunNotifyOK
  464.         ret
  465.  
  466. .errNullInp:
  467.         mov     [redInput],1
  468.         mov     [bWinChild],0
  469.         ret
  470. endp
  471.  
  472.  
  473. proc Exception param1:dword
  474.         stdcall SimpleSayErr,strErrorExc
  475.         ret
  476. endp
  477.  
  478. proc debugInt3
  479.         dps 'Паника!!!!!!!!!!!!!!!!!!!!!!!!!'
  480.         dnl
  481.         int3
  482.         ret
  483. endp
  484.  
  485.  
  486. proc calcSizeArch hPlugin:dword
  487. locals
  488.   bdwk rb 560
  489. endl
  490. ;int __stdcall ReadFolder(HANDLE hPlugin, unsigned dirinfo_start,
  491. ;        unsigned dirinfo_size, void* dirdata);
  492. int3
  493.         push    ebp
  494.         lea     eax,[bdwk]
  495.         stdcall [aReadFolder], [hPlugin],1,560,eax
  496.         pop     ebp
  497.  
  498.         ret
  499. endp
  500. ;-------------------------------------------------------------------------------
  501. ;-------------------------------------------------------------------------------
  502. ;-------------------------------------------------------------------------------
  503.  
  504. ;SayErr  int num_strings, const char* strings[],
  505. ;                      int num_buttons, const char* buttons[]);
  506.  
  507. proc SayErr num_strings:dword, strings:dword,num_buttons:dword, buttons:dword
  508.         pushad
  509.         cmp     [num_strings],1
  510.         je      @f
  511.         m2m     [errmess0], strErrorExc
  512.         jmp     .l1
  513.        @@:
  514.         mov     ebx,[strings]
  515.         m2m     [errmess0], dword [ebx]
  516.        .l1:
  517.         mcall   51,1,threadSayErr,stackDlg
  518.         popad
  519.         mov     eax,1
  520.         ret
  521. endp
  522.  
  523. proc SimpleSayErr str:dword
  524.         pushad
  525.         m2m     [errmess0],[str]
  526.         mcall   51,1,threadSayErr,stackDlg
  527.         popad
  528.         ret
  529. endp
  530.  
  531.  
  532. proc threadSayErr
  533.         mcall   40, 111b+0C000000h
  534. .wm_redraw:
  535.         mcall 12, 1
  536.         mcall 48, 3, sc, sizeof.system_colors
  537.         mov   edx, [sc.work]
  538.         or        edx, 0x33000000
  539.         mcall 0, <220,420>, <220,110>, , , title
  540.  
  541.         mov     ecx,[sc.work_text]
  542.         or      ecx,90000000h
  543.         mov     edx,[errmess0]
  544.         mcall 4, <15,11>
  545.  
  546.         mcall 8, <105,100>,<45,25>,1,[sc.work_button]
  547.         mov     ecx,[sc.work_button_text]
  548.         or      ecx,90000000h
  549.         mcall 4, <147,51>, , strOk
  550.  
  551.         mcall 12, 2
  552.  
  553. .still:
  554.         mcall   10
  555.         cmp     eax, 1
  556.         je      .wm_redraw
  557.         cmp     eax, 2
  558.         je      .wm_key
  559.         cmp     eax, 3
  560.         je      .wm_button
  561.         jmp     .still
  562.  
  563. .wm_button:
  564.         mcall   17
  565.  
  566.         cmp     ah, 1
  567.         je      .exit
  568.         jmp     .still
  569.  
  570. .wm_key:
  571.         mcall   2
  572.         jmp     .still
  573. .exit:
  574.         mcall   -1
  575. endp
  576.  
  577. ;-------------------------------------------------------------------------------
  578. ;-------------------------------------------------------------------------------
  579. ;-------------------------------------------------------------------------------
  580.     ; "enter password" dialog for KFar
  581. ;password_dlg:
  582. ;        dd      1       ; use standard dialog colors
  583. ;        dd      -1      ; center window by x
  584. ;        dd      -1      ; center window by y
  585. ;.width  dd      ?       ; width (will be filled according to current console width)
  586. ;        dd      2       ; height
  587. ;        dd      4, 2    ; border size
  588. ;        dd      aEnterPasswordTitle     ; title
  589. ;        dd      ?       ; colors (will be set by KFar)
  590. ;        dd      0       ; used internally by dialog manager, ignored
  591. ;        dd      0, 0    ; reserved for DlgProc
  592. ;        dd      2       ; 2 controls
  593. ;; the string "enter password"
  594. ;        dd      1       ; type: static
  595. ;        dd      1,0     ; upper-left position
  596. ;.width1 dd      ?,0     ; bottom-right position
  597. ;        dd      aEnterPassword  ; data
  598. ;        dd      0       ; flags
  599. ;; editbox for password
  600. ;        dd      3       ; type: edit
  601. ;        dd      1,1     ; upper-left position
  602. ;.width2 dd      ?,0     ; bottom-right position
  603. ;        dd      password_data   ; data
  604. ;        dd      2Ch     ; flags
  605.  
  606.  
  607.  
  608. proc DialogBox dlgInfo:dword
  609.         pushad
  610.         mov     ebx,[dlgInfo]
  611.         mov     eax,[ebx+19*4]
  612.         mov     [forpassword],eax
  613.         mov     byte[eax], 0
  614.         mov     [stateDlg], 0
  615.         mcall   51,1,threadDialogBox,stackDlg
  616.  
  617.         ;wait thread...
  618.     @@: cmp     [stateDlg],0
  619.         jne     @f
  620.         mcall   5,1
  621.         jmp     @b
  622.      @@:
  623.         popad
  624.         cmp     [stateDlg], 1
  625.         jne     @f
  626.         xor     eax, eax
  627.         ret
  628.     @@:
  629.         or      eax, -1
  630.         ret
  631. endp
  632.  
  633. proc threadDialogBox
  634.  
  635.         mcall   40, 100111b+0C000000h
  636.         mov     eax,[forpassword]
  637.         mov     [edtPassword+4*9],eax
  638.         xor     eax,eax
  639.         mov     dword[edtPassword.size], eax
  640.         mov     dword[edtPassword.pos], eax
  641.  
  642. .wm_redraw:
  643.         mcall   12, 1
  644.         mcall   48, 3, sc, sizeof.system_colors
  645.         mov     edx, [sc.work]
  646.         or      edx, 0x33000000
  647.         mcall   0, <200,320>, <200,140>, , , title
  648.  
  649.         edit_boxes_set_sys_color edtPack,endEdits,sc
  650.         stdcall [edit_box_draw],edtPassword
  651.  
  652.  
  653.         mov     ecx,[sc.work_text]
  654.         or      ecx,90000000h
  655.         mcall 4, <56,12>, , strGetPass
  656.  
  657.         mcall 8, <70,80>,<74,22>,2,[sc.work_button]
  658.         mov     ecx,[sc.work_button_text]
  659.         or      ecx,90000000h
  660.         mcall 4, <103,79>, , strOk
  661.  
  662.         mcall 8, <165,80>,<74,22>,1,[sc.work_button]
  663.         mov     ecx,[sc.work_button_text]
  664.         or      ecx,90000000h
  665.         mcall 4, <182,79>, , strCancel
  666.  
  667.  
  668.         mcall 12, 2
  669.  
  670. .still:
  671.         mcall   10
  672.         cmp     eax, 1
  673.         je      .wm_redraw
  674.         cmp     eax, 2
  675.         je      .wm_key
  676.         cmp     eax, 3
  677.         je      .wm_button
  678.         cmp     eax, 6
  679.         je      .wm_mouse
  680.  
  681.         jmp     .still
  682.  
  683. .wm_key:
  684.         mcall   2
  685.         stdcall [edit_box_key],edtPassword
  686.         jmp     .still
  687.  
  688.  
  689. .wm_button:
  690.         mcall   17
  691.  
  692.         cmp     ah, 2           ;OK
  693.         jne     @f
  694.         mov     [stateDlg],1
  695.         jmp     .exit
  696.     @@:
  697.  
  698.         cmp     ah, 1           ;Close window or Cancel
  699.         jne      .still
  700.         mov     [stateDlg],2
  701.         jmp     .exit
  702.  
  703. .wm_mouse:
  704.         stdcall [edit_box_mouse],edtPassword
  705.  
  706.  
  707.         jmp     .still
  708.  
  709. .exit:
  710.         mcall   -1
  711. endp
  712.  
  713.  
  714. ;--  DATA  -------------------------------------------------------------------
  715.  
  716.  
  717.  
  718. sc system_colors
  719.  
  720.  
  721. title db 'uNZ v0.1 alpha',0
  722. bWinChild db 0  ;1 - дочернее окно есть, главное окно не должно реагировать
  723. redInput  db 0  ;1 - подсветить красным надпись
  724.  
  725.  
  726. if lang eq ru
  727.  strGo db 'Распаковать',0
  728.  strInp db 'Архив',0
  729.  strPath db 'Куда',0
  730. else
  731.  strGo db 'Unpack',0
  732.  strInp db 'Pack',0
  733.  strPath db 'Wohin',0
  734.  strError db 'Error',0
  735.  strErrorExc db 'Unrecognized error',0
  736.  strOk  db 'OK',0
  737.  strGetPass db 'Password:',0
  738.  strCancel  db 'Cancel',0
  739.  strUnpackOk  db 'Unpacked successfuly',0
  740.  strUnpackFault  db 'Unpacked fault',0
  741.  strNotSupport db 'Format not support',0
  742.  strNotFound db 'File not found',0
  743.  strNull db 0
  744. end if
  745.  
  746.  
  747. strDots db '..',0
  748.  
  749. ;--------
  750. ; int __stdcall SayErr(int num_strings, const char* strings[],
  751. ;                      int num_buttons, const char* buttons[]);
  752. ; int __stdcall DialogBox(DLGDATA* dlg);
  753.  
  754. forpassword rd 1
  755. stateDlg dd 0 ;0 - in process, 1 - button ok, 2 - button cancel
  756. errmess0 dd strErrorExc
  757.  
  758.  
  759. kfar_info:
  760.         dd      .size
  761.         dd      version_dword
  762.         dd      open
  763.         dd      open2
  764.         dd      read
  765.         dd      -1      ; write: to be implemented
  766.         dd      seek
  767.         dd      tell
  768.         dd      -1      ; flush: to be implemented
  769.         dd      filesize
  770.         dd      close
  771.         dd      xpgalloc
  772.         dd      xpgrealloc
  773.         dd      pgfree
  774.         dd      getfreemem
  775.         dd      debugInt3;libini_alloc
  776.         dd      debugInt3;libini_realloc
  777.         dd      debugInt3;libini_free
  778.         dd      debugInt3;menu
  779.         dd      debugInt3;menu_centered_in
  780.         dd      DialogBox;DialogBox
  781.         dd      SayErr   ;SayErr
  782.         dd      debugInt3;Message
  783.         dd      0       ;cur_width
  784. .size = $ - kfar_info
  785. ;--------
  786.  
  787.  
  788. iFiles dd 0     ;количество выгружаемых файлов
  789. endPointer dd buffer
  790.  
  791.  
  792. fsZip:
  793. .cmd    dd 5
  794.         dd 0
  795.         dd 0
  796. .size   dd 0
  797. .buf    dd bdvkPack
  798.         db 0
  799.         dd fInp
  800.  
  801. fsZipRead:
  802. .cmd    dd 0
  803.         dd 0
  804.         dd 0
  805. .size   dd 1024
  806. .buf    dd filedata_buffer
  807.         db 0
  808.         dd fInp
  809.  
  810.  
  811. fsWrite:
  812. .cmd    dd 2    ;2 rewrite, 3 - write
  813. .pos    dd 0
  814. .hpos   dd 0
  815. .size   dd SIZE_COPY_BUF
  816. .buf    dd copy_buf
  817.         db 0
  818. .path   dd 0
  819.  
  820.  
  821. fsNewDir:
  822. .cmd    dd 9
  823.         dd 0
  824.         dd 0
  825.         dd 0
  826.         dd 0
  827.         db 0
  828. .path   dd 0
  829.  
  830. fsDelDir:
  831. .cmd    dd 8
  832.         dd 0
  833.         dd 0
  834.         dd 0
  835.         dd 0
  836.         db 0
  837. .path   dd 0
  838.  
  839.  
  840.  
  841. fsRunNotifyOK:
  842. .cmd    dd 7
  843.         dd 0
  844. .param  dd strUnpackOk
  845. .size   dd 0
  846. .buf    dd 0
  847.         db '/sys/@notify',0
  848.  
  849.  
  850.  
  851. edtPack    edit_box 200,70,11 ,0FFFFFFh,06F9480h,0FFh,0h,0x90000000,255,\
  852.                 fInp, mouse_dd,0,0,0
  853. edtUnpPath edit_box 200,70,33,0FFFFFFh,06F9480h,0FFh,0h,0x90000000,255, \
  854.                 pathOut, mouse_dd,0,0,0
  855. edtPassword edit_box 200,56,40,0FFFFFFh,06F9480h,0FFh,0h,0x90000000,255, \
  856.                 password, mouse_dd,0,0,0
  857. endEdits:
  858.  
  859. ;-------------------------------------------------------------------------------
  860. OpenDialog_data:
  861. .type                   dd 0    ;0-open, 1-save, 2-select folder
  862. .procinfo               dd RBProcInfo       ;+4
  863. .com_area_name          dd communication_area_name      ;+8
  864. .com_area               dd 0    ;+12
  865. .opendir_pach           dd temp_dir_pach        ;+16
  866. .dir_default_pach       dd communication_area_default_pach      ;+20
  867. .start_path             dd open_dialog_path     ;+24
  868. .draw_window            dd winRedraw               ;+28
  869. .status                 dd 0    ;+32
  870. .openfile_pach          dd ODAreaPath;   ;+36
  871. .filename_area          dd 0;        ;+40
  872. .filter_area            dd Filter
  873. .x:
  874. .x_size                 dw 420 ;+48 ; Window X size
  875. .x_start                dw 100 ;+50 ; Window X position
  876. .y:
  877. .y_size                 dw 320 ;+52 ; Window y size
  878. .y_start                dw 100 ;+54 ; Window Y position
  879.  
  880. communication_area_name:
  881.         db 'FFFFFFFF_open_dialog',0
  882. open_dialog_path:
  883.         db '/sys/File managers/opendial',0
  884.  
  885. communication_area_default_pach:
  886.         db '/sys',0
  887.  
  888. Filter  dd 0
  889.  
  890.  
  891. ; int __stdcall         ReadFolder(HANDLE hPlugin,
  892. ;       unsigned dirinfo_start, unsigned dirinfo_size, void* dirdata);
  893. ; void __stdcall        ClosePlugin(HANDLE hPlugin);
  894. ; bool __stdcall        SetFolder(HANDLE hPlugin,
  895. ;       const char* relative_path, const char* absolute_path);
  896. ; void __stdcall        GetOpenPluginInfo(HANDLE hPlugin, OpenPluginInfo* info);
  897. ; void __stdcall        GetFiles(HANDLE hPlugin, int NumItems, void* items[],
  898. ;       void* addfile, void* adddir);
  899. ;       bool __stdcall addfile(const char* name, void* bdfe_info, HANDLE hFile);
  900. ;       bool __stdcall adddir(const char* name, void* bdfe_info);
  901. ; int __stdcall         getattr(HANDLE hPlugin, const char* filename, void* info);
  902. ; HANDLE __stdcall      open(HANDLE hPlugin, const char* filename, int mode);
  903. ; void __stdcall        setpos(HANDLE hFile, __int64 pos);
  904. ; unsigned __stdcall    read(HANDLE hFile, void* buf, unsigned size);
  905. ; void __stdcall        close(HANDLE hFile);
  906. IMPORTS:
  907. library archiver, 'archiver.obj',\
  908.         box_lib ,'box_lib.obj',\
  909.         proc_lib,'proc_lib.obj'
  910.  
  911. import  archiver,\
  912.         aPluginLoad     ,      'plugin_load',\
  913.         aOpenFilePlugin ,      'OpenFilePlugin',\
  914.         aClosePlugin    ,      'ClosePlugin',\
  915.         aReadFolder     ,      'ReadFolder',\
  916.         aSetFolder      ,      'SetFolder',\
  917.         aGetFiles       ,      'GetFiles',\
  918.         aGetOpenPluginInfo ,   'GetOpenPluginInfo',\
  919.         aGetattr        ,      'getattr',\
  920.         aOpen           ,      'open',\
  921.         aRead           ,      'read',\
  922.         aSetpos         ,      'setpos',\
  923.         aClose          ,      'close',\
  924.         aDeflateUnpack  ,      'deflate_unpack',\
  925.         aDeflateUnpack2 ,      'deflate_unpack2'
  926.  
  927. import  proc_lib,\
  928.         OpenDialog_Init         ,'OpenDialog_init',\
  929.         OpenDialog_Start        ,'OpenDialog_start'
  930. import  box_lib,\
  931.         edit_box_draw           ,'edit_box',\
  932.         edit_box_key            ,'edit_box_key',\
  933.         edit_box_mouse          ,'edit_box_mouse'
  934.  
  935.  
  936. IncludeIGlobals
  937.  
  938. ;--  UDATA  -----------------------------------------------------------------------------
  939. init_end:
  940. align 16
  941. IncludeUGlobals
  942.  
  943.  
  944. ;params db 'unz -o "fil epar1" -f "arch1.txt" -f "ar ch2.txt" file1',0
  945. ;params db 'unz -o "fil epar1" -f arch1.txt -f "ar ch2.txt" file1',0
  946. ;params db '/hd0/1/unz/xboot-1-0-build-14-en-win.zip',0
  947. ;rb 4096
  948.  
  949. fInp    rb 1024
  950. pathOut rb 1024
  951. files   rd 256
  952. password        rb 256
  953.  
  954. fZipInfo         rb 40
  955.  
  956. mouse_dd        rd 1
  957. RBProcInfo      rb 1024
  958. temp_dir_pach   rb 1024
  959. ODAreaPath      rb 1024
  960.  
  961.  
  962.  
  963. ;--------
  964.  
  965. copy_buf rb SIZE_COPY_BUF
  966.  
  967. execdata rb     1024
  968. execdataend:
  969.  
  970. filedata_buffer_size = 1024
  971. filedata_buffer rb      filedata_buffer_size
  972.  
  973. CopyDestEditBuf         rb      12+512+1
  974. .length = $ - CopyDestEditBuf - 13
  975.  
  976. bdvkPack rb 560
  977.  
  978. ;--------
  979.  
  980. buffer  rb 4096 ;for string of file name or extract
  981. params rb 4096
  982.  
  983.         rb 1024
  984. stackUnpack:
  985.  
  986.         rb 1024
  987. stackDlg:
  988.  
  989.         rb 1024
  990. stack_top:
  991.  
  992. end_mem:
  993.  
  994.  
  995.