Subversion Repositories Kolibri OS

Rev

Rev 474 | Rev 517 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. use32
  2.         db      'MENUET01'
  3.         dd      1
  4.         dd      start
  5.         dd      i_end
  6. memsize dd      mem
  7.         dd      stacktop
  8.         dd      0, app_path
  9.  
  10. include 'lang.inc'
  11. include '..\..\..\macros.inc'
  12. include 'font.inc'
  13. include 'sort.inc'
  14. include 'kglobals.inc'
  15. include 'dialogs.inc'
  16. include 'viewer.inc'
  17. include 'tools.inc'
  18. include 'filetool.inc'
  19.  
  20. start:
  21.         mov     edi, tolower_table
  22.         push    'A'
  23.         pop     ecx
  24.         xor     eax, eax
  25. @@:
  26.         stosb
  27.         inc     eax
  28.         loop    @b
  29.         add     al, 0x20
  30.         mov     cl, 'Z'-'A'+1
  31. @@:
  32.         stosb
  33.         inc     eax
  34.         loop    @b
  35.         sub     al, 0x20
  36.         mov     cl, '€'-'Z'-1
  37. @@:
  38.         stosb
  39.         inc     eax
  40.         loop    @b
  41.         add     al, 0x20
  42.         mov     cl, ''-'€'
  43. @@:
  44.         stosb
  45.         inc     eax
  46.         loop    @b
  47.         add     al, 0x30
  48.         mov     cl, 'Ÿ'-''+1
  49. @@:
  50.         stosb
  51.         inc     eax
  52.         loop    @b
  53.         sub     al, 0x50
  54.         mov     cl, 256-'Ÿ'-1
  55. @@:
  56.         stosb
  57.         inc     eax
  58.         loop    @b
  59.         mov     byte [edi-256+'ð'], 'ñ'
  60.         push    68
  61.         pop     eax
  62.         push    11
  63.         pop     ebx
  64.         mcall
  65.         call    init_console
  66.         call    draw_window
  67.         push    66
  68.         pop     eax
  69.         push    1
  70.         pop     ebx
  71.         mov     ecx, ebx
  72.         mcall     ; set keyboard mode to scancodes
  73.         mov     eax, 200
  74.         mov     [panel1_nfa], eax
  75.         mov     [panel2_nfa], eax
  76.         mov     ecx, 200*4 + 32 + 200*304
  77.         call    pgalloc
  78.         mov     [panel1_files], eax
  79.         call    pgalloc
  80.         mov     [panel2_files], eax
  81.         test    eax, eax
  82.         jz      exit
  83.         cmp     [panel1_files], eax
  84.         jz      exit
  85.         mov     [panel1_sortmode], 0    ; sort by name
  86.         mov     [panel2_sortmode], 0
  87.         push    2                       ; "á।­¨©" ä®à¬ â
  88.         pop     eax
  89.         mov     [panel1_colmode], eax
  90.         mov     [panel2_colmode], eax
  91.         mov     [num_screens], 1
  92.         mov     ecx, 0x1000
  93.         call    pgalloc
  94.         mov     [screens], eax
  95.         test    eax, eax
  96.         jz      exit
  97.         mov     ecx, panels_vtable
  98.         mov     [eax], ecx
  99.         mov     [active_screen_vtable], ecx
  100. ; load libini.obj and kfar.ini
  101.         mov     eax, libini_name
  102.         mov     esi, ini_import
  103.         push    2
  104.         pop     ebp     ; we use version 2 of libini
  105.         call    load_dll_and_import
  106.         test    eax, eax
  107.         jnz     .noini
  108.         mov     edi, app_path
  109.         or      ecx, -1
  110.         repnz   scasb
  111.         mov     dword [edi-1], '.ini'
  112.         mov     byte [edi+3], 0
  113.         push    1
  114.         push    dword aConfirmDelete
  115.         push    dword aConfirmations
  116.         push    dword app_path
  117.         call    [ini.get_int]
  118.         mov     [bConfirmDelete], al
  119.         push    0
  120.         push    dword aConfirmDeleteIncomplete
  121.         push    dword aConfirmations
  122.         push    dword app_path
  123.         call    [ini.get_int]
  124.         mov     [bConfirmDeleteIncomplete], al
  125.         mov     ecx, 0x1000
  126.         call    xpgalloc
  127.         test    eax, eax
  128.         jz      .skip_assoc
  129. @@:
  130.         mov     edx, eax
  131.         push    edx ecx
  132.         push    ecx
  133.         push    edx
  134.         push    dword aAssociations
  135.         push    dword app_path
  136.         call    [ini.query_sec]
  137.         pop     ecx edx
  138.         cmp     eax, ecx
  139.         jbe     @f
  140.         add     ecx, ecx
  141.         call    xpgrealloc
  142.         test    eax, eax
  143.         jz      .skip_assoc
  144.         jmp     @b
  145. @@:
  146.         cmp     ecx, 0x1000
  147.         jbe     @f
  148.         mov     ecx, eax
  149.         call    xpgrealloc      ; must succeed, because we decrease size
  150.         mov     edx, eax
  151. @@:
  152.         mov     [associations], edx
  153.         xor     ebp, ebp
  154.         xor     esi, esi
  155. .skip_assoc:
  156.         mov     edi, saved_file_name
  157.         push    dword nullstr
  158.         push    512
  159.         push    edi
  160.         push    dword aShortcut
  161.         push    dword aFolderShortcuts
  162.         push    dword app_path
  163.         call    [ini.get_str]
  164.         cmp     byte [edi], 0
  165.         jz      .shortcut_cont
  166.         or      ecx, -1
  167.         xor     eax, eax
  168.         repnz   scasb
  169.         not     ecx
  170.         cmp     ecx, 2
  171.         jz      @f
  172.         cmp     byte [edi-2], '/'
  173.         jnz     @f
  174.         mov     byte [edi-2], 0
  175.         dec     ecx
  176. @@:
  177.         mov     al, [aShortcut.d]
  178.         push    esi
  179.         inc     esi
  180.         mov     [FolderShortcuts+(eax-'0')*4], esi
  181.         lea     esi, [esi+ecx-1]
  182.         push    esi
  183.         and     esi, 0xFFF
  184.         cmp     esi, ecx
  185.         pop     esi
  186.         ja      .norealloc
  187.         mov     edx, ebp
  188.         mov     ecx, esi
  189.         call    xpgrealloc
  190.         test    eax, eax
  191.         jnz     @f
  192.         mov     edi, FolderShortcuts
  193.         mov     ecx, 10
  194.         rep     stosd
  195.         jmp     .skip_shortcuts
  196. @@:
  197.         mov     ebp, eax
  198. .norealloc:
  199.         pop     edi
  200.         add     edi, ebp
  201.         mov     ecx, saved_file_name
  202. @@:
  203.         mov     al, [ecx]
  204.         inc     ecx
  205.         stosb
  206.         test    al, al
  207.         jnz     @b
  208. .shortcut_cont:
  209.         inc     [aShortcut.d]
  210.         cmp     [aShortcut.d], '9'
  211.         jbe     .skip_assoc
  212.         mov     esi, FolderShortcuts
  213.         mov     ecx, 10
  214.         dec     ebp
  215. .l3:
  216.         lodsd
  217.         test    eax, eax
  218.         jz      @f
  219.         add     [esi-4], ebp
  220. @@:
  221.         loop    .l3
  222. .skip_shortcuts:
  223. .noini:
  224.         mov     esi, def_left_dir
  225.         mov     edi, panel1_dir
  226. @@:
  227.         lodsb
  228.         stosb
  229.         test    al, al
  230.         jnz     @b
  231.         mov     esi, def_right_dir
  232.         mov     edi, panel2_dir
  233. @@:
  234.         lodsb
  235.         stosb
  236.         test    al, al
  237.         jnz     @b
  238.         call    draw_keybar
  239.         call    draw_cmdbar
  240.         mov     [prev_dir], 0
  241.         mov     ebp, panel1_data
  242.         call    calc_colwidths
  243.         call    read_folder
  244.         call    draw_panel
  245.         mov     [bSilentFolderMode], 1
  246.         mov     ebp, panel2_data
  247.         call    calc_colwidths
  248.         call    read_folder
  249.         call    draw_panel
  250. event:
  251.         push    10
  252.         pop     eax
  253.         mcall
  254.         dec     eax
  255.         jz      redraw
  256.         dec     eax
  257.         jz      key
  258. ; button - we have only one button, close
  259. exit:
  260.         or      eax, -1
  261.         mcall
  262. redraw:
  263. ; query kbd state from OS
  264.         mov     al, 66
  265.         push    3
  266.         pop     ebx
  267.         mcall
  268.         and     eax, 0x3F
  269.         cmp     al, [ctrlstate]
  270.         mov     [ctrlstate], al
  271.         jz      @f
  272.         call    draw_keybar
  273. @@:
  274.         mov     al, 9
  275.         mov     ebx, procinfo
  276.         or      ecx, -1
  277.         mcall
  278. ; test if rolled up
  279. ; height of rolled up window is [skinh]+3
  280.         mov     eax, [ebx+46]
  281.         sub     eax, [skinh]
  282.         cmp     eax, 5
  283.         ja      @f
  284.         mov     al, 12
  285.         push    1
  286.         pop     ebx
  287.         mcall
  288.         xor     eax, eax
  289. ; ebx, ecx, edi are ignored by function 0 after first redraw
  290.         mov     edx, 0x53000000
  291.         mcall
  292.         mov     al, 12
  293.         inc     ebx
  294.         mcall
  295.         jmp     event
  296. @@:
  297.         xor     ecx, ecx
  298.         mov     eax, [ebx+42]
  299.         mov     [wnd_width], eax
  300.         sub     eax, 5*2-1
  301.         jae     @f
  302.         xor     eax, eax
  303. @@:
  304.         cdq
  305.         mov     esi, font_width
  306.         div     esi
  307.         cmp     eax, 54
  308.         jae     @f
  309.         mov     al, 54
  310.         mov     ch, 1
  311. @@:
  312.         cmp     eax, 255
  313.         jbe     @f
  314.         mov     eax, 255
  315.         mov     ch, 1
  316. @@:
  317.         cmp     eax, [cur_width]
  318.         mov     [cur_width], eax
  319.         setnz   cl
  320.         or      cl, ch
  321.         test    edx, edx
  322.         mov     [fill_width], edx
  323.         setnz   ch
  324.         mov     eax, [ebx+46]
  325.         mov     [wnd_height], eax
  326.         sub     eax, [skinh]
  327.         sub     eax, 5-1
  328.         jns     @f
  329.         xor     eax, eax
  330. @@:
  331.         cdq
  332.         mov     esi, font_height
  333.         div     esi
  334.         cmp     eax, 8
  335.         jae     @f
  336.         mov     al, 8
  337.         mov     cl, 1
  338. @@:
  339.         cmp     eax, 255
  340.         jbe     @f
  341.         mov     eax, 255
  342.         mov     cl, 1
  343. @@:
  344.         mov     [fill_height], edx
  345.         cmp     eax, [cur_height]
  346.         mov     [cur_height], eax
  347.         jnz     .resize
  348.         test    cl, cl
  349.         jnz     .resize
  350.         test    edx, edx
  351.         setnz   cl
  352.         or      cl, ch
  353.         jz      @f
  354.         test    byte [ebx+70], 1
  355.         jnz     @f
  356. .resize:
  357.         push    67
  358.         pop     eax
  359.         or      ebx, -1
  360.         or      ecx, -1
  361.         mov     edx, [cur_width]
  362.         imul    edx, font_width
  363.         add     edx, 5*2-1
  364.         mov     esi, [cur_height]
  365.         imul    esi, font_height
  366.         add     esi, [skinh]
  367.         add     esi, 5-1
  368.         mcall
  369. .resize_draw:
  370.         mov     ecx, [MemForImage]
  371.         call    pgfree
  372.         and     [MemForImage], 0
  373.         call    init_console
  374. ;        call    draw_window
  375.         call    draw_keybar
  376.         mov     ebp, [active_screen_data]
  377.         mov     eax, [active_screen_vtable]
  378.         call    dword [eax+screen_vtable.OnRedraw]
  379.         jmp     event
  380. @@:
  381.         call    draw_window
  382.         jmp     event
  383. alt_f9:
  384.         cmp     [saved_width], -1
  385.         jz      @f
  386.         mov     eax, [saved_width]
  387.         mov     [cur_width], eax
  388.         or      [saved_width], -1
  389.         mov     eax, [saved_height]
  390.         mov     [cur_height], eax
  391.         or      [saved_height], -1
  392.         jmp     redraw.resize
  393. @@:
  394.         push    48
  395.         pop     eax
  396.         push    5
  397.         pop     ebx
  398.         mcall
  399.         push    eax
  400.         sub     eax, [esp+2]
  401.         inc     eax
  402.         movzx   eax, ax
  403.         sub     eax, 10
  404.         xor     edx, edx
  405.         mov     ecx, font_width
  406.         div     ecx
  407.         xchg    [cur_width], eax
  408.         mov     [saved_width], eax
  409.         mov     eax, ebx
  410.         shr     ebx, 16
  411.         sub     eax, ebx
  412.         sub     eax, 5-1
  413.         sub     eax, [skinh]
  414.         xor     edx, edx
  415.         mov     ecx, font_height
  416.         div     ecx
  417.         xchg    [cur_height], eax
  418.         mov     [saved_height], eax
  419.         mov     ecx, ebx
  420.         pop     ebx
  421.         shr     ebx, 16
  422.         mov     edx, [cur_width]
  423.         imul    edx, font_width
  424.         add     edx, 5*2-1
  425.         mov     esi, [cur_height]
  426.         imul    esi, font_height
  427.         add     esi, [skinh]
  428.         add     esi, 4
  429.         push    67
  430.         pop     eax
  431.         mcall
  432.         jmp     redraw.resize_draw
  433. key:
  434.         mov     al, 2
  435.         mcall
  436.         test    al, al
  437.         jnz     event
  438.         xchg    al, ah
  439.         cmp     al, 0xE0
  440.         jnz     @f
  441.         mov     [bWasE0], 1
  442.         jmp     event
  443. @@:
  444.         xchg    ah, [bWasE0]
  445.         mov     ebp, [active_screen_data]
  446.         mov     edx, [active_screen_vtable]
  447.         cmp     al, 0x1D
  448.         jz      .ctrl_down
  449.         cmp     al, 0x9D
  450.         jz      .ctrl_up
  451.         cmp     al, 0x2A
  452.         jz      .lshift_down
  453.         cmp     al, 0xAA
  454.         jz      .lshift_up
  455.         cmp     al, 0x36
  456.         jz      .rshift_down
  457.         cmp     al, 0xB6
  458.         jz      .rshift_up
  459.         cmp     al, 0x38
  460.         jz      .alt_down
  461.         cmp     al, 0xB8
  462.         jz      .alt_up
  463.         call    [edx+screen_vtable.OnKey]
  464.         jmp     event
  465. .ctrl_down:
  466.         test    ah, ah
  467.         jnz     .rctrl_down
  468.         or      [ctrlstate], 4
  469.         jmp     .keybar
  470. .rctrl_down:
  471.         or      [ctrlstate], 8
  472.         jmp     .keybar
  473. .ctrl_up:
  474.         test    ah, ah
  475.         jnz     .rctrl_up
  476.         and     [ctrlstate], not 4
  477.         jmp     .keybar
  478. .rctrl_up:
  479.         and     [ctrlstate], not 8
  480. .keybar:
  481.         call    draw_keybar
  482.         call    draw_image
  483. @@:     jmp     event
  484. .lshift_down:
  485. ; ignore E0 2A sequence
  486. ; e.g. arrow keys with NumLock on generate sequence E0 2A E0 xx / E0 xx+80 E0 AA
  487. ; where xx is scancode, so we can safely ignore E0 2A
  488.         test    ah, ah
  489.         jnz     @b
  490.         or      [ctrlstate], 1
  491.         jmp     .keybar
  492. .lshift_up:
  493. ; ignore E0 AA sequence
  494.         test    ah, ah
  495.         jnz     @b
  496.         and     [ctrlstate], not 1
  497.         jmp     .keybar
  498. .rshift_down:
  499.         or      [ctrlstate], 2
  500.         jmp     .keybar
  501. .rshift_up:
  502.         and     [ctrlstate], not 2
  503.         jmp     .keybar
  504. .alt_down:
  505.         test    ah, ah
  506.         jnz     .ralt_down
  507.         or      [ctrlstate], 0x10
  508.         jmp     .keybar
  509. .ralt_down:
  510.         or      [ctrlstate], 0x20
  511.         jmp     .keybar
  512. .alt_up:
  513.         test    ah, ah
  514.         jnz     .ralt_up
  515.         and     [ctrlstate], not 0x10
  516.         jmp     .keybar
  517. .ralt_up:
  518.         and     [ctrlstate], not 0x20
  519.         jmp     .keybar
  520.  
  521. process_ctrl_keys:
  522.         cmp     byte [esi], 0
  523.         jz      .done
  524.         push    ecx
  525.         cmp     al, [esi]
  526.         jz      .check
  527. .cont:
  528.         pop     ecx
  529.         add     esi, 8
  530.         jmp     process_ctrl_keys
  531. .done:
  532.         stc
  533.         ret
  534. .check:
  535.         mov     cl, 0
  536.         call    .check_ctrlkey
  537.         jc      .cont
  538.         mov     cl, 2
  539.         call    .check_ctrlkey
  540.         jc      .cont
  541.         mov     cl, 4
  542.         call    .check_ctrlkey
  543.         jc      .cont
  544.         pop     ecx
  545.         call    dword [esi+4]
  546.         clc
  547.         ret
  548. .check_ctrlkey:
  549.         push    eax edx
  550.         movzx   edx, [ctrlstate]
  551.         shr     edx, cl
  552.         add     cl, cl
  553.         movzx   eax, word [esi+2]
  554.         shr     eax, cl
  555.         and     eax, 15
  556.         cmp     al, ctrlkey_tests_num
  557.         jae     .fail
  558.         xchg    eax, edx
  559.         and     al, 3
  560.         call    [ctrlkey_tests + edx*4]
  561.         cmp     al, 1
  562.         pop     edx eax
  563.         ret
  564. .fail:
  565.         stc
  566.         pop     edx eax
  567.         ret
  568.  
  569. ctrlkey_test0:
  570.         test    al, al
  571.         setz    al
  572.         ret
  573. ctrlkey_test1:
  574.         test    al, al
  575.         setnp   al
  576.         ret
  577. ctrlkey_test2:
  578.         cmp     al, 3
  579.         setz    al
  580.         ret
  581. ctrlkey_test3:
  582.         cmp     al, 1
  583.         setz    al
  584.         ret
  585. ctrlkey_test4:
  586.         cmp     al, 2
  587.         setz    al
  588.         ret
  589.  
  590. new_screen:
  591. ; in: ecx=sizeof(screen data), edx->vtable
  592. ; out: ebp=pointer or NULL, eax!=0 if successful
  593. ; destroys ebx,ecx
  594.         call    xpgalloc
  595.         test    eax, eax
  596.         jnz     @f
  597.         ret
  598. @@:
  599.         mov     ebp, eax
  600.         mov     eax, [screens]
  601.         mov     ecx, [num_screens]
  602.         inc     ecx
  603.         shl     ecx, 3
  604.         test    ecx, 0xFFF
  605.         jnz     .norealloc
  606.         push    edx
  607.         mov     edx, eax
  608.         call    xpgrealloc
  609.         pop     edx
  610.         test    eax, eax
  611.         jnz     @f
  612.         mov     ecx, ebp
  613.         call    pgfree
  614.         xor     eax, eax
  615.         ret
  616. @@:
  617.         mov     [screens], eax
  618. .norealloc:
  619.         inc     [num_screens]
  620.         mov     [eax+ecx-8], edx
  621.         mov     [eax+ecx-4], ebp
  622.         mov     eax, [num_screens]
  623.         dec     eax
  624.         mov     [active_screen], eax
  625.         mov     [active_screen_vtable], edx
  626.         mov     [active_screen_data], ebp
  627.         jmp     draw_keybar
  628.  
  629. next_screen:
  630.         mov     eax, [active_screen]
  631.         inc     eax
  632.         cmp     eax, [num_screens]
  633.         jnz     @f
  634.         xor     eax, eax
  635. @@:     mov     [active_screen], eax
  636.         jmp     change_screen
  637.  
  638. delete_active_screen:
  639.         mov     edi, [screens]
  640.         mov     eax, [active_screen]
  641.         shl     eax, 3
  642.         add     edi, eax
  643.         push    dword [edi+4]
  644.         lea     esi, [edi+8]
  645.         mov     ecx, [num_screens]
  646.         sub     ecx, [active_screen]
  647.         dec     ecx
  648.         add     ecx, ecx
  649.         rep     movsd
  650.         dec     [num_screens]
  651.         mov     ecx, [num_screens]
  652.         shl     ecx, 3
  653.         test    ecx, 0xFFF
  654.         jnz     .norealloc
  655.         mov     edx, [screens]
  656.         call    pgrealloc               ; must succeed, because we decrease size
  657.         mov     [screens], eax
  658. .norealloc:
  659.         pop     ecx
  660.         call    pgfree
  661.         and     [active_screen], 0
  662.  
  663. change_screen:
  664.         pusha
  665.         mov     eax, [active_screen]
  666.         mov     esi, [screens]
  667.         mov     ebp, [esi+eax*8+4]
  668.         mov     eax, [esi+eax*8]
  669.         mov     [active_screen_vtable], eax
  670.         mov     [active_screen_data], ebp
  671.         call    draw_keybar
  672.         call    [eax+screen_vtable.OnRedraw]
  673.         popa
  674.         ret
  675.  
  676. F12:
  677.         mov     eax, [cur_width]
  678.         add     eax, 8
  679.         mov     esi, eax
  680.         mul     [num_screens]
  681.         mov     ecx, eax
  682.         call    xpgalloc
  683.         test    eax, eax
  684.         jnz     @f
  685.         ret
  686. @@:
  687.         mov     ebx, eax
  688.         mov     edi, eax
  689.         xor     ecx, ecx
  690. .next:
  691.         xor     eax, eax
  692.         stosd
  693.         inc     ecx
  694.         cmp     ecx, [num_screens]
  695.         jz      @f
  696.         lea     eax, [edi+esi-4]
  697.         mov     dword [edi-4], eax
  698. @@:
  699.         xor     eax, eax
  700.         stosd
  701.         dec     ecx
  702.         jz      @f
  703.         lea     eax, [edi-8]
  704.         sub     eax, esi
  705.         mov     dword [edi-4], eax
  706. @@:
  707.         mov     al, '&'
  708.         stosb
  709.         cmp     ecx, 36
  710.         jae     .noletter
  711.         lea     eax, [ecx+'0']
  712.         cmp     al, '9'
  713.         jbe     @f
  714.         add     al, 7
  715. @@:
  716.         stosb
  717.         mov     al, '.'
  718.         stosb
  719.         jmp     .letter_done
  720. .noletter:
  721.         mov     al, ' '
  722.         stosb
  723.         stosb
  724. .letter_done:
  725.         mov     al, ' '
  726.         stosb
  727.         pushad
  728.         mov     eax, [screens]
  729.         mov     ebp, [eax+ecx*8+4]
  730.         mov     eax, [eax+ecx*8]
  731.         mov     ecx, [cur_width]
  732.         sub     ecx, 12
  733.         call    [eax + screen_vtable.getname]
  734.         popad
  735.         sub     edi, 4
  736.         add     edi, [cur_width]
  737.         inc     ecx
  738.         cmp     ecx, [num_screens]
  739.         jb      .next
  740.         mov     eax, [active_screen]
  741.         mul     esi
  742.         add     eax, ebx
  743.         push    1
  744.         push    dword aScreens
  745.         push    eax
  746.         call    menu
  747.         cmp     eax, -1
  748.         jz      @f
  749.         sub     eax, ebx
  750.         div     esi
  751.         mov     [active_screen], eax
  752. @@:
  753.         mov     ecx, ebx
  754.         call    pgfree
  755.         jmp     change_screen
  756.  
  757. panels_OnKey:
  758.         mov     ebp, [active_panel]
  759.         mov     ecx, [ebp + panel1_index - panel1_data]
  760.         mov     edx, [ebp + panel1_start - panel1_data]
  761.         mov     ebx, [ebp + panel1_colst - panel1_data]
  762.         add     ebx, edx
  763.         mov     esi, panels_ctrlkeys
  764.         jmp     process_ctrl_keys
  765. .ret:
  766.         ret
  767. .up:
  768.         jecxz   .ret
  769.         dec     ecx
  770.         mov     [ebp + panel1_index - panel1_data], ecx
  771.         cmp     ecx, edx
  772.         jae     .done_redraw
  773.         mov     [ebp + panel1_start - panel1_data], ecx
  774. .done_redraw:
  775. ;        call    draw_panel
  776. ;        ret
  777.         jmp     draw_panel
  778. .insert:
  779.         lea     eax, [ecx*4]
  780.         add     eax, [ebp + panel1_files - panel1_data]
  781.         mov     eax, [eax]
  782.         cmp     word [eax+40], '..'
  783.         jnz     @f
  784.         cmp     byte [eax+42], 0
  785.         jz      .insert.down
  786. @@:
  787.         xor     byte [eax+303], 1
  788.         mov     edx, [eax+32]
  789.         test    byte [eax+303], 1
  790.         mov     eax, [eax+36]
  791.         jnz     .insert.increase
  792.         sub     dword [ebp + panel1_selected_size - panel1_data], edx
  793.         sbb     dword [ebp + panel1_selected_size+4 - panel1_data], eax
  794.         dec     [ebp + panel1_selected_num - panel1_data]
  795.         jmp     .insert.down
  796. .insert.increase:
  797.         add     dword [ebp + panel1_selected_size - panel1_data], edx
  798.         adc     dword [ebp + panel1_selected_size+4 - panel1_data], eax
  799.         inc     [ebp + panel1_selected_num - panel1_data]
  800. .insert.down:
  801.         inc     ecx
  802.         cmp     ecx, [ebp + panel1_numfiles - panel1_data]
  803.         jae     .done_redraw
  804.         jmp     @f
  805. .down:
  806.         inc     ecx
  807.         cmp     ecx, [ebp + panel1_numfiles - panel1_data]
  808.         jae     .ret
  809. @@:
  810.         mov     [ebp + panel1_index - panel1_data], ecx
  811.         cmp     ecx, ebx
  812.         jb      .done_redraw
  813.         sub     ecx, [ebp + panel1_colst - panel1_data]
  814.         inc     ecx
  815.         mov     [ebp + panel1_start - panel1_data], ecx
  816.         jmp     .done_redraw
  817. .left:
  818.         test    ecx, ecx
  819.         jnz     @f
  820.         ret
  821. @@:
  822.         mov     eax, [ebp + panel1_colsz - panel1_data]
  823.         sub     ecx, eax
  824.         jae     @f
  825.         xor     ecx, ecx
  826. @@:
  827.         mov     [ebp + panel1_index - panel1_data], ecx
  828. .finalize_left:
  829.         cmp     ecx, edx
  830.         jae     .done_redraw
  831.         sub     edx, eax
  832.         jae     @f
  833.         xor     edx, edx
  834. @@:
  835.         mov     [ebp + panel1_start - panel1_data], edx
  836.         jmp     .done_redraw
  837. .pgup:
  838.         mov     eax, [ebp + panel1_colst - panel1_data]
  839.         dec     eax
  840.         jnz     @f
  841.         inc     eax
  842. @@:
  843.         test    ecx, ecx
  844.         jnz     @f
  845.         ret
  846. @@:
  847.         sub     ecx, eax
  848.         jae     @f
  849.         xor     ecx, ecx
  850. @@:
  851.         mov     [ebp + panel1_index - panel1_data], ecx
  852.         dec     ecx
  853.         jmp     .finalize_left
  854. .right:
  855.         mov     eax, [ebp + panel1_colsz - panel1_data]
  856.         add     ecx, eax
  857.         cmp     ecx, [ebp + panel1_numfiles - panel1_data]
  858.         jb      @f
  859.         mov     ecx, [ebp + panel1_numfiles - panel1_data]
  860.         dec     ecx
  861. @@:
  862.         mov     [ebp + panel1_index - panel1_data], ecx
  863. .finalize_right:
  864.         cmp     ecx, ebx
  865.         jb      .done_redraw
  866.         add     ebx, eax
  867.         cmp     ebx, [ebp + panel1_numfiles - panel1_data]
  868.         jbe     @f
  869.         mov     ebx, [ebp + panel1_numfiles - panel1_data]
  870. @@:
  871.         sub     ebx, [ebp + panel1_colst - panel1_data]
  872.         jae     @f
  873.         xor     ebx, ebx
  874. @@:
  875.         mov     [ebp + panel1_start - panel1_data], ebx
  876.         jmp     .done_redraw
  877. .pgdn:
  878.         mov     eax, [ebp + panel1_colst - panel1_data]
  879.         dec     eax
  880.         jnz     @f
  881.         inc     eax
  882. @@:
  883.         add     ecx, eax
  884.         cmp     ecx, [ebp + panel1_numfiles - panel1_data]
  885.         jb      @f
  886.         mov     ecx, [ebp + panel1_numfiles - panel1_data]
  887.         dec     ecx
  888. @@:
  889.         mov     [ebp + panel1_index - panel1_data], ecx
  890.         inc     ecx
  891.         jmp     .finalize_right
  892. .tab:
  893.         xor     [active_panel], panel1_data xor panel2_data
  894.         call    draw_cmdbar
  895.         call    draw_panel
  896.         mov     ebp, [active_panel]
  897.         jmp     .done_redraw
  898. .home:
  899.         and     [ebp + panel1_start - panel1_data], 0
  900.         and     [ebp + panel1_index - panel1_data], 0
  901.         jmp     .done_redraw
  902. .end:
  903.         mov     eax, [ebp + panel1_numfiles - panel1_data]
  904.         dec     eax
  905.         mov     [ebp + panel1_index - panel1_data], eax
  906.         inc     eax
  907.         sub     eax, [ebp + panel1_colst - panel1_data]
  908.         jae     @f
  909.         xor     eax, eax
  910. @@:
  911.         mov     [ebp + panel1_start - panel1_data], eax
  912.         jmp     .done_redraw
  913. .enter:
  914.         call    get_curfile_folder_entry
  915.         test    byte [ecx], 10h
  916.         jnz     .enter_folder
  917.         call    find_extension
  918.         jc      .run_app
  919. .run_association:
  920.         cmp     byte [edi], 0
  921.         jz      .l1
  922.         cmp     byte [edi], ';'
  923.         jnz     @f
  924. .l1:
  925.         ret
  926. @@:
  927.         mov     esi, edi
  928. @@:
  929.         lodsb
  930.         test    al, al
  931.         jz      @f
  932.         cmp     al, ';'
  933.         jnz     @b
  934.         dec     esi
  935.         mov     byte [esi], 0
  936.         mov     [restore_semicolon], esi
  937. @@:
  938. .run_association2:
  939.         mov     [execparams], execdata
  940.         mov     [execptr], edi
  941.         jmp     .dorun
  942. .run_app:
  943.         mov     [execptr], execdata
  944.         and     [execparams], 0
  945. .dorun:
  946.         lea     esi, [ebp + panel1_dir - panel1_data]
  947.         mov     edi, execdata
  948. @@:
  949.         lodsb
  950.         test    al, al
  951.         jz      @f
  952.         stosb
  953.         cmp     edi, execdataend-1
  954.         jae     .bigfilename
  955.         jmp     @b
  956. @@:
  957.         lea     esi, [ecx+40]
  958.         mov     al, '/'
  959.         stosb
  960. @@:
  961.         lodsb
  962.         stosb
  963.         cmp     edi, execdataend
  964.         ja      .bigfilename
  965.         test    al, al
  966.         jnz     @b
  967. ; for fasm call - special handling, because
  968. ; 1) fasm command line convention is different : fasm infile,outfile[,path] rather than tinypad infile
  969. ; 2) fasm will probably create new file in directory, so we want to reload panel data
  970.         xor     edx, edx
  971.         cmp     [execparams], edx
  972.         jz      .nofasm
  973.         mov     esi, [execptr]
  974. @@:
  975.         lodsb
  976.         test    al, al
  977.         jnz     @b
  978.         mov     eax, [esi-5]
  979.         or      eax, 0x20202020
  980.         cmp     eax, 'fasm'
  981.         jnz     .nofasm
  982.         cmp     edi, execdata+(execdataend-execdata)/2
  983.         ja      .bigfilename
  984.         mov     esi, execdata
  985. @@:
  986.         lodsb
  987.         stosb
  988.         test    al, al
  989.         jnz     @b
  990.         mov     byte [esi-1], ','
  991.         inc     edx
  992. ; output file: no extension if input file has extension, '.bin' otherwise
  993.         push    edi
  994. @@:
  995.         dec     edi
  996.         cmp     byte [edi], '.'
  997.         jz      .ptfound
  998.         cmp     byte [edi], '/'
  999.         jnz     @b
  1000.         pop     edi
  1001.         cmp     edi, execdataend-4
  1002.         ja      .bigfilename
  1003.         mov     dword [edi-1], '.bin'
  1004.         mov     byte [edi+3], 0
  1005.         jmp     .nofasm
  1006. .ptfound:
  1007.         mov     byte [edi], 0
  1008.         pop     edi
  1009. .nofasm:
  1010.         mov     ebx, execinfo
  1011. ; if command line is more than 256 symbols, the kernel will truncate it
  1012. ; we does not want this!
  1013. ; N.B. We know that command line is either NULL or execdata, which is always ASCIIZ string,
  1014. ;      but can be up to 1023 symbols
  1015.         mov     esi, [ebx+8]
  1016.         test    esi, esi
  1017.         jz      .cmdlinelenok
  1018. @@:
  1019.         lodsb
  1020.         test    al, al
  1021.         jnz     @b
  1022.         sub     esi, [ebx+8]
  1023.         dec     esi
  1024.         cmp     esi, 256
  1025.         ja      .bigcmdline
  1026. .cmdlinelenok:
  1027.         push    70
  1028.         pop     eax
  1029.         mcall
  1030.         xor     esi, esi
  1031.         xchg    esi, [restore_semicolon]
  1032.         test    esi, esi
  1033.         jz      @f
  1034.         mov     byte [esi], ';'
  1035. @@:
  1036.         neg     eax
  1037.         js      @f
  1038.         push    dword aContinue
  1039.         mov     esi, esp
  1040.         call    get_error_msg
  1041.         push    eax
  1042.         push    dword aRunError
  1043.         mov     eax, esp
  1044.         push    esi
  1045.         push    1
  1046.         push    eax
  1047.         push    2
  1048.         push    -1
  1049.         push    -1
  1050.         push    dword aError
  1051.         call    SayErr
  1052.         add     esp, 3*4
  1053.         ret
  1054. @@:
  1055.         test    edx, edx
  1056.         jz      @f
  1057.         push    5
  1058.         pop     eax
  1059.         push    20
  1060.         pop     ebx
  1061.         mcall
  1062.         jmp     .ctrl_r
  1063. @@:
  1064.         ret
  1065. .bigfilename3:
  1066.         pop     esi
  1067. .bigfilename2:
  1068.         pop     esi
  1069. .bigfilename:
  1070.         mov     eax, aFileNameTooBig
  1071. .l2:
  1072.         xor     esi, esi
  1073.         xchg    esi, [restore_semicolon]
  1074.         test    esi, esi
  1075.         jz      @f
  1076.         mov     byte [esi], ';'
  1077. @@:
  1078.         push    dword aContinue
  1079.         mov     esi, esp
  1080.         push    eax
  1081.         mov     eax, esp
  1082.         push    esi
  1083.         push    1
  1084.         push    eax
  1085.         push    1
  1086.         push    -1
  1087.         push    -1
  1088.         push    dword aError
  1089.         call    SayErr
  1090.         add     esp, 2*4
  1091.         ret
  1092. .bigcmdline:
  1093.         mov     eax, aCmdLineTooBig
  1094.         jmp     .l2
  1095. .bigfoldername2:
  1096.         mov     byte [ecx], 0
  1097. .bigfoldername:
  1098.         mov     eax, aFolderNameTooBig
  1099.         jmp     .l2
  1100. .copytoself:
  1101.         mov     eax, aCannotCopyToSelf
  1102.         jmp     .l2
  1103. .enter_folder:
  1104.         lea     esi, [ecx+40]
  1105.         cmp     word [esi], '..'
  1106.         jnz     @f
  1107.         cmp     byte [esi+2], 0
  1108.         jz      .dotdot
  1109. @@:
  1110.         push    esi
  1111.         lea     esi, [ebp + panel1_dir - panel1_data]
  1112.         mov     edi, prev_dir
  1113. @@:
  1114.         lodsb
  1115.         stosb
  1116.         test    al, al
  1117.         jnz     @b
  1118.         lea     edi, [esi-1]
  1119.         lea     edx, [ebp + panel1_dir - panel1_data + 1024]
  1120.         cmp     esi, edx
  1121.         pop     esi
  1122.         jae     .bigfoldername
  1123.         mov     ecx, edi
  1124.         mov     al, '/'
  1125.         cmp     [edi-1], al
  1126.         jz      @f
  1127.         stosb
  1128. @@:
  1129.         lodsb
  1130.         cmp     edi, edx
  1131.         jae     .bigfoldername2
  1132.         stosb
  1133.         test    al, al
  1134.         jnz     @b
  1135. .reread:
  1136.         call    read_folder
  1137. .done_cmdbar:
  1138.         call    draw_cmdbar
  1139.         jmp     .done_redraw
  1140. .dotdot:
  1141.         lea     edi, [ebp + panel1_dir - panel1_data]
  1142.         mov     al, 0
  1143.         or      ecx, -1
  1144.         repnz   scasb
  1145.         dec     edi
  1146.         mov     al, '/'
  1147.         std
  1148.         repnz   scasb
  1149.         cld
  1150.         inc     edi
  1151.         mov     byte [edi], 0
  1152.         inc     edi
  1153.         push    edi
  1154.         call    read_folder
  1155.         pop     edi
  1156.         mov     edx, [ebp + panel1_files - panel1_data]
  1157.         mov     ecx, [ebp + panel1_numfiles - panel1_data]
  1158. .scanloop:
  1159.         mov     esi, [edx]
  1160.         add     esi, 40
  1161.         push    esi edi
  1162. @@:
  1163.         lodsb
  1164.         call    match_symbol
  1165.         jnz     @f
  1166.         inc     edi
  1167.         test    al, al
  1168.         jnz     @b
  1169. @@:
  1170.         pop     edi esi
  1171.         jz      .scanfound
  1172.         add     edx, 4
  1173.         loop    .scanloop
  1174.         jmp     .scandone
  1175. .scanfound:
  1176.         sub     edx, [ebp + panel1_files - panel1_data]
  1177.         shr     edx, 2
  1178.         mov     [ebp + panel1_index - panel1_data], edx
  1179.         sub     edx, [ebp + panel1_colst - panel1_data]
  1180.         jb      .scandone
  1181.         inc     edx
  1182.         mov     [ebp + panel1_start - panel1_data], edx
  1183. .scandone:
  1184.         jmp     .done_cmdbar
  1185. .ctrl_f39:
  1186.         sub     al, 0x3D
  1187.         add     al, al
  1188.         mov     ah, [ebp + panel1_sortmode - panel1_data]
  1189.         and     ah, 0xFE
  1190.         cmp     al, ah
  1191.         jnz     @f
  1192.         and     [ebp + panel1_sortmode - panel1_data], 1
  1193.         or      al, [ebp + panel1_sortmode - panel1_data]
  1194.         xor     al, 1
  1195. @@:
  1196.         mov     [ebp + panel1_sortmode - panel1_data], al
  1197.         mov     eax, [ebp + panel1_index - panel1_data]
  1198.         mov     ecx, [ebp + panel1_files - panel1_data]
  1199.         push    dword [ecx+eax*4]
  1200.         push    ecx
  1201.         call    sort_files
  1202.         pop     edi
  1203.         pop     eax
  1204.         or      ecx, -1
  1205.         repnz   scasd
  1206.         not     ecx
  1207.         dec     ecx
  1208.         mov     [ebp + panel1_index - panel1_data], ecx
  1209.         sub     ecx, [ebp + panel1_start - panel1_data]
  1210.         jb      .less_start
  1211.         sub     ecx, [ebp + panel1_colst - panel1_data]
  1212.         jae     .gr_end
  1213. @@:     jmp     .done_redraw
  1214. .less_start:
  1215.         add     [ebp + panel1_start - panel1_data], ecx
  1216.         jmp     @b
  1217. .gr_end:
  1218.         inc     ecx
  1219.         add     [ebp + panel1_start - panel1_data], ecx
  1220.         jmp     @b
  1221. .alt_f12:
  1222.         mov     ebp, panel1_data
  1223.         cmp     al, 0x3B
  1224.         jz      @f
  1225.         mov     ebp, panel2_data
  1226. @@:
  1227. ; get drives list
  1228.         mov     ebx, dirinfo
  1229.         mov     [ebx+dirinfo.size-dirinfo], 1
  1230.         mov     [ebx+dirinfo.dirdata-dirinfo], driveinfo
  1231.         mov     [ebx+dirinfo.name-dirinfo], tmpname
  1232.         mov     byte [tmpname], '/'
  1233.         xor     edx, edx
  1234.         xor     ecx, ecx
  1235. .drive_loop_e:
  1236.         mov     byte [tmpname+1], 0
  1237.         push    70
  1238.         pop     eax
  1239.         mcall
  1240.         mov     ebx, dirinfo
  1241.         test    eax, eax
  1242.         jnz     .drive_loop_e_done
  1243.         mov     esi, driveinfo+32+40
  1244.         mov     edi, tmpname+1
  1245. @@:
  1246.         lodsb
  1247.         stosb
  1248.         test    al, al
  1249.         jnz     @b
  1250.         push    [ebx+dirinfo.first-dirinfo]
  1251.         and     [ebx+dirinfo.first-dirinfo], 0
  1252. .drive_loop_i:
  1253.         push    70
  1254.         pop     eax
  1255.         mcall
  1256.         mov     ebx, dirinfo
  1257.         test    eax, eax
  1258.         jnz     .drive_loop_i_done
  1259.         add     ecx, 32+8
  1260.         push    ecx
  1261.         and     ecx, 0xFFF
  1262.         cmp     ecx, 32+8
  1263.         pop     ecx
  1264.         ja      @f
  1265.         call    xpgrealloc
  1266.         mov     edx, eax
  1267.         test    eax, eax
  1268.         jnz     @f
  1269.         pop     eax
  1270.         ret
  1271. @@:
  1272.         lea     edi, [edx+ecx-32]
  1273.         mov     esi, tmpname
  1274. @@:
  1275.         lodsb
  1276.         test    al, al
  1277.         jz      @f
  1278.         stosb
  1279.         jmp     @b
  1280. @@:
  1281.         mov     esi, driveinfo+32+40
  1282.         mov     al, '/'
  1283.         stosb
  1284. @@:
  1285.         lodsb
  1286.         stosb
  1287.         test    al, al
  1288.         jnz     @b
  1289.         inc     [ebx+dirinfo.first-dirinfo]
  1290.         jmp     .drive_loop_i
  1291. .drive_loop_i_done:
  1292.         pop     [ebx+dirinfo.first-dirinfo]
  1293.         inc     [ebx+dirinfo.first-dirinfo]
  1294.         jmp     .drive_loop_e
  1295. .drive_loop_e_done:
  1296.         and     [ebx+dirinfo.first-dirinfo], 0
  1297.         mov     edi, edx
  1298.         xor     esi, esi
  1299.         add     ecx, edx
  1300. @@:
  1301.         and     dword [edi], 0
  1302.         mov     dword [edi+4], esi
  1303.         mov     esi, edi
  1304.         add     edi, 32+8
  1305.         cmp     edi, ecx
  1306.         jae     @f
  1307.         mov     [esi], edi
  1308.         jmp     @b
  1309. @@:
  1310.         mov     ecx, edx
  1311.         lea     edi, [ebp + panel1_dir - panel1_data]
  1312. .find_cur_drive_loop:
  1313.         push    edi
  1314.         lea     esi, [ecx+8]
  1315. @@:
  1316.         lodsb
  1317.         test    al, al
  1318.         jz      .cur_drive_found
  1319.         call    match_symbol
  1320.         jnz     @f
  1321.         inc     edi
  1322.         jmp     @b
  1323. @@:
  1324.         cmp     dword [ecx], 0
  1325.         jz      @f
  1326.         pop     edi
  1327.         mov     ecx, [ecx]
  1328.         jmp     .find_cur_drive_loop
  1329. @@:
  1330.         mov     ecx, edx
  1331. .cur_drive_found:
  1332.         pop     edi
  1333.         push    1
  1334.         push    aDrive
  1335.         push    ecx
  1336.         mov     eax, [ebp + panel1_height - panel1_data]
  1337.         sub     eax, 2
  1338.         jae     @f
  1339.         add     eax, 2
  1340. @@:
  1341.         push    eax
  1342.         push    [ebp + panel1_width - panel1_data]
  1343.         push    [ebp + panel1_top - panel1_data]
  1344.         push    [ebp + panel1_left - panel1_data]
  1345.         call    menu_centered_in
  1346.         cmp     eax, -1
  1347.         jz      .ret2
  1348.         lea     esi, [eax+8]
  1349.         lea     edi, [ebp + panel1_dir - panel1_data]
  1350.         push    ecx esi edi
  1351.         mov     esi, edi
  1352.         mov     edi, prev_dir
  1353.         mov     ecx, 1024/4
  1354.         rep     movsd
  1355.         pop     edi esi ecx
  1356. @@:
  1357.         lodsb
  1358.         stosb
  1359.         test    al, al
  1360.         jnz     @b
  1361.         mov     ecx, edx
  1362.         call    pgfree
  1363.         call    read_folder
  1364.         jmp     .done_redraw
  1365. .shift_f5:
  1366.         call    get_curfile_folder_entry
  1367.         lea     esi, [ecx+40]
  1368.         mov     edi, CopyDestEditBuf
  1369.         mov     eax, CopyDestEditBuf.length
  1370.         stosd
  1371.         scasd
  1372.         xor     eax, eax
  1373.         stosd
  1374.         mov     edx, edi
  1375. @@:
  1376.         lodsb
  1377.         test    al, al
  1378.         jz      .f5_common
  1379.         stosb
  1380.         jmp     @b
  1381. .f5:
  1382.         mov     edi, CopyDestEditBuf
  1383.         mov     eax, CopyDestEditBuf.length
  1384.         stosd
  1385.         scasd
  1386.         xor     eax, eax
  1387.         stosd
  1388.         mov     edx, edi
  1389.         mov     esi, ebp
  1390.         xor     esi, panel1_data xor panel2_data
  1391.         add     esi, panel1_dir - panel1_data
  1392. @@:
  1393.         lodsb
  1394.         test    al, al
  1395.         jz      @f
  1396.         cmp     edi, CopyDestEditBuf+12+511
  1397.         jae     .bigfoldername
  1398.         stosb
  1399.         jmp     @b
  1400. @@:
  1401.         mov     al, '/'
  1402.         stosb
  1403. .f5_common:
  1404.         mov     byte [edi], 0
  1405.         sub     edi, edx
  1406.         mov     [edx-8], edi
  1407.         mov     edi, CopySourceTextBuf
  1408.         mov     esi, aCopy1
  1409. @@:
  1410.         lodsb
  1411.         test    al, al
  1412.         jz      @f
  1413.         stosb
  1414.         jmp     @b
  1415. @@:
  1416.         call    get_curfile_folder_entry
  1417.         lea     esi, [ecx+40]
  1418.         lea     eax, [esi+1]
  1419. @@:
  1420.         inc     esi
  1421.         cmp     byte [esi-1], 0
  1422.         jnz     @b
  1423.         sub     esi, eax
  1424.         xchg    eax, esi
  1425.         dec     esi
  1426.         mov     edx, [cur_width]
  1427.         sub     edx, 50
  1428.         sub     eax, edx
  1429.         jbe     @f
  1430.         add     esi, eax
  1431.         mov     al, '.'
  1432.         stosb
  1433.         stosb
  1434.         stosb
  1435. @@:
  1436.         lodsb
  1437.         test    al, al
  1438.         jz      @f
  1439.         stosb
  1440.         jmp     @b
  1441. @@:
  1442.         mov     esi, aCopy2
  1443. @@:
  1444.         lodsb
  1445.         stosb
  1446.         test    al, al
  1447.         jnz     @b
  1448.         mov     ebx, copy_dlgdata
  1449.         mov     eax, [cur_width]
  1450.         sub     eax, 12
  1451.         mov     [ebx + dlgtemplate.width], eax
  1452.         dec     eax
  1453.         dec     eax
  1454.         mov     [ebx - copy_dlgdata + copy_dlgdata.width2], eax
  1455.         mov     [ebx - copy_dlgdata + copy_dlgdata.width3], eax
  1456.         shr     eax, 1
  1457.         dec     eax
  1458.         dec     eax
  1459.         mov     [ebx - copy_dlgdata + copy_dlgdata.copy_x2], eax
  1460.         sub     eax, aCopyLength-1
  1461.         mov     [ebx - copy_dlgdata + copy_dlgdata.copy_x1], eax
  1462.         add     eax, aCopyLength+3
  1463.         mov     [ebx - copy_dlgdata + copy_dlgdata.cnl_x1], eax
  1464.         add     eax, aCancelBLength - 1
  1465.         mov     [ebx - copy_dlgdata + copy_dlgdata.cnl_x2], eax
  1466.         mov     byte [ebx - copy_dlgdata + copy_dlgdata.flags0], 0xC
  1467.         and     byte [ebx - copy_dlgdata + copy_dlgdata.flags1], not 4
  1468.         and     byte [ebx - copy_dlgdata + copy_dlgdata.flags2], not 4
  1469.         push    ebx
  1470.         call    DialogBox
  1471.         cmp     eax, copy_dlgdata.copy_btn
  1472.         jnz     .ret2
  1473. ; Š®¯¨à㥬
  1474.         mov     esi, CopyDestEditBuf+12
  1475.         mov     edi, esi
  1476.         xor     eax, eax
  1477.         or      ecx, -1
  1478.         repnz   scasb
  1479.         dec     edi
  1480.         dec     edi
  1481.         cmp     edi, esi
  1482.         jb      .ret2
  1483.         cmp     byte [edi], '/'
  1484.         jnz     @f
  1485. ;  «¨ç¨¥/®âáãâá⢨¥ § ª ­ç¨¢ î饣® á«íè  ¢ ¦­® ⮫쪮 ¤«ï ª®¯¨à®¢ ­¨ï ¯ ¯®ª
  1486.         cmp     edi, esi
  1487.         jz      @f
  1488.         mov     byte [edi], 0
  1489.         dec     edi
  1490. @@:
  1491. ; …᫨ ¯ãâì ­¥ ­ ç¨­ ¥âáï á® á«íè , áç¨â ¥¬ ¥£® ®â­®á¨â¥«ì­® ⥪ã饩 ¯ ¯ª¨
  1492.         cmp     byte [esi], '/'
  1493.         jz      .copy_absolute_path
  1494.         push    esi
  1495.         push    edi
  1496.         lea     edi, [ebp + panel1_dir - panel1_data]
  1497.         or      ecx, -1
  1498.         xor     eax, eax
  1499.         repnz   scasb
  1500.         not     ecx
  1501.         pop     edi
  1502.         push    edi
  1503.         add     edi, ecx
  1504.         cmp     edi, CopyDestEditBuf+12+513
  1505.         pop     edi
  1506.         jb      @f
  1507.         pop     esi
  1508.         jmp     .bigfilename
  1509. @@:
  1510.         lea     edx, [edi+2]
  1511.         sub     edx, esi
  1512.         lea     edi, [edi+ecx+1]
  1513.         xchg    ecx, edx
  1514.         std
  1515.         lea     esi, [esi+ecx-1]
  1516.         rep     movsb
  1517.         cld
  1518.         pop     edi
  1519.         lea     esi, [ebp + panel1_dir - panel1_data]
  1520.         push    edi
  1521.         mov     ecx, edx
  1522.         rep     movsb
  1523.         mov     byte [edi-1], '/'
  1524.         pop     esi
  1525. .copy_absolute_path:
  1526. ; ®«ãç ¥¬  âਡãâë ­ §­ ç¥­¨ï
  1527.         mov     cl, 0x10
  1528.         xor     eax, eax
  1529.         mov     edi, esi
  1530. .countslashloop:
  1531.         cmp     byte [edi], '/'
  1532.         jnz     @f
  1533.         inc     eax
  1534. @@:
  1535.         inc     edi
  1536.         cmp     byte [edi], 0
  1537.         jnz     .countslashloop
  1538.         cmp     eax, 2
  1539.         jbe     @f
  1540.         mov     ebx, attrinfo
  1541.         mov     [attrinfo.attr], 0
  1542.         mov     [ebx + attrinfo.name - attrinfo], esi
  1543.         push    70
  1544.         pop     eax
  1545.         mcall
  1546.         mov     cl, byte [attrinfo.attr]
  1547. @@:
  1548.         test    cl, 0x10
  1549.         jz      .copyfile
  1550. ;  ¬ ¯®¤áã­ã«¨ ª â «®£ ­ §­ ç¥­¨ï, ¤®¯¨á뢠¥¬ ¨¬ï ä ©« 
  1551.         cmp     edi, CopyDestEditBuf+12+513
  1552.         jae     .bigfilename
  1553.         mov     al, '/'
  1554.         stosb
  1555.         push    esi
  1556.         call    get_curfile_folder_entry
  1557.         lea     esi, [ecx+40]
  1558. @@:
  1559.         lodsb
  1560.         cmp     edi, CopyDestEditBuf+12+513
  1561.         jae     .bigfilename2
  1562.         stosb
  1563.         test    al, al
  1564.         jnz     @b
  1565.         pop     esi
  1566. .copyfile:
  1567. ; ˆ¬ï ¨á室­®£® ä ©« 
  1568.         push    esi
  1569.         lea     esi, [ebp+panel1_dir-panel1_data]
  1570.         mov     edi, saved_file_name
  1571.         push    edi
  1572. @@:
  1573.         lodsb
  1574.         test    al, al
  1575.         jz      @f
  1576.         stosb
  1577.         jmp     @b
  1578. @@:
  1579.         mov     al, '/'
  1580.         stosb
  1581.         call    get_curfile_folder_entry
  1582.         lea     esi, [ecx+40]
  1583. @@:
  1584.         lodsb
  1585.         cmp     edi, saved_file_name+1024
  1586.         jae     .bigfilename3
  1587.         stosb
  1588.         test    al, al
  1589.         jnz     @b
  1590.         pop     esi
  1591.         pop     edi
  1592. ; ¥«ì§ï ᪮¯¨à®¢ âì ä ©« ¯®¢¥àå á ¬®£® ᥡï!
  1593.         push    esi edi
  1594.         call    strcmpi
  1595.         pop     edi esi
  1596.         jz      .copytoself
  1597. ; ‘®¡á⢥­­®, ª®¯¨à㥬
  1598. ; esi->source name, edi->destination name
  1599.         mov     [writeinfo.code], 2
  1600.         mov     [writeinfo.name], edi
  1601.         and     dword [writeinfo.first], 0
  1602.         and     dword [writeinfo.first+4], 0
  1603.         mov     [writeinfo.data], copy_buffer
  1604.         mov     ebx, readinfo
  1605.         and     dword [ebx+readinfo.first-readinfo], 0
  1606.         and     dword [ebx+readinfo.first+4-readinfo], 0
  1607.         mov     [ebx+readinfo.size-readinfo], copy_buffer_size
  1608.         mov     [ebx+readinfo.data-readinfo], copy_buffer
  1609.         mov     [ebx+readinfo.name-readinfo], esi
  1610. .copyloop:
  1611.         mov     ebx, readinfo
  1612.         push    70
  1613.         pop     eax
  1614.         mcall
  1615.         test    eax, eax
  1616.         jz      .copyreadok
  1617.         cmp     eax, 6
  1618.         jz      .copyreadok
  1619.         push    esi
  1620.         push    dword aCannotReadFile
  1621.         call    get_error_msg
  1622.         push    eax
  1623.         mov     eax, esp
  1624.         push    dword RetryOrCancelBtn
  1625.         push    2
  1626.         push    eax
  1627.         push    3
  1628.         push    -1
  1629.         push    -1
  1630.         push    dword aError
  1631.         call    SayErr
  1632.         add     esp, 3*4
  1633.         test    eax, eax
  1634.         jz      .copyloop
  1635.         jmp     .copyfailed
  1636. .copyreadok:
  1637.         test    ebx, ebx
  1638.         jz      .copydone
  1639.         add     dword [readinfo.first], ebx
  1640.         adc     dword [readinfo.first+4], 0
  1641.         mov     [writeinfo.size], ebx
  1642. .copywrite:
  1643.         mov     ebx, writeinfo
  1644.         push    70
  1645.         pop     eax
  1646.         mcall
  1647.         test    eax, eax
  1648.         jz      .copywriteok
  1649.         push    edi
  1650.         push    dword aCannotWriteFile
  1651.         call    get_error_msg
  1652.         push    eax
  1653.         mov     eax, esp
  1654.         push    dword RetryOrCancelBtn
  1655.         push    2
  1656.         push    eax
  1657.         push    3
  1658.         push    -1
  1659.         push    -1
  1660.         push    dword aError
  1661.         call    SayErr
  1662.         add     esp, 3*4
  1663.         test    eax, eax
  1664.         jz      .copywrite
  1665.         jmp     .copyfailed
  1666. .copywriteok:
  1667.         mov     ecx, [writeinfo.size]
  1668.         add     dword [writeinfo.first], ecx
  1669.         adc     dword [writeinfo.first+4], 0
  1670.         mov     [writeinfo.code], 3
  1671.         cmp     ecx, copy_buffer_size
  1672.         jz      .copyloop
  1673. .copydone:
  1674.         push    ebp
  1675.         call    .ctrl_r
  1676.         pop     ebp
  1677.         xor     ebp, panel1_data xor panel2_data
  1678.         jmp     .ctrl_r
  1679. .copyfailed:
  1680.         cmp     [bConfirmDeleteIncomplete], 0
  1681.         jz      @f
  1682.         cmp     [writeinfo.code], 2
  1683.         jz      .copydone
  1684.         push    dword aIncompleteFile
  1685.         mov     eax, esp
  1686.         push    dword DeleteOrKeepBtn
  1687.         push    2
  1688.         push    eax
  1689.         push    1
  1690.         push    -1
  1691.         push    -1
  1692.         push    dword aCopyCaption
  1693.         call    SayErr
  1694.         add     esp, 4
  1695.         test    eax, eax
  1696.         jnz     .copydone
  1697. @@:
  1698.         mov     ebx, delinfo
  1699.         push    dword [ebx+21]
  1700.         mov     dword [ebx+21], edi
  1701.         push    70
  1702.         pop     eax
  1703.         mcall
  1704. ; ignore errors
  1705.         pop     dword [delinfo+21]
  1706.         jmp     .copydone
  1707.  
  1708. .f3:
  1709.         call    view_file
  1710. .ret2:
  1711.         ret
  1712. .f8_has_selected:
  1713.         mov     edi, saved_file_name+511
  1714.         mov     byte [edi], 0
  1715.         mov     eax, [ebp + panel1_selected_num - panel1_data]
  1716. if lang eq ru
  1717.         cmp     eax, 1
  1718.         jz      @f
  1719.         dec     edi
  1720.         mov     byte [edi], ' '
  1721.         cmp     eax, 4
  1722.         jbe     @f
  1723.         dec     edi
  1724.         mov     word [edi], '®¢'
  1725. @@:
  1726.         mov     dword [edi-4], '¬¥­â'
  1727.         mov     dword [edi-8], ' í«¥'
  1728.         sub     edi, 8
  1729. else
  1730.         cmp     eax, 1
  1731.         jz      @f
  1732.         dec     edi
  1733.         mov     byte [edi], 's'
  1734. @@:
  1735.         mov     dword [edi-4], 'item'
  1736.         mov     byte [edi-5], ' '
  1737.         sub     edi, 5
  1738. end if
  1739.         xor     edx, edx
  1740.         push    10
  1741.         pop     ecx
  1742. @@:
  1743.         div     ecx
  1744.         add     dl, '0'
  1745.         dec     edi
  1746.         mov     [edi], dl
  1747.         xor     edx, edx
  1748.         test    eax, eax
  1749.         jnz     @b
  1750.         push    edi
  1751.         push    aConfirmDeleteText
  1752.         mov     eax, esp
  1753.         push    DeleteOrCancelBtn
  1754.         push    2
  1755.         push    eax
  1756.         push    2
  1757.         push    -1
  1758.         push    -1
  1759.         push    aDeleteCaption
  1760.         call    Message
  1761.         add     esp, 8
  1762.         test    eax, eax
  1763.         jnz     .ret2
  1764.         mov     [del_bSkipAll], 0
  1765.         mov     ecx, [ebp + panel1_numfiles - panel1_data]
  1766.         jecxz   .ret2
  1767.         mov     esi, [ebp + panel1_files - panel1_data]
  1768. .f8_loop:
  1769.         lodsd
  1770.         test    byte [eax+303], 1
  1771.         jz      @f
  1772.         call    delete_file
  1773.         ja      .f8_multiple_cancel
  1774. @@:
  1775.         loop    .f8_loop
  1776. .f8_multiple_cancel:
  1777.         jmp     .ctrl_r
  1778. .f8:
  1779.         cmp     [ebp + panel1_selected_num - panel1_data], 0
  1780.         jnz     .f8_has_selected
  1781.         call    get_curfile_folder_entry
  1782.         cmp     [bConfirmDelete], 0
  1783.         jz      .f8_allowed
  1784.         lea     eax, [ecx+40]
  1785.         push    eax
  1786.         mov     esi, aConfirmDeleteText
  1787.         mov     edi, aConfirmDeleteTextBuf
  1788.         push    edi
  1789. @@:
  1790.         lodsb
  1791.         stosb
  1792.         test    al, al
  1793.         jnz     @b
  1794.         dec     edi
  1795.         mov     esi, aDeleteFolder
  1796.         test    byte [ecx], 10h
  1797.         jnz     @f
  1798.         mov     esi, aDeleteFile
  1799. @@:
  1800.         lodsb
  1801.         stosb
  1802.         test    al, al
  1803.         jnz     @b
  1804.         mov     eax, esp
  1805.         push    DeleteOrCancelBtn
  1806.         push    2
  1807.         push    eax
  1808.         push    2
  1809.         push    -1
  1810.         push    -1
  1811.         push    aDeleteCaption
  1812.         call    Message
  1813.         add     esp, 8
  1814.         test    eax, eax
  1815.         jz      .f8_allowed
  1816.         ret
  1817. .f8_allowed:
  1818.         mov     [del_bSkipAll], 0
  1819.         mov     eax, ecx
  1820.         call    delete_file
  1821. .ctrl_r:
  1822. ; Rescan panel
  1823. ;       call    read_folder
  1824. ;       jmp     .done_redraw
  1825.         mov     eax, [ebp + panel1_index - panel1_data]
  1826.         push    eax
  1827.         call    get_curfile_name
  1828.         mov     esi, ecx
  1829.         mov     edi, saved_file_name
  1830. @@:
  1831.         lodsb
  1832.         stosb
  1833.         test    al, al
  1834.         jnz     @b
  1835.         push    [ebp + panel1_start - panel1_data]
  1836.         call    read_folder
  1837.         pop     [ebp + panel1_start - panel1_data]
  1838.         pop     [ebp + panel1_index - panel1_data]
  1839.         or      eax, -1
  1840. @@:
  1841.         inc     eax
  1842.         cmp     eax, [ebp + panel1_numfiles - panel1_data]
  1843.         jae     .ctrl_r.notfound
  1844.         mov     ecx, [ebp + panel1_files - panel1_data]
  1845.         mov     esi, [ecx+eax*4]
  1846.         add     esi, 40
  1847.         mov     edi, saved_file_name
  1848.         call    strcmpi
  1849.         jnz     @b
  1850. .ctrl_r.found:
  1851.         mov     [ebp + panel1_index - panel1_data], eax
  1852. .ctrl_r.notfound:
  1853.         mov     eax, [ebp + panel1_numfiles - panel1_data]
  1854.         dec     eax
  1855.         cmp     [ebp + panel1_index - panel1_data], eax
  1856.         jbe     @f
  1857.         mov     [ebp + panel1_index - panel1_data], eax
  1858. @@:
  1859.         mov     eax, [ebp + panel1_index - panel1_data]
  1860.         cmp     [ebp + panel1_start - panel1_data], eax
  1861.         jbe     @f
  1862.         mov     [ebp + panel1_start - panel1_data], eax
  1863. @@:
  1864.         inc     eax
  1865.         sub     eax, [ebp + panel1_colst - panel1_data]
  1866.         jae     @f
  1867.         xor     eax, eax
  1868. @@:
  1869.         cmp     [ebp + panel1_start - panel1_data], eax
  1870.         jae     @f
  1871.         mov     [ebp + panel1_start - panel1_data], eax
  1872. @@:
  1873.         mov     eax, [ebp + panel1_numfiles - panel1_data]
  1874.         sub     eax, [ebp + panel1_colst - panel1_data]
  1875.         jbe     @f
  1876.         cmp     [ebp + panel1_start - panel1_data], eax
  1877.         jbe     @f
  1878.         mov     [ebp + panel1_start - panel1_data], eax
  1879. @@:
  1880.         jmp     .done_redraw
  1881. .menu:
  1882. ; display context menu
  1883. ; ignore folders
  1884.         call    get_curfile_folder_entry
  1885.         test    byte [ecx], 10h
  1886.         jz      @f
  1887. .menuret:
  1888.         ret
  1889. @@:
  1890.         call    find_extension
  1891.         jc      .menuret
  1892. ; known extension
  1893. @@:
  1894.         cmp     byte [edi], 0
  1895.         jz      .menuret
  1896.         cmp     byte [edi], ';'
  1897.         jz      @f
  1898.         inc     edi
  1899.         jmp     @b
  1900. @@:
  1901.         inc     edi
  1902. @@:
  1903.         inc     edi
  1904.         cmp     byte [edi-1], ' '
  1905.         jz      @b
  1906.         cmp     byte [edi-1], 9
  1907.         jz      @b
  1908.         dec     edi
  1909.         cmp     byte [edi], 0
  1910.         jz      .menuret
  1911.         mov     ecx, esi
  1912. @@:
  1913.         inc     ecx
  1914.         cmp     byte [ecx-1], 0
  1915.         jnz     @b
  1916.         sub     ecx, esi        ; ecx = ¤«¨­  ¨¬¥­¨ ä ©« +1 = ¤«¨­  § £®«®¢ª +1
  1917.         cmp     ecx, 15
  1918.         jb      @f
  1919.         mov     cl, 15
  1920. @@:
  1921.         xor     edx, edx
  1922.         xor     ebp, ebp
  1923.         push    edx
  1924. .menucreateloop:
  1925.         mov     eax, edi
  1926.         xor     ebx, ebx
  1927. @@:
  1928.         cmp     byte [edi], ','
  1929.         jz      @f
  1930.         cmp     byte [edi], bl
  1931.         jz      @f
  1932.         inc     edi
  1933.         jmp     @b
  1934. @@:
  1935.         xchg    bl, [edi]
  1936.         pushad
  1937.         push    nullstr
  1938.         push    1024
  1939.         push    saved_file_name
  1940.         push    eax
  1941.         push    aMenu
  1942.         push    app_path
  1943.         call    [ini.get_str]
  1944.         popad
  1945.         mov     [edi], bl
  1946.         mov     eax, saved_file_name
  1947. @@:
  1948.         cmp     byte [eax], 0
  1949.         jz      .menucreatecont
  1950.         cmp     byte [eax], ','
  1951.         jz      @f
  1952.         inc     eax
  1953.         jmp     @b
  1954. @@:
  1955.         mov     byte [eax], 0
  1956.         push    eax
  1957.         sub     eax, saved_file_name-1
  1958.         cmp     eax, ecx
  1959.         ja      @f
  1960.         mov     eax, ecx
  1961. @@:
  1962.         xchg    eax, [esp]
  1963.         inc     eax
  1964.         push    eax
  1965. @@:
  1966.         inc     eax
  1967.         cmp     byte [eax-1], 0
  1968.         jnz     @b
  1969.         sub     eax, [esp]
  1970.         add     [esp+4], eax
  1971.         pop     eax eax
  1972.         add     eax, 8
  1973.         add     ebp, eax
  1974.         push    ebp
  1975.         and     ebp, 0xFFF
  1976.         cmp     ebp, eax
  1977.         pop     ebp
  1978.         ja      @f
  1979.         push    eax
  1980.         xchg    edx, [esp+4]
  1981.         push    ecx
  1982.         mov     ecx, ebp
  1983.         call    xpgrealloc
  1984.         pop     ecx
  1985.         pop     edx
  1986.         xchg    edx, [esp]
  1987.         test    eax, eax
  1988.         xchg    eax, [esp]
  1989.         jz      .menucreated
  1990. @@:
  1991.         neg     eax
  1992.         add     eax, ebp
  1993.         add     eax, [esp]
  1994.         and     dword [eax], 0
  1995.         and     dword [eax+4], 0
  1996.         test    edx, edx
  1997.         jz      @f
  1998.         sub     eax, [esp]
  1999.         mov     [edx], eax
  2000.         add     eax, [esp]
  2001.         sub     edx, [esp]
  2002.         mov     [eax+4], edx
  2003. @@:
  2004.         mov     edx, eax
  2005.         push    esi edi
  2006.         mov     esi, saved_file_name
  2007.         lea     edi, [eax+8]
  2008. @@:
  2009.         lodsb
  2010.         stosb
  2011.         test    al, al
  2012.         jnz     @b
  2013.         push    esi
  2014.         sub     esi, saved_file_name
  2015.         sub     esi, ecx
  2016.         jae     .menunoadd
  2017.         neg     esi
  2018. @@:
  2019.         mov     byte [edi-1], ' '
  2020.         stosb
  2021.         dec     esi
  2022.         jnz     @b
  2023. .menunoadd:
  2024.         pop     esi
  2025. @@:
  2026.         lodsb
  2027.         stosb
  2028.         test    al, al
  2029.         jnz     @b
  2030.         pop     edi esi
  2031. .menucreatecont:
  2032.         inc     edi
  2033.         cmp     byte [edi-1], ','
  2034.         jz      .menucreateloop
  2035. .menucreated:
  2036.         test    edx, edx
  2037.         jz      .menuret_free
  2038.         and     dword [edx], 0
  2039.         pop     edx
  2040.         mov     ecx, edx
  2041.         add     [ecx], edx
  2042. @@:
  2043.         mov     ecx, [ecx]
  2044.         cmp     dword [ecx], 0
  2045.         jz      @f
  2046.         add     [ecx], edx
  2047.         add     [ecx+4], edx
  2048.         jmp     @b
  2049. @@:
  2050.         add     [ecx+4], edx
  2051.         push    edx
  2052.         push    1
  2053.         push    esi
  2054.         push    edx
  2055.         call    menu
  2056.         cmp     eax, -1
  2057.         jz      .menuret_free
  2058.         lea     edi, [eax+8]
  2059. @@:
  2060.         inc     edi
  2061.         cmp     byte [edi-1], 0
  2062.         jnz     @b
  2063.         mov     ebp, [active_panel]
  2064.         call    get_curfile_folder_entry
  2065.         call    .run_association2
  2066. .menuret_free:
  2067.         pop     ecx
  2068.         jmp     pgfree
  2069. .f7:
  2070.         mov     dword [CopyDestEditBuf], CopyDestEditBuf.length
  2071.         and     dword [CopyDestEditBuf+4], 0
  2072.         and     dword [CopyDestEditBuf+8], 0
  2073.         mov     byte [CopyDestEditBuf+12], 0
  2074.         mov     ebx, mkdir_dlgdata
  2075.         mov     eax, [cur_width]
  2076.         sub     eax, 12
  2077.         mov     [ebx + dlgtemplate.width], eax
  2078.         dec     eax
  2079.         dec     eax
  2080.         mov     [ebx - mkdir_dlgdata + mkdir_dlgdata.width2], eax
  2081.         shr     eax, 1
  2082.         dec     eax
  2083.         dec     eax
  2084.         mov     [ebx - mkdir_dlgdata + mkdir_dlgdata.cont_x2], eax
  2085.         sub     eax, a_ContinueLength-1
  2086.         mov     [ebx - mkdir_dlgdata + mkdir_dlgdata.cont_x1], eax
  2087.         add     eax, a_ContinueLength+3
  2088.         mov     [ebx - mkdir_dlgdata + mkdir_dlgdata.cnl_x1], eax
  2089.         add     eax, aCancelBLength - 1
  2090.         mov     [ebx - mkdir_dlgdata + mkdir_dlgdata.cnl_x2], eax
  2091.         mov     byte [ebx - mkdir_dlgdata + mkdir_dlgdata.flags0], 0xC
  2092.         and     byte [ebx - mkdir_dlgdata + mkdir_dlgdata.flags1], not 4
  2093.         and     byte [ebx - mkdir_dlgdata + mkdir_dlgdata.flags2], not 4
  2094.         push    ebx
  2095.         call    DialogBox
  2096.         cmp     eax, mkdir_dlgdata.cont_btn
  2097.         jnz     .ret2
  2098.         mov     esi, CopyDestEditBuf+12
  2099.         cmp     byte [esi], 0
  2100.         jz      .ret2
  2101.         cmp     byte [esi], '/'
  2102.         jz      .mkdir_absolute_path
  2103.         push    esi
  2104.         lea     edi, [ebp + panel1_dir - panel1_data]
  2105.         or      ecx, -1
  2106.         xor     eax, eax
  2107.         repnz   scasb
  2108.         not     ecx
  2109.         mov     edi, esi
  2110. @@:
  2111.         cmp     byte [edi+1], 0
  2112.         jz      @f
  2113.         inc     edi
  2114.         jmp     @b
  2115. @@:
  2116.         push    edi
  2117.         add     edi, ecx
  2118.         cmp     edi, CopyDestEditBuf+12+513
  2119.         pop     edi
  2120.         jb      @f
  2121.         pop     esi
  2122.         jmp     .bigfilename
  2123. @@:
  2124.         lea     edx, [edi+2]
  2125.         sub     edx, esi
  2126.         lea     edi, [edi+ecx+1]
  2127.         xchg    ecx, edx
  2128.         std
  2129.         lea     esi, [esi+ecx-1]
  2130.         rep     movsb
  2131.         cld
  2132.         pop     edi
  2133.         lea     esi, [ebp + panel1_dir - panel1_data]
  2134.         push    edi
  2135.         mov     ecx, edx
  2136.         rep     movsb
  2137.         mov     byte [edi-1], '/'
  2138.         pop     esi
  2139. .mkdir_absolute_path:
  2140. .mkdir_retry:
  2141.         push    70
  2142.         pop     eax
  2143.         mov     ebx, mkdirinfo
  2144.         mcall
  2145.         test    eax, eax
  2146.         jz      @f
  2147.         push    dword CopyDestEditBuf+12
  2148.         push    dword aCannotMakeFolder
  2149.         call    get_error_msg
  2150.         push    eax
  2151.         mov     eax, esp
  2152.         push    dword RetryOrCancelBtn
  2153.         push    2
  2154.         push    eax
  2155.         push    3
  2156.         push    -1
  2157.         push    -1
  2158.         push    dword aError
  2159.         call    SayErr
  2160.         add     esp, 3*4
  2161.         test    eax, eax
  2162.         jz      .mkdir_retry
  2163. @@:
  2164.         jmp     .copydone
  2165. .change_mode:
  2166.         dec     eax
  2167.         mov     [ebp + panel1_colmode - panel1_data], eax
  2168.         call    calc_colwidths
  2169.         jmp     draw_panel
  2170. .quick_jump:
  2171.         dec     eax
  2172.         cmp     al, 10
  2173.         jnz     @f
  2174.         xor     eax, eax
  2175. @@:
  2176.         mov     eax, [FolderShortcuts+eax*4]
  2177.         test    eax, eax
  2178.         jnz     @f
  2179.         ret
  2180. @@:
  2181.         lea     esi, [ebp + panel1_dir - panel1_data]
  2182.         push    eax esi
  2183.         mov     edi, prev_dir
  2184. @@:
  2185.         lodsb
  2186.         stosb
  2187.         test    al, al
  2188.         jnz     @b
  2189.         pop     edi esi
  2190. @@:
  2191.         lodsb
  2192.         stosb
  2193.         test    al, al
  2194.         jnz     @b
  2195.         jmp     .reread
  2196. .greyplus:
  2197.         push    0
  2198.         mov     ecx, aSelect
  2199.         jmp     @f
  2200. .greyminus:
  2201.         push    1
  2202.         mov     ecx, aDeselect
  2203. @@:
  2204.         mov     eax, mark_dlgdata
  2205.         mov     [eax+mark_dlgdata.title-mark_dlgdata], ecx
  2206.         mov     [eax+mark_dlgdata.flags-mark_dlgdata], 0xC
  2207.         mov     edi, enter_string_buf+12
  2208.         mov     dword [edi-12], 512
  2209.         mov     dword [edi-8], 1
  2210.         and     dword [edi-4], 0
  2211.         mov     word [edi], '*'
  2212.         push    eax
  2213.         call    DialogBox
  2214.         inc     eax
  2215.         jnz     @f
  2216. .noselect:
  2217.         pop     eax
  2218.         ret
  2219. @@:
  2220.         xor     eax, eax
  2221.         mov     esi, edi
  2222. @@:
  2223.         lodsb
  2224.         mov     al, [tolower_table+eax]
  2225.         mov     [esi-1], al
  2226.         test    al, al
  2227.         jnz     @b
  2228. @@:
  2229.         mov     ecx, [ebp + panel1_numfiles - panel1_data]
  2230.         mov     ebx, [ebp + panel1_files - panel1_data]
  2231.         jecxz   .noselect
  2232.         mov     eax, [ebx]
  2233.         cmp     word [eax+40], '..'
  2234.         jnz     .selectloop
  2235.         cmp     byte [eax+42], 0
  2236.         jnz     .selectloop
  2237.         dec     ecx
  2238.         jz      .noselect
  2239.         add     ebx, 4
  2240. .selectloop:
  2241.         xor     eax, eax
  2242.         mov     esi, [ebx]
  2243.         add     esi, 40
  2244.         mov     edx, lower_file_name-1
  2245. @@:
  2246.         lodsb
  2247.         inc     edx
  2248.         mov     al, [tolower_table+eax]
  2249.         mov     [edx], al
  2250.         test    al, al
  2251.         jnz     @b
  2252.         mov     esi, lower_file_name
  2253.         call    match_mask_rev_lowercase
  2254.         jc      @f
  2255.         mov     esi, [ebx]
  2256.         mov     eax, [esi+32]
  2257.         cmp     byte [esp], 0
  2258.         jz      .doselect
  2259.         test    byte [esi+303], 1
  2260.         jz      @f
  2261.         and     byte [esi+303], not 1
  2262.         sub     dword [ebp + panel1_selected_size - panel1_data], eax
  2263.         mov     eax, [esi+36]
  2264.         sbb     dword [ebp + panel1_selected_size+4 - panel1_data], eax
  2265.         dec     dword [ebp + panel1_selected_num - panel1_data]
  2266.         jmp     @f
  2267. .doselect:
  2268.         test    byte [esi+303], 1
  2269.         jnz     @f
  2270.         or      byte [esi+303], 1
  2271.         add     dword [ebp + panel1_selected_size - panel1_data], eax
  2272.         mov     eax, [esi+36]
  2273.         adc     dword [ebp + panel1_selected_size+4 - panel1_data], eax
  2274.         inc     dword [ebp + panel1_selected_num - panel1_data]
  2275. @@:
  2276.         add     ebx, 4
  2277.         dec     ecx
  2278.         jnz     .selectloop
  2279.         pop     eax
  2280.         jmp     .done_redraw
  2281.  
  2282. panels_OnRedraw:
  2283.         call    draw_cmdbar
  2284.         mov     ebp, panel1_data
  2285.         call    calc_colwidths
  2286.         call    draw_panel
  2287.         mov     ebp, panel2_data
  2288.         call    calc_colwidths
  2289.         call    draw_panel
  2290.         ret
  2291.  
  2292. init_console:
  2293.         mov     ecx, [console_data_ptr]
  2294.         call    pgfree
  2295.         mov     eax, [cur_width]
  2296.         mul     [cur_height]
  2297.         mov     ecx, eax
  2298.         push    ecx
  2299.         shl     ecx, 2
  2300.         call    pgalloc
  2301.         pop     ecx
  2302.         test    eax, eax
  2303.         jz      exit
  2304.         mov     [console_data_ptr], eax
  2305.         mov     edi, eax
  2306.         mov     ax, 0720h
  2307.         rep     stosw
  2308.         mov     [panel1_left], ecx
  2309.         mov     [panel1_top], ecx
  2310.         mov     [panel2_top], ecx
  2311.         mov     eax, [cur_width]
  2312.         inc     eax
  2313.         shr     eax, 1
  2314.         mov     [panel1_width], eax
  2315.         mov     [panel2_left], eax
  2316.         sub     eax, [cur_width]
  2317.         neg     eax
  2318.         mov     [panel2_width], eax
  2319.         mov     eax, [cur_height]
  2320.         dec     eax
  2321.         dec     eax
  2322.         mov     [panel1_height], eax
  2323.         mov     [panel2_height], eax
  2324.         ret
  2325.  
  2326. get_curfile_folder_entry:
  2327.         mov     ecx, [ebp + panel1_index - panel1_data]
  2328.         shl     ecx, 2
  2329.         add     ecx, [ebp + panel1_files - panel1_data]
  2330.         mov     ecx, [ecx]
  2331.         ret
  2332. get_curfile_name:
  2333.         call    get_curfile_folder_entry
  2334.         add     ecx, 40
  2335.         ret
  2336.  
  2337. panels_getname:
  2338. if lang eq ru
  2339.         mov     eax, ' ­¥'
  2340.         stosd
  2341.         mov     eax, '«¨  '
  2342.         stosd
  2343.         mov     eax, '    '
  2344.         stosd
  2345.         stosb
  2346. else
  2347.         mov     eax, 'Pane'
  2348.         stosd
  2349.         mov     eax, 'ls  '
  2350.         stosd
  2351.         mov     eax, '    '
  2352.         stosd
  2353.         stosb
  2354. end if
  2355.         sub     ecx, 13
  2356.         mov     ebp, [active_panel]
  2357.         lea     esi, [ebp + panel1_dir - panel1_data]
  2358.         push    3
  2359.         pop     edx
  2360. @@:
  2361.         lodsb
  2362.         stosb
  2363.         dec     ecx
  2364.         test    al, al
  2365.         jz      @f
  2366.         cmp     al, '/'
  2367.         jnz     @b
  2368.         dec     edx
  2369.         jnz     @b
  2370. @@:
  2371.         test    al, al
  2372.         jnz     @f
  2373.         dec     esi
  2374.         dec     edi
  2375. @@:
  2376.         push    esi
  2377. @@:
  2378.         lodsb
  2379.         test    al, al
  2380.         jnz     @b
  2381.         dec     esi
  2382.         mov     ebx, esi
  2383.         sub     ebx, [esp]
  2384.         dec     esi
  2385.         push    esi
  2386.         mov     esi, [ebp + panel1_index - panel1_data]
  2387.         shl     esi, 2
  2388.         add     esi, [ebp + panel1_files - panel1_data]
  2389.         mov     esi, [esi]
  2390.         add     esi, 40
  2391.         push    esi
  2392. @@:
  2393.         lodsb
  2394.         test    al, al
  2395.         jnz     @b
  2396.         add     ebx, esi
  2397.         sub     ebx, [esp]
  2398.         dec     esi
  2399.         cmp     ebx, ecx
  2400.         jbe     @f
  2401.         mov     al, '.'
  2402.         stosb
  2403.         stosb
  2404.         stosb
  2405.         sub     ecx, 3
  2406.         mov     ebx, ecx
  2407. @@:
  2408.         add     edi, ebx
  2409.         inc     ecx
  2410.         std
  2411. @@:
  2412.         movsb
  2413.         dec     ecx
  2414.         jz      .nodir
  2415.         cmp     esi, [esp]
  2416.         jae     @b
  2417.         mov     al, '/'
  2418.         stosb
  2419.         dec     ecx
  2420.         jz      .nodir
  2421.         mov     esi, [esp+4]
  2422. @@:
  2423.         cmp     esi, [esp+8]
  2424.         jb      .nodir
  2425.         movsb
  2426.         loop    @b
  2427. .nodir:
  2428.         cld
  2429.         pop     eax
  2430.         pop     eax
  2431.         pop     eax
  2432.         ret
  2433.  
  2434. draw_window:
  2435.         push    12
  2436.         pop     eax
  2437.         push    1
  2438.         pop     ebx
  2439.         mcall
  2440.         mov     al, 48
  2441.         mov     bl, 4
  2442.         mcall
  2443.         mov     [skinh], eax
  2444.         mov     ebx, [cur_width]
  2445.         imul    ebx, font_width
  2446.         add     ebx, 100*65536 + 5*2-1
  2447.         mov     ecx, [cur_height]
  2448.         imul    ecx, font_height
  2449.         lea     ecx, [eax+ecx+5-1+100*65536]
  2450.         xor     eax, eax
  2451.         mov     edx, 0x53000000
  2452.         mov     edi, title
  2453.         mcall
  2454.         mov     al, 13
  2455.         xor     edx, edx
  2456.         cmp     [fill_width], 0
  2457.         jz      @f
  2458.         mov     ebx, [wnd_width]
  2459.         sub     ebx, [fill_width]
  2460.         sub     ebx, 5-1
  2461.         shl     ebx, 16
  2462.         mov     bx, word [fill_width]
  2463.         mov     ecx, [skinh-2]
  2464.         mov     cx, word [wnd_height]
  2465.         sub     cx, word [skinh]
  2466.         sub     cx, 5-1
  2467.         mcall
  2468. @@:
  2469.         cmp     [fill_height], 0
  2470.         jz      @f
  2471.         xor     edx, edx
  2472.         mov     ebx, 50000h
  2473.         mov     bx, word [wnd_width]
  2474.         sub     ebx, 9
  2475.         mov     ecx, [wnd_height]
  2476.         sub     ecx, [fill_height]
  2477.         sub     ecx, 5-1
  2478.         shl     ecx, 16
  2479.         mov     cx, word [fill_height]
  2480.         mcall
  2481. @@:
  2482. ;        xor     ecx, ecx
  2483. ;        call    draw_image
  2484.         mov     al, 65
  2485.         mov     ebx, [MemForImage]
  2486.         test    ebx, ebx
  2487.         jz      @f
  2488.         mov     ecx, [cur_width]
  2489.         imul    ecx, font_width*10000h
  2490.         mov     cx, word [cur_height]
  2491.         imul    cx, font_height
  2492.         mov     edx, [skinh]
  2493.         add     edx, 5*10000h
  2494.         mov     esi, 8
  2495.         mov     edi, console_colors
  2496.         xor     ebp, ebp
  2497.         mcall
  2498. @@:
  2499.         mov     al, 12
  2500.         push    2
  2501.         pop     ebx
  2502.         mcall
  2503.         ret
  2504.  
  2505. draw_image.nomem:
  2506.         mov     al, 13
  2507.         xor     edx, edx
  2508.         mov     ebx, [cur_width]
  2509.         imul    ebx, font_width
  2510.         add     ebx, 5*65536
  2511.         mov     ecx, [skinh-2]
  2512.         mov     cx, word [cur_height]
  2513.         imul    cx, font_height
  2514.         mcall
  2515.         mov     al, 4
  2516.         mov     ebx, 32*65536+32
  2517.         mov     ecx, 0xFFFFFF
  2518.         mov     edx, nomem_draw
  2519.         push    nomem_draw.size
  2520.         pop     esi
  2521.         mcall
  2522.         ret
  2523.  
  2524. draw_image:
  2525.         mov     [bMemForImageValidData], byte 1
  2526.         cmp     [MemForImage], 0
  2527.         jnz     .allocated
  2528. ; allocate memory for image
  2529.         mov     ecx, [cur_width]
  2530.         imul    ecx, [cur_height]
  2531.         imul    ecx, font_width*font_height
  2532.         call    pgalloc
  2533.         test    eax, eax
  2534.         jz      draw_image.nomem
  2535.         mov     [MemForImage], eax
  2536.         mov     [bMemForImageValidData], byte 0
  2537. .allocated:
  2538.         and     [max_x], 0
  2539.         or      [min_x], -1
  2540.         and     [max_y], 0
  2541.         or      [min_y], -1
  2542.         mov     eax, [cursor_y]
  2543.         mul     [cur_width]
  2544.         add     eax, [cursor_x]
  2545.         add     eax, eax
  2546.         add     eax, [console_data_ptr]
  2547.         xchg    [cur_cursor_pos], eax
  2548.         mov     [old_cursor_pos], eax
  2549.         mov     edi, [MemForImage]
  2550.         mov     esi, [console_data_ptr]
  2551.         mov     ecx, [cur_height]
  2552. .lh:
  2553.         push    ecx
  2554.         mov     ecx, [cur_width]
  2555. .lw:
  2556.         push    ecx
  2557.         mov     eax, [cur_width]
  2558.         imul    eax, [cur_height]
  2559.         mov     ebx, [esi]
  2560.         cmp     [bMemForImageValidData], 0
  2561.         jz      @f
  2562.         cmp     esi, [cur_cursor_pos]
  2563.         jz      @f
  2564.         cmp     esi, [old_cursor_pos]
  2565.         jz      @f
  2566.         cmp     bx, [eax*2+esi]
  2567.         jnz     @f
  2568.         inc     esi
  2569.         inc     esi
  2570.         jmp     .skip_symbol
  2571. @@:
  2572.         mov     [eax*2+esi], bx
  2573.         cmp     ecx, [min_x]
  2574.         ja      @f
  2575.         mov     [min_x], ecx
  2576. @@:
  2577.         cmp     ecx, [max_x]
  2578.         jb      @f
  2579.         mov     [max_x], ecx
  2580. @@:
  2581.         mov     eax, [esp+4]
  2582.         mov     [min_y], eax
  2583.         cmp     eax, [max_y]
  2584.         jb      @f
  2585.         mov     [max_y], eax
  2586. @@:
  2587.         push    edi
  2588.         xor     eax, eax
  2589.         mov     al, [esi+1]
  2590.         and     al, 0xF
  2591.         mov     ebx, eax
  2592.         mov     al, [esi+1]
  2593.         shr     al, 4
  2594.         mov     ebp, eax
  2595.         sub     ebx, ebp
  2596.         lodsb
  2597.         inc     esi
  2598. if font_width > 8
  2599.         lea     edx, [eax+eax+font]
  2600. else
  2601.         lea     edx, [eax+font]
  2602. end if
  2603. .sh:
  2604.         mov     ecx, [edx]
  2605. repeat font_width
  2606.         shr     ecx, 1
  2607.         sbb     eax, eax
  2608.         and     eax, ebx
  2609.         add     eax, ebp
  2610.         mov     [edi+%-1], al
  2611. end repeat
  2612.         mov     eax, [cur_width]
  2613. ;        imul    eax, font_width
  2614. ;        add     edi, eax
  2615. if font_width = 6
  2616.         lea     eax, [eax*2+eax]
  2617.         lea     edi, [edi+eax*2]
  2618. else if font_width = 7
  2619.         lea     edi, [edi+eax*8]
  2620.         sub     edi, eax
  2621. else if font_width = 8
  2622.         lea     edi, [edi+eax*8]
  2623. else if font_width = 9
  2624.         lea     edi, [edi+eax*8]
  2625.         add     edi, eax
  2626. else if font_width = 10
  2627.         lea     eax, [eax*4+eax]
  2628.         lea     edi, [edi+eax*2]
  2629. else
  2630. Unknown font_width value!
  2631. end if
  2632. if font_width > 8
  2633.         add     edx, 256*2
  2634.         cmp     edx, font+256*2*font_height
  2635. else
  2636.         add     edx, 256
  2637.         cmp     edx, font+256*font_height
  2638. end if
  2639.         jb      .sh
  2640.         pop     edi
  2641. .skip_symbol:
  2642.         pop     ecx
  2643.         add     edi, font_width
  2644.         dec     ecx
  2645.         jnz     .lw
  2646.         mov     eax, [cur_width]
  2647.         imul    eax, (font_height-1)*font_width
  2648.         add     edi, eax
  2649.         pop     ecx
  2650.         dec     ecx
  2651.         jnz     .lh
  2652. ; cursor
  2653.         mov     eax, [cursor_y]
  2654.         inc     eax
  2655.         jz      .nocursor
  2656.         mul     [cur_width]
  2657.         imul    eax, font_height*font_width
  2658.         mov     edx, [cursor_x]
  2659.         inc     edx
  2660.         imul    edx, font_width
  2661.         add     eax, edx
  2662.         add     eax, [MemForImage]
  2663.         mov     edx, [cur_width]
  2664.         imul    edx, font_width
  2665.         neg     edx
  2666.         mov     ecx, (font_height*15+50)/100
  2667. .cursor_loop:
  2668.         push    ecx
  2669.         mov     ecx, font_width
  2670.         add     eax, edx
  2671.         push    eax
  2672. @@:
  2673. ;        add     byte [eax-1], 0x10
  2674.         xor     byte [eax-1], 7
  2675.         sub     eax, 1
  2676.         loop    @b
  2677.         pop     eax
  2678.         pop     ecx
  2679.         loop    .cursor_loop
  2680. .nocursor:
  2681.         cmp     [min_y], -1
  2682.         jz      .nodraw
  2683.         mov     ecx, [cur_width]
  2684.         mov     ebx, [cur_height]
  2685.         mov     eax, ebx
  2686.         sub     ebx, [max_y]
  2687.         sub     eax, [min_y]
  2688.         sub     eax, ebx
  2689.         inc     eax
  2690.         imul    ebp, eax, font_height
  2691.         mov     edx, ecx
  2692.         sub     edx, [max_x]
  2693.         imul    edx, font_width
  2694.         mov     eax, edx
  2695.         shl     edx, 16
  2696.         imul    dx, bx, font_height
  2697.         imul    ebx, [cur_width]
  2698.         mov     ecx, [max_x]
  2699.         sub     ecx, [min_x]
  2700.         inc     ecx
  2701.         imul    ecx, font_width*10000h
  2702.         add     ecx, ebp
  2703.         imul    ebx, font_width*font_height
  2704.         add     ebx, [MemForImage]
  2705.         add     ebx, eax
  2706.         add     edx, [skinh]
  2707.         add     edx, 5*10000h
  2708.         imul    esi, [cur_width], font_width
  2709.         mov     ebp, ecx
  2710.         shr     ebp, 16
  2711.         sub     esi, ebp
  2712.         mov     ebp, esi
  2713.         push    65
  2714.         pop     eax
  2715.         mov     edi, console_colors
  2716.         push    8
  2717.         pop     esi
  2718.         mcall
  2719. .nodraw:
  2720.         ret
  2721.  
  2722. get_console_ptr:
  2723. ; in: eax=x, edx=y
  2724. ; out: edi->console data
  2725.         push    edx
  2726.         imul    edx, [cur_width]
  2727.         add     edx, eax
  2728.         mov     edi, [console_data_ptr]
  2729.         lea     edi, [edi + edx*2]
  2730.         pop     edx
  2731.         ret
  2732.  
  2733. draw_keybar:
  2734.         pushad
  2735.         xor     eax, eax
  2736.         test    [ctrlstate], 3
  2737.         jz      @f
  2738.         inc     eax
  2739. @@:
  2740.         test    [ctrlstate], 0xC
  2741.         jz      @f
  2742.         or      al, 2
  2743. @@:
  2744.         test    [ctrlstate], 0x30
  2745.         jz      @f
  2746.         or      al, 4
  2747. @@:
  2748.         imul    eax, 6*12
  2749.         mov     esi, [active_screen_vtable]
  2750.         mov     esi, [esi+screen_vtable.keybar]
  2751.         add     esi, eax
  2752.         xor     ecx, ecx
  2753.         inc     ecx
  2754.         xor     eax, eax
  2755.         mov     edx, [cur_height]
  2756.         dec     edx
  2757.         call    get_console_ptr
  2758.         push    6
  2759.         pop     ebx
  2760.         mov     eax, [cur_width]
  2761.         sub     eax, 11+9+3*2+6
  2762.         cmp     eax, 7*11
  2763.         jl      @f
  2764.         cdq
  2765.         mov     bl, 11
  2766.         div     ebx
  2767.         mov     ebx, eax
  2768. @@:
  2769.         xor     edx, edx
  2770. .l:
  2771.         add     edx, 7
  2772.         cmp     cl, 10
  2773.         jb      @f
  2774.         inc     edx
  2775. @@:
  2776.         cmp     edx, [cur_width]
  2777.         ja      .ret
  2778.         cmp     cl, 10
  2779.         jae     .twodig
  2780.         lea     eax, [ecx+'0']
  2781.         stosb
  2782.         mov     al, [keybar_number_color]
  2783.         stosb
  2784.         jmp     .cmn
  2785. .twodig:
  2786.         mov     al, cl
  2787.         cbw
  2788.         div     [_10]
  2789.         add     al, '0'
  2790.         stosb
  2791.         mov     al, [keybar_number_color]
  2792.         stosb
  2793.         xchg    al, ah
  2794.         add     al, '0'
  2795.         stosw
  2796. .cmn:
  2797.         mov     ah, [keybar_name_color]
  2798.         push    ecx
  2799.         mov     cl, 6
  2800. @@:
  2801.         lodsb
  2802.         stosw
  2803.         loop    @b
  2804.         mov     al, ' '
  2805.         lea     ecx, [ebx-6]
  2806.         cmp     byte [esp], 12
  2807.         jz      .ret_pop
  2808.         add     edx, ecx
  2809.         rep     stosw
  2810.         pop     ecx
  2811.         inc     edx
  2812.         cmp     edx, [cur_width]
  2813.         ja      .ret
  2814.         mov     ah, [keybar_bgr_color]
  2815.         stosw
  2816.         inc     ecx
  2817.         jmp     .l
  2818. .ret_pop:
  2819.         pop     ecx
  2820. .ret:
  2821.         cmp     byte [edi-2], ' '
  2822.         jnz     @f
  2823.         dec     edi
  2824.         dec     edi
  2825. @@:
  2826.         push    edi
  2827.         xor     eax, eax
  2828.         mov     edx, [cur_height]
  2829.         call    get_console_ptr
  2830.         mov     ecx, edi
  2831.         pop     edi
  2832.         sub     ecx, edi
  2833.         shr     ecx, 1
  2834.         mov     al, ' '
  2835.         mov     ah, [keybar_name_color]
  2836.         rep     stosw
  2837. .done:
  2838.         popad
  2839.         ret
  2840.  
  2841. draw_cmdbar:
  2842.         mov     esi, [active_panel]
  2843.         add     esi, panel1_dir - panel1_data
  2844.         xor     eax, eax
  2845.         mov     edx, [cur_height]
  2846.         dec     edx
  2847.         dec     edx
  2848.         call    get_console_ptr
  2849.         mov     ah, [cmdbar_prefix_color]
  2850.         mov     ecx, [cur_width]
  2851.         dec     ecx
  2852. @@:
  2853.         lodsb
  2854.         test    al, al
  2855.         jz      @f
  2856.         stosw
  2857.         loop    @b
  2858. @@:
  2859.         mov     al, '>'
  2860.         stosw
  2861.         mov     al, ' '
  2862.         mov     ah, [cmdbar_normal_color]
  2863.         rep     stosw
  2864.         ret
  2865.  
  2866. draw_border:
  2867.         push    edi
  2868.         mov     al, 0xC9
  2869.         stosw
  2870.         mov     al, 0xCD
  2871.         lea     ecx, [ebx-2]
  2872.         rep     stosw
  2873.         mov     al, 0xBB
  2874.         stosw
  2875.         pop     edi
  2876.         add     edi, [cur_width]
  2877.         add     edi, [cur_width]
  2878.         lea     ecx, [edx-2]
  2879. .l:
  2880.         push    edi
  2881.         mov     al, 0xBA
  2882.         stosw
  2883.         mov     al, 0x20
  2884.         push    ecx
  2885.         lea     ecx, [ebx-2]
  2886.         rep     stosw
  2887.         pop     ecx
  2888.         mov     al, 0xBA
  2889.         stosw
  2890.         pop     edi
  2891.         add     edi, [cur_width]
  2892.         add     edi, [cur_width]
  2893.         loop    .l
  2894.         mov     al, 0xC8
  2895.         stosw
  2896.         mov     al, 0xCD
  2897.         lea     ecx, [ebx-2]
  2898.         rep     stosw
  2899.         mov     al, 0xBC
  2900.         stosw
  2901.         ret
  2902.  
  2903. calc_colwidths:
  2904. ; in: ebp->panel data
  2905.         imul    esi, [ebp + panel1_colmode - panel1_data], PanelMode.size
  2906.         add     esi, colmodes
  2907.         lodsd
  2908.         mov     ecx, eax
  2909.         lea     edx, [ecx-1]
  2910.         xor     ebx, ebx
  2911.         add     esi, PanelMode.ColumnWidths-4
  2912.         push    ecx esi
  2913.         xor     eax, eax
  2914. .loop:
  2915.         lodsb
  2916.         add     edx, eax
  2917.         cmp     al, 1
  2918.         adc     ebx, 0
  2919.         loop    .loop
  2920.         pop     esi ecx
  2921.         lea     edi, [ebp + panel1_colwidths - panel1_data]
  2922.         test    ebx, ebx
  2923.         jz      .loop2
  2924.         mov     eax, [ebp + panel1_width - panel1_data]
  2925.         dec     eax
  2926.         dec     eax
  2927.         sub     eax, edx
  2928.         jae     @f
  2929.         xor     eax, eax
  2930. @@:
  2931.         xor     edx, edx
  2932.         div     ebx
  2933.         test    eax, eax
  2934.         jnz     @f
  2935.         xor     edx, edx
  2936.         inc     eax
  2937. @@:
  2938.         push    eax
  2939. .loop2:
  2940.         movzx   eax, byte [esi]
  2941.         inc     esi
  2942.         test    eax, eax
  2943.         jnz     @f
  2944.         pop     eax
  2945.         push    eax
  2946.         dec     ebx
  2947.         cmp     ebx, edx
  2948.         jae     @f
  2949.         inc     eax
  2950. @@:
  2951.         stosd
  2952.         loop    .loop2
  2953.         pop     eax
  2954.         and     dword [edi], 0
  2955.         ret
  2956.  
  2957. draw_panel:
  2958.         mov     eax, [ebp + panel1_left - panel1_data]
  2959.         mov     edx, [ebp + panel1_top - panel1_data]
  2960.         call    get_console_ptr
  2961. ; draw border
  2962.         mov     ah, [panel_border_color]
  2963.         mov     ebx, [ebp + panel1_width - panel1_data]
  2964.         mov     edx, [ebp + panel1_height - panel1_data]
  2965.         call    draw_border
  2966.         push    eax
  2967.         mov     eax, [ebp + panel1_left - panel1_data]
  2968.         mov     edx, [ebp + panel1_top - panel1_data]
  2969.         add     edx, [ebp + panel1_height - panel1_data]
  2970.         sub     edx, 3
  2971.         call    get_console_ptr
  2972.         pop     eax
  2973.         mov     al, 0xC7
  2974.         stosw
  2975.         mov     al, 0xC4
  2976.         lea     ecx, [ebx-2]
  2977.         rep     stosw
  2978.         mov     al, 0xB6
  2979.         stosw
  2980.  
  2981.         imul    esi, [ebp + panel1_colmode - panel1_data], PanelMode.size
  2982.         add     esi, colmodes
  2983.         lodsd
  2984.         mov     ecx, eax        ; number of columns
  2985.         lea     ebx, [ebp + panel1_colwidths - panel1_data]
  2986.         mov     eax, [ebp + panel1_left - panel1_data]
  2987.         inc     eax
  2988.         mov     [column_left], eax
  2989.         mov     eax, [ebp + panel1_top - panel1_data]
  2990.         inc     eax
  2991.         mov     [column_top], eax
  2992.         mov     eax, [ebp + panel1_height - panel1_data]
  2993.         sub     eax, 4
  2994.         mov     [column_height], eax
  2995.         dec     eax
  2996.         mov     [ebp + panel1_colsz - panel1_data], eax
  2997.         and     [ebp + panel1_colst - panel1_data], 0
  2998.         mov     eax, [ebp + panel1_start - panel1_data]
  2999.         mov     [column_index], eax
  3000.         mov     [last_column_index], eax
  3001. .columns_loop:
  3002.         push    ecx
  3003.         mov     eax, [ebx]
  3004.         add     ebx, 4
  3005.         mov     [column_width], eax
  3006.         cmp     ecx, 1
  3007.         jz      .skip_right_border
  3008.         add     eax, [column_left]
  3009.         mov     edx, [ebp + panel1_top - panel1_data]
  3010.         call    get_console_ptr
  3011.         mov     ah, [panel_header_color]
  3012.         mov     al, 0xD1
  3013.         mov     [edi], ax
  3014.         add     edi, [cur_width]
  3015.         add     edi, [cur_width]
  3016.         mov     ecx, [column_height]
  3017.         mov     al, 0xB3
  3018. @@:
  3019.         mov     [edi], ax
  3020.         add     edi, [cur_width]
  3021.         add     edi, [cur_width]
  3022.         loop    @b
  3023.         mov     al, 0xC1
  3024.         stosw
  3025. .skip_right_border:
  3026.         mov     eax, [column_left]
  3027.         mov     edx, [column_top]
  3028.         call    get_console_ptr
  3029. ; § £®«®¢®ª á⮫¡æ 
  3030.         push    edi
  3031.         mov     edx, [esi]
  3032.         and     edx, 0xF
  3033.         mov     edx, [column_headers+edx*4]
  3034.         movzx   ecx, byte [edx]
  3035.         inc     edx
  3036.         cmp     ecx, [column_width]
  3037.         jb      @f
  3038.         mov     ecx, [column_width]
  3039. @@:
  3040.         push    ecx
  3041.         sub     ecx, [column_width]
  3042.         neg     ecx
  3043.         shr     ecx, 1
  3044.         mov     al, ' '
  3045.         mov     ah, [column_header_color]
  3046.         rep     stosw
  3047.         pop     ecx
  3048.         jecxz   .skipcopyhdr
  3049.         push    ecx
  3050. @@:
  3051.         mov     al, [edx]
  3052.         inc     edx
  3053.         stosw
  3054.         loop    @b
  3055.         pop     ecx
  3056. .skipcopyhdr:
  3057.         sub     ecx, [column_width]
  3058.         neg     ecx
  3059.         inc     ecx
  3060.         shr     ecx, 1
  3061.         mov     al, ' '
  3062.         rep     stosw
  3063.         pop     edi
  3064.         add     edi, [cur_width]
  3065.         add     edi, [cur_width]
  3066. ; á ¬ á⮫¡¥æ
  3067.         mov     eax, [esi]
  3068.         and     eax, 0xF
  3069.         push    ebx esi
  3070.         call    dword [draw_column_proc+eax*4]
  3071.         pop     esi ebx
  3072.         inc     esi
  3073.         mov     eax, [column_width]
  3074.         inc     eax
  3075.         add     [column_left], eax
  3076.         pop     ecx
  3077.         dec     ecx
  3078.         jnz     .columns_loop
  3079. ; ‡ £®«®¢®ª ¯ ­¥«¨ (⥪ãé ï ¯ ¯ª )
  3080.         lea     esi, [ebp + panel1_dir - panel1_data]
  3081.         mov     edi, cur_header
  3082.         mov     ecx, [ebp + panel1_width - panel1_data]
  3083.         sub     ecx, 7
  3084.         movsb
  3085. @@:
  3086.         lodsb
  3087.         stosb
  3088.         dec     ecx
  3089.         test    al, al
  3090.         jz      .header_created
  3091.         cmp     al, '/'
  3092.         jnz     @b
  3093.         mov     edx, esi
  3094. @@:
  3095.         lodsb
  3096.         test    al, al
  3097.         jnz     @b
  3098.         sub     esi, edx
  3099.         dec     esi
  3100.         cmp     esi, ecx
  3101.         jbe     @f
  3102.         mov     word [edi], '..'
  3103.         mov     byte [edi+2], '.'
  3104.         add     edi, 3
  3105.         sub     ecx, 3
  3106.         add     edx, esi
  3107.         sub     edx, ecx
  3108. @@:
  3109.         mov     esi, edx
  3110. @@:
  3111.         lodsb
  3112.         stosb
  3113.         dec     ecx
  3114.         test    al, al
  3115.         jnz     @b
  3116. .header_created:
  3117.         mov     edx, [ebp + panel1_top - panel1_data]
  3118.         mov     eax, [ebp + panel1_left - panel1_data]
  3119.         shr     ecx, 1
  3120.         lea     eax, [eax+ecx+3]
  3121.         call    get_console_ptr
  3122.         mov     ah, [panel_active_header_color]
  3123.         cmp     ebp, [active_panel]
  3124.         jz      @f
  3125.         mov     ah, [panel_header_color]
  3126. @@:
  3127.         mov     al, ' '
  3128.         stosw
  3129.         mov     esi, cur_header
  3130. @@:
  3131.         lodsb
  3132.         test    al, al
  3133.         jz      @f
  3134.         stosw
  3135.         jmp     @b
  3136. @@:
  3137.         mov     al, ' '
  3138.         stosw
  3139.         mov     edx, [ebp + panel1_top - panel1_data]
  3140.         inc     edx
  3141.         mov     eax, [ebp + panel1_left - panel1_data]
  3142.         inc     eax
  3143.         call    get_console_ptr
  3144.         movzx   eax, [ebp + panel1_sortmode - panel1_data]
  3145.         mov     al, [compare_names+eax]
  3146.         stosb
  3147.         mov     eax, [ebp + panel1_selected_num - panel1_data]
  3148.         test    eax, eax
  3149.         jz      .skip_selected_info
  3150. ; ˆ­ä®à¬ æ¨ï ® ¢ë¤¥«¥­­ëå ä ©« å
  3151.         push    dword [ebp + panel1_selected_size+4 - panel1_data]
  3152.         push    dword [ebp + panel1_selected_size - panel1_data]
  3153.         call    fill_total_info
  3154.         mov     eax, [ebp + panel1_width - panel1_data]
  3155.         sub     eax, 2
  3156.         cmp     ecx, eax
  3157.         jbe     @f
  3158.         mov     ecx, eax
  3159.         mov     edi, saved_file_name+512
  3160.         sub     edi, eax
  3161.         mov     byte [edi], '.'
  3162.         mov     word [edi+1], '..'
  3163. @@:
  3164.         mov     esi, edi
  3165.         sub     eax, ecx
  3166.         shr     eax, 1
  3167.         inc     eax
  3168.         add     eax, [ebp + panel1_left - panel1_data]
  3169.         mov     edx, [ebp + panel1_top - panel1_data]
  3170.         add     edx, [ebp + panel1_height - panel1_data]
  3171.         sub     edx, 3
  3172.         call    get_console_ptr
  3173.         mov     ah, [panel_numselected_color]
  3174. @@:
  3175.         lodsb
  3176.         stosw
  3177.         loop    @b
  3178. .skip_selected_info:
  3179. ; ˆ­ä®à¬ æ¨ï ®¡ ®¡é¥¬ ç¨á«¥ ¨ à §¬¥à¥ ä ©«®¢ ¯ ­¥«¨
  3180.         mov     eax, [ebp + panel1_total_num - panel1_data]
  3181.         push    dword [ebp + panel1_total_size+4 - panel1_data]
  3182.         push    dword [ebp + panel1_total_size - panel1_data]
  3183.         call    fill_total_info
  3184.         mov     eax, [ebp + panel1_width - panel1_data]
  3185.         sub     eax, 2
  3186.         cmp     ecx, eax
  3187.         jbe     @f
  3188.         mov     ecx, eax
  3189.         mov     byte [edi+ecx-3], '.'
  3190.         mov     word [edi+ecx-2], '..'
  3191. @@:
  3192.         sub     eax, ecx
  3193.         shr     eax, 1
  3194.         inc     eax
  3195.         add     eax, [ebp + panel1_left - panel1_data]
  3196.         add     edx, [ebp + panel1_top - panel1_data]
  3197.         add     edx, [ebp + panel1_height - panel1_data]
  3198.         dec     edx
  3199.         mov     esi, edi
  3200.         call    get_console_ptr
  3201.         mov     ah, [panel_number_color]
  3202. @@:
  3203.         lodsb
  3204.         stosw
  3205.         loop    @b
  3206.         cmp     [ebp + panel1_numfiles - panel1_data], 0
  3207.         jz      .skip_curinfo
  3208. ; ˆ­ä®à¬ æ¨ï ® ⥪ã饬 ä ©«¥
  3209.         mov     ebx, [ebp + panel1_index - panel1_data]
  3210.         mov     eax, [ebp + panel1_files - panel1_data]
  3211.         mov     ebx, [eax+ebx*4]
  3212.         mov     eax, [ebp + panel1_left - panel1_data]
  3213.         add     eax, [ebp + panel1_width - panel1_data]
  3214.         dec     eax
  3215.         mov     edx, [ebp + panel1_top - panel1_data]
  3216.         add     edx, [ebp + panel1_height - panel1_data]
  3217.         dec     edx
  3218.         dec     edx
  3219.         call    get_console_ptr
  3220.         mov     ecx, [ebp + panel1_width - panel1_data]
  3221.         dec     ecx
  3222.         dec     ecx
  3223.         cmp     [ebp + panel1_colmode - panel1_data], 3
  3224.         jz      .show_curname
  3225. ; ‚à¥¬ï ¬®¤¨ä¨ª æ¨¨
  3226.         sub     edi, 5*2
  3227.         sub     ecx, 6
  3228.         mov     al, [ebx+24+2]
  3229.         aam
  3230.         or      ax, 0x3030
  3231.         mov     [edi], ah
  3232.         mov     [edi+2], al
  3233.         mov     [edi+4], byte ':'
  3234.         mov     al, [ebx+24+1]
  3235.         aam
  3236.         or      ax, 0x3030
  3237.         mov     [edi+6], ah
  3238.         mov     [edi+8], al
  3239.         mov     al, [panel_normal_color]
  3240.         mov     [edi+1], al
  3241.         mov     [edi+3], al
  3242.         mov     [edi+5], al
  3243.         mov     [edi+7], al
  3244.         mov     [edi+9], al
  3245.         dec     edi
  3246.         mov     [edi], al
  3247.         dec     edi
  3248.         mov     byte [edi], ' '
  3249. ; „ â  ¬®¤¨ä¨ª æ¨¨
  3250.         sub     edi, 8*2
  3251.         sub     ecx, 9
  3252.         mov     al, [ebx+28+0]
  3253.         aam
  3254.         or      ax, 0x3030
  3255.         mov     [edi], ah
  3256.         mov     [edi+2], al
  3257.         mov     [edi+4], byte '.'
  3258.         mov     al, [ebx+28+1]
  3259.         aam
  3260.         or      ax, 0x3030
  3261.         mov     [edi+6], ah
  3262.         mov     [edi+8], al
  3263.         mov     [edi+10], byte '.'
  3264.         mov     ax, [ebx+28+2]
  3265.         div     [_100]
  3266.         mov     al, ah
  3267.         aam
  3268.         or      ax, 0x3030
  3269.         mov     [edi+12], ah
  3270.         mov     [edi+14], al
  3271.         mov     al, [panel_normal_color]
  3272.         mov     [edi+1], al
  3273.         mov     [edi+3], al
  3274.         mov     [edi+5], al
  3275.         mov     [edi+7], al
  3276.         mov     [edi+9], al
  3277.         mov     [edi+11], al
  3278.         mov     [edi+13], al
  3279.         mov     [edi+15], al
  3280.         dec     edi
  3281.         mov     [edi], al
  3282.         dec     edi
  3283.         mov     [edi], byte ' '
  3284. ;  §¬¥à
  3285.         std
  3286.         mov     ah, [panel_normal_color]
  3287.         dec     edi
  3288.         dec     edi
  3289.         dec     ecx
  3290.         test    byte [ebx], 0x10
  3291.         jz      .size_file
  3292.         push    ecx
  3293.         mov     esi, aFolder+aFolder.size-1
  3294.         mov     ecx, aFolder.size
  3295.         cmp     word [ebx+40], '..'
  3296.         jnz     @f
  3297.         cmp     byte [ebx+42], 0
  3298.         jnz     @f
  3299.         mov     esi, aUp+aUp.size-1
  3300.         mov     cl, aUp.size
  3301. @@:
  3302.         sub     [esp], ecx
  3303. @@:
  3304.         lodsb
  3305.         stosw
  3306.         loop    @b
  3307.         pop     ecx
  3308.         jmp     .size_done
  3309. .size_file:
  3310.         mov     edx, [ebx+36]
  3311.         test    edx, edx
  3312.         jz      .size_less_4g
  3313.         cmp     edx, 10*256
  3314.         jae     .size_tera
  3315. ; ¢ £¨£ ¡ ©â å
  3316.         mov     al, 'G'
  3317.         shl     edx, 2
  3318.         jmp     .size_letter
  3319. .size_tera:
  3320. ; ¢ â¥à ¡ ©â å
  3321.         shr     edx, 8
  3322.         mov     al, 'T'
  3323.         jmp     .size_letter
  3324. .size_less_4g:
  3325.         mov     edx, [ebx+32]
  3326.         cmp     edx, 10*(1 shl 20)
  3327.         jae     .size_mega
  3328.         cmp     edx, 1 shl 20
  3329.         jb      .size_num
  3330.         shr     edx, 10
  3331.         mov     al, 'K'
  3332.         jmp     .size_letter
  3333. .size_mega:
  3334.         mov     al, 'M'
  3335.         shr     edx, 20
  3336. .size_letter:
  3337.         stosw
  3338.         dec     ecx
  3339.         mov     al, ' '
  3340.         stosw
  3341.         dec     ecx
  3342. .size_num:
  3343.         xchg    eax, edx
  3344.         xor     edx, edx
  3345.         div     [_10d]
  3346.         xchg    eax, edx
  3347.         add     al, '0'
  3348.         mov     ah, [panel_normal_color]
  3349.         stosw
  3350.         dec     ecx
  3351.         test    edx, edx
  3352.         jnz     .size_num
  3353. .size_done:
  3354.         cld
  3355. .show_curname:
  3356. ; ˆ¬ï
  3357.         sub     edi, ecx
  3358.         sub     edi, ecx
  3359.         lea     esi, [ebx+40]
  3360. @@:
  3361.         lodsb
  3362.         test    al, al
  3363.         jnz     @b
  3364.         sub     esi, ebx
  3365.         sub     esi, 41
  3366.         mov     ah, [panel_normal_color]
  3367.         cmp     esi, ecx
  3368.         lea     edx, [ebx+40]
  3369.         jbe     @f
  3370.         mov     al, '{'
  3371.         mov     [edi-2], ax
  3372.         add     edx, esi
  3373.         sub     edx, ecx
  3374. @@:
  3375.         mov     esi, edx
  3376. @@:
  3377.         lodsb
  3378.         test    al, al
  3379.         jz      @f
  3380.         stosw
  3381.         loop    @b
  3382. @@:
  3383.         mov     al, ' '
  3384.         rep     stosw
  3385. .skip_curinfo:
  3386.         call    draw_image
  3387.         ret
  3388.  
  3389. fill_total_info:
  3390.         mov     edi, saved_file_name+511
  3391.         mov     byte [edi], ' '
  3392. if lang eq ru
  3393.         mov     byte [edi-1], '¥'
  3394.         dec     edi
  3395.         cmp     eax, 1
  3396.         jz      @f
  3397.         mov     word [edi-1], ' å'
  3398.         dec     edi
  3399. @@:
  3400.         mov     dword [edi-4], 'ä ©«'
  3401.         mov     byte [edi-5], ' '
  3402.         sub     edi, 5
  3403. else
  3404.         cmp     eax, 1
  3405.         jz      @f
  3406.         dec     edi
  3407.         mov     byte [edi], 's'
  3408. @@:
  3409.         mov     dword [edi-4], 'file'
  3410.         mov     byte [edi-5], ' '
  3411.         sub     edi, 5
  3412. end if
  3413.         xor     edx, edx
  3414.         push    10
  3415.         pop     ecx
  3416. @@:
  3417.         div     ecx
  3418.         dec     edi
  3419.         add     dl, '0'
  3420.         mov     [edi], dl
  3421.         xor     edx, edx
  3422.         test    eax, eax
  3423.         jnz     @b
  3424. if lang eq ru
  3425.         mov     dword [edi-4], 'â ¢ '
  3426.         mov     dword [edi-8], ' ¡ ©'
  3427.         sub     edi, 8
  3428. else
  3429.         mov     dword [edi-4], ' in '
  3430.         mov     dword [edi-8], 'ytes'
  3431.         mov     word [edi-10], ' b'
  3432.         sub     edi, 10
  3433. end if
  3434.         lea     esi, [edi-3]
  3435.         mov     edx, [esp+8]
  3436.         mov     eax, [esp+4]
  3437. .selsizel:
  3438.         push    edx
  3439.         mov     ebx, edx
  3440.         xor     edx, edx
  3441.         add     ebx, ebx
  3442.         adc     edx, edx
  3443.         push    ebx
  3444.         push    edx
  3445.         add     ebx, ebx
  3446.         adc     edx, edx
  3447.         add     ebx, [esp+4]
  3448.         adc     edx, [esp]
  3449.         add     esp, 8
  3450.         add     eax, ebx
  3451.         adc     edx, 0
  3452.         div     ecx
  3453.         dec     edi
  3454.         cmp     edi, esi
  3455.         jae     @f
  3456.         mov     byte [edi], ','
  3457.         dec     edi
  3458.         sub     esi, 4
  3459. @@:
  3460.         pop     ebx
  3461.         add     dl, '0'
  3462.         mov     byte [edi], dl
  3463.         xchg    eax, ebx
  3464.         mul     [muldiv10]
  3465.         add     eax, ebx
  3466.         adc     edx, 0
  3467.         mov     ebx, eax
  3468.         or      ebx, edx
  3469.         jnz     .selsizel
  3470.         dec     edi
  3471.         mov     byte [edi], ' '
  3472.         mov     ecx, saved_file_name+512
  3473.         sub     ecx, edi
  3474.         ret     8
  3475.  
  3476. get_file_color:
  3477.         mov     ah, [esi + 6]
  3478.         cmp     ebp, [active_panel]
  3479.         jnz     @f
  3480.         cmp     ecx, [ebp + panel1_index - panel1_data]
  3481.         jnz     @f
  3482.         mov     ah, [esi + 7]
  3483. @@:
  3484.         test    byte [esi + 303], 1
  3485.         jnz     @f
  3486.         mov     ah, [esi + 4]
  3487.         cmp     ebp, [active_panel]
  3488.         jnz     @f
  3489.         cmp     ecx, [ebp + panel1_index - panel1_data]
  3490.         jnz     @f
  3491.         mov     ah, [esi + 5]
  3492. @@:
  3493.         ret
  3494.  
  3495. draw_name_column:
  3496.         mov     eax, [column_index]
  3497.         mov     [last_column_index], eax
  3498.         mov     edx, [ebp + panel1_numfiles - panel1_data]
  3499.         mov     ecx, [column_height]
  3500.         dec     ecx
  3501. .l:
  3502.         cmp     [column_index], edx
  3503.         jae     .ret
  3504.         push    ecx
  3505.         mov     ecx, [column_index]
  3506.         mov     esi, [ebp + panel1_files - panel1_data]
  3507.         mov     esi, [esi+ecx*4]
  3508.         mov     ebx, [esi]
  3509.         call    get_file_color
  3510.         add     esi, 40
  3511.         mov     ecx, [column_width]
  3512.         push    edi
  3513. @@:
  3514.         lodsb
  3515.         test    al, al
  3516.         jz      @f
  3517.         stosw
  3518.         loop    @b
  3519.         lodsb
  3520.         test    al, al
  3521.         jz      @f
  3522.         mov     byte [edi], '}'
  3523.         jmp     .continue
  3524. @@:
  3525.         test    bl, 10h
  3526.         jnz     .noalignext
  3527.         mov     ebx, [ebp + panel1_colmode - panel1_data]
  3528. ; sizeof(PanelMode) = 40
  3529.         lea     ebx, [ebx+ebx*4]
  3530.         cmp     [colmodes+ebx*8+PanelMode.bAlignExtensions], 0
  3531.         jz      .noalignext
  3532.         push    ecx
  3533.         sub     ecx, [column_width]
  3534.         neg     ecx
  3535.         jz      .noalignext2
  3536.         dec     esi
  3537. @@:
  3538.         dec     esi
  3539.         cmp     byte [esi], '.'
  3540.         loopnz  @b
  3541.         jnz     .noalignext2
  3542.         inc     esi
  3543.         sub     ecx, [column_width]
  3544.         neg     ecx
  3545.         sub     ecx, [esp]
  3546.         sub     edi, ecx
  3547.         sub     edi, ecx
  3548.         dec     ecx
  3549.         mov     ebx, [esp+4]
  3550.         cmp     ecx, 3
  3551.         ja      @f
  3552.         mov     cl, 3
  3553. @@:
  3554.         sub     ecx, [column_width]
  3555.         sub     ebx, edi
  3556.         sar     ebx, 1
  3557.         sub     ebx, ecx
  3558.         pop     ecx
  3559.         inc     ecx
  3560.         push    0
  3561.         cmp     ecx, ebx
  3562.         jbe     @f
  3563.         sub     ecx, ebx
  3564.         mov     [esp], ecx
  3565.         mov     ecx, ebx
  3566. @@:
  3567.         mov     al, ' '
  3568.         rep     stosw
  3569. @@:
  3570.         lodsb
  3571.         test    al, al
  3572.         jz      .noalignext2
  3573.         stosw
  3574.         jmp     @b
  3575. .noalignext2:
  3576.         pop     ecx
  3577. .noalignext:
  3578.         mov     al, ' '
  3579.         rep     stosw
  3580. .continue:
  3581.         pop     edi
  3582.         add     edi, [cur_width]
  3583.         add     edi, [cur_width]
  3584.         inc     [column_index]
  3585.         pop     ecx
  3586.         dec     ecx
  3587.         jnz     .l
  3588. .ret:
  3589.         mov     eax, [ebp + panel1_colsz - panel1_data]
  3590.         add     [ebp + panel1_colst - panel1_data], eax
  3591.         cmp     ebp, panel1_data
  3592.         jnz     .ret2
  3593. ; —¨á«® íªà ­®¢
  3594.         mov     eax, [num_screens]
  3595.         dec     eax
  3596.         jz      .ret2
  3597.         push    eax
  3598.         xor     eax, eax
  3599.         xor     edx, edx
  3600.         call    get_console_ptr
  3601.         mov     ah, [panel_nscreens_color]
  3602.         mov     al, '['
  3603.         stosw
  3604.         pop     eax
  3605.         push    -'0'
  3606. @@:
  3607.         xor     edx, edx
  3608.         div     [_10d]
  3609.         push    edx
  3610.         test    eax, eax
  3611.         jnz     @b
  3612. @@:
  3613.         pop     eax
  3614.         add     eax, '0'
  3615.         jz      @f
  3616.         mov     ah, [panel_nscreens_color]
  3617.         stosw
  3618.         jmp     @b
  3619. @@:
  3620.         mov     al, ']'
  3621.         mov     ah, [panel_nscreens_color]
  3622.         stosw
  3623. .ret2:
  3624. draw_empty_column:
  3625.         ret
  3626.  
  3627. draw_size_column:
  3628.         add     edi, [column_width]
  3629.         add     edi, [column_width]
  3630.         dec     edi
  3631.         dec     edi
  3632.         std
  3633.         mov     ecx, [column_height]
  3634.         dec     ecx
  3635.         push    [last_column_index]
  3636. .l:
  3637.         mov     edx, [ebp + panel1_numfiles - panel1_data]
  3638.         cmp     [last_column_index], edx
  3639.         jae     .ret
  3640.         push    ecx
  3641.         push    edi
  3642.         mov     ecx, [last_column_index]
  3643.         mov     esi, [ebp + panel1_files - panel1_data]
  3644.         mov     esi, [esi+ecx*4]
  3645.         call    get_file_color
  3646.         mov     ecx, [column_width]
  3647. @@:
  3648.         mov     ebx, eax
  3649.         cmp     word [esi+40], '..'
  3650.         jnz     .nodotdot
  3651.         cmp     byte [esi+42], 0
  3652.         jnz     .nodotdot
  3653. if lang eq ru
  3654.         mov     al, 'å'
  3655.         stosw
  3656.         mov     al, 'à'
  3657.         stosw
  3658.         mov     al, '¥'
  3659.         stosw
  3660.         mov     al, '¢'
  3661.         stosw
  3662.         mov     al, '‚'
  3663.         stosw
  3664.         sub     ecx, 5
  3665. else
  3666.         mov     al, ' '
  3667.         stosw
  3668.         stosw
  3669.         mov     al, 'p'
  3670.         stosw
  3671.         mov     al, 'U'
  3672.         stosw
  3673.         sub     ecx, 4
  3674. end if
  3675.         jmp     .size_written
  3676. .nodotdot:
  3677.         test    byte [esi], 10h
  3678.         jz      .nofolder
  3679. if lang eq ru
  3680.         mov     al, ' '
  3681.         stosw
  3682.         mov     al, 'ª'
  3683.         stosw
  3684.         mov     al, '¯'
  3685.         stosw
  3686.         mov     al, ' '
  3687.         stosw
  3688.         mov     al, ''
  3689.         stosw
  3690.         sub     ecx, 5
  3691. else
  3692.         mov     al, 'r'
  3693.         stosw
  3694.         mov     al, 'e'
  3695.         stosw
  3696.         mov     al, 'd'
  3697.         stosw
  3698.         mov     al, 'l'
  3699.         stosw
  3700.         mov     al, 'o'
  3701.         stosw
  3702.         mov     al, 'F'
  3703.         stosw
  3704.         sub     ecx, 6
  3705. end if
  3706.         jmp     .size_written
  3707. .nofolder:
  3708.         mov     eax, [esi+32]
  3709.         mov     edx, [esi+36]
  3710.         test    edx, edx
  3711.         jz      .less_4G
  3712.         cmp     edx, 10000/4*1024
  3713.         jb      .giga
  3714.         mov     al, 'T'
  3715.         shr     edx, 10
  3716.         jmp     .write_letter
  3717. .giga:
  3718.         mov     al, 'G'
  3719.         shl     edx, 2
  3720.         jmp     .write_letter
  3721. .less_4G:
  3722.         mov     edx, eax
  3723.         cmp     eax, 1000000
  3724.         jb      .byte
  3725.         cmp     eax, 10000*1024
  3726.         jb      .kilo
  3727.         mov     al, 'M'
  3728.         shr     edx, 20
  3729.         jmp     .write_letter
  3730. .kilo:
  3731.         mov     al, 'K'
  3732.         shr     edx, 10
  3733. .write_letter:
  3734.         mov     ah, bh
  3735.         stosw
  3736.         mov     al, ' '
  3737.         stosw
  3738.         dec     ecx
  3739.         dec     ecx
  3740. .byte:
  3741.         xchg    eax, edx
  3742.         xor     edx, edx
  3743.         div     [_10d]
  3744.         xchg    eax, edx
  3745.         add     al, '0'
  3746.         mov     ah, bh
  3747.         stosw
  3748.         dec     ecx
  3749.         test    edx, edx
  3750.         jnz     .byte
  3751. .size_written:
  3752.         mov     eax, ebx
  3753.         test    ecx, ecx
  3754.         jle     @f
  3755.         mov     al, ' '
  3756.         rep     stosw
  3757. @@:
  3758.         mov     byte [edi+1], ah
  3759.         pop     edi
  3760.         add     edi, [cur_width]
  3761.         add     edi, [cur_width]
  3762.         inc     [last_column_index]
  3763.         pop     ecx
  3764.         dec     ecx
  3765.         jnz     .l
  3766. .ret:
  3767.         pop     [last_column_index]
  3768.         cld
  3769.         ret
  3770.  
  3771. draw_date_column:
  3772.         mov     ecx, [column_height]
  3773.         dec     ecx
  3774.         push    [last_column_index]
  3775. .l:
  3776.         mov     edx, [ebp + panel1_numfiles - panel1_data]
  3777.         cmp     [last_column_index], edx
  3778.         jae     .ret
  3779.         push    ecx
  3780.         push    edi
  3781.         mov     ecx, [last_column_index]
  3782.         mov     esi, [ebp + panel1_files - panel1_data]
  3783.         mov     esi, [esi+ecx*4]
  3784.         call    get_file_color
  3785.         mov     bh, ah
  3786.         mov     byte [edi-1], bh
  3787.         mov     al, [esi+28]
  3788.         aam
  3789.         add     eax, '00'
  3790.         push    eax
  3791.         mov     al, ah
  3792.         mov     ah, bh
  3793.         stosw
  3794.         pop     eax
  3795.         mov     ah, bh
  3796.         stosw
  3797.         mov     al, '.'
  3798.         stosw
  3799.         mov     al, [esi+29]
  3800.         aam
  3801.         add     eax, '00'
  3802.         push    eax
  3803.         mov     al, ah
  3804.         mov     ah, bh
  3805.         stosw
  3806.         pop     eax
  3807.         mov     ah, bh
  3808.         stosw
  3809.         mov     al, '.'
  3810.         stosw
  3811.         movzx   eax, word [esi+30]
  3812.         xor     edx, edx
  3813.         div     [_10d]
  3814.         xchg    eax, edx
  3815.         add     al, '0'
  3816.         mov     ah, bh
  3817.         mov     [edi+2], ax
  3818.         xchg    eax, edx
  3819.         xor     edx, edx
  3820.         div     [_10d]
  3821.         xchg    eax, edx
  3822.         add     al, '0'
  3823.         mov     ah, bh
  3824.         stosw
  3825.         pop     edi
  3826.         add     edi, [cur_width]
  3827.         add     edi, [cur_width]
  3828.         inc     [last_column_index]
  3829.         pop     ecx
  3830.         dec     ecx
  3831.         jnz     .l
  3832. .ret:
  3833.         pop     [last_column_index]
  3834.         cld
  3835.         ret
  3836.  
  3837. draw_time_column:
  3838.         mov     ecx, [column_height]
  3839.         dec     ecx
  3840.         push    [last_column_index]
  3841. .l:
  3842.         mov     edx, [ebp + panel1_numfiles - panel1_data]
  3843.         cmp     [last_column_index], edx
  3844.         jae     .ret
  3845.         push    ecx
  3846.         push    edi
  3847.         mov     ecx, [last_column_index]
  3848.         mov     esi, [ebp + panel1_files - panel1_data]
  3849.         mov     esi, [esi+ecx*4]
  3850.         call    get_file_color
  3851.         mov     bh, ah
  3852.         mov     byte [edi-1], bh
  3853.         mov     al, [esi+26]
  3854.         aam
  3855.         add     eax, '00'
  3856.         push    eax
  3857.         mov     al, ah
  3858.         mov     ah, bh
  3859.         stosw
  3860.         pop     eax
  3861.         mov     ah, bh
  3862.         stosw
  3863.         mov     al, ':'
  3864.         stosw
  3865.         mov     al, [esi+25]
  3866.         aam
  3867.         add     eax, '00'
  3868.         push    eax
  3869.         mov     al, ah
  3870.         mov     ah, bh
  3871.         stosw
  3872.         pop     eax
  3873.         mov     ah, bh
  3874.         stosw
  3875.         pop     edi
  3876.         add     edi, [cur_width]
  3877.         add     edi, [cur_width]
  3878.         inc     [last_column_index]
  3879.         pop     ecx
  3880.         dec     ecx
  3881.         jnz     .l
  3882. .ret:
  3883.         pop     [last_column_index]
  3884.         cld
  3885.         ret
  3886.  
  3887. ;insert_last_dot:
  3888. ;        push    eax esi
  3889. ;        mov     ah, 0
  3890. ;.loop:
  3891. ;        lodsb
  3892. ;        test    al, al
  3893. ;        jz      .done
  3894. ;        cmp     al, '.'
  3895. ;        jnz     .loop
  3896. ;        mov     ah, 1
  3897. ;        jmp     .loop
  3898. ;.done:
  3899. ;        test    ah, ah
  3900. ;        jnz     @f
  3901. ;        mov     byte [esi-1], '.'
  3902. ;        mov     byte [esi], 0
  3903. ;@@:
  3904. ;        pop     esi eax
  3905. ;        ret
  3906.  
  3907. ;delete_last_dot:
  3908. ;        push    esi
  3909. ;@@:
  3910. ;        cmp     byte [esi], 0
  3911. ;        jz      @f
  3912. ;        inc     esi
  3913. ;        jmp     @b
  3914. ;@@:
  3915. ;        cmp     byte [esi-1], '.'
  3916. ;        jnz     @f
  3917. ;        mov     byte [esi-1], 0
  3918. ;@@:     pop     esi
  3919. ;        ret
  3920.  
  3921. read_folder:
  3922.         mov     eax, [ebp + panel1_nfa - panel1_data]
  3923.         mov     [dirinfo.size], eax
  3924.         shl     eax, 2
  3925.         add     eax, [ebp + panel1_files - panel1_data]
  3926.         mov     [dirinfo.dirdata], eax
  3927.         lea     eax, [ebp + panel1_dir - panel1_data]
  3928.         mov     [dirinfo.name], eax
  3929.         xor     eax, eax
  3930.         mov     [ebp + panel1_total_num - panel1_data], eax
  3931.         mov     dword [ebp + panel1_total_size - panel1_data], eax
  3932.         mov     dword [ebp + panel1_total_size+4 - panel1_data], eax
  3933.         mov     [ebp + panel1_selected_num - panel1_data], eax
  3934.         mov     dword [ebp + panel1_selected_size - panel1_data], eax
  3935.         mov     dword [ebp + panel1_selected_size+4 - panel1_data], eax
  3936. .retry:
  3937.         push    70
  3938.         pop     eax
  3939.         mov     ebx, dirinfo
  3940.         mcall
  3941.         test    eax, eax
  3942.         jz      .ok
  3943.         cmp     eax, 6
  3944.         jz      .ok
  3945. ; Failed to read folder, notify user
  3946.         cmp     [bSilentFolderMode], 0
  3947.         jnz     .dont_notify
  3948.         push    dword aContinue
  3949.         push    dword aRetry
  3950.         mov     edx, esp
  3951.         call    get_error_msg
  3952.         push    [dirinfo.name]
  3953.         push    dword aCannotReadFolder
  3954.         push    eax
  3955.         mov     eax, esp
  3956.         push    edx
  3957.         push    2
  3958.         push    eax
  3959.         push    3
  3960.         push    -1
  3961.         push    -1
  3962.         push    dword aError
  3963.         call    SayErr
  3964.         add     esp, 5*4
  3965.         test    eax, eax
  3966.         jz      .retry
  3967. .dont_notify:
  3968.         mov     esi, prev_dir
  3969.         cmp     byte [esi], 0
  3970.         jz      @f
  3971.         lea     edi, [ebp + panel1_dir - panel1_data]
  3972.         mov     ecx, 1024/4
  3973.         rep     movsd
  3974.         mov     byte [prev_dir], 0
  3975.         ret
  3976. @@:
  3977.         mov     [bSilentFolderMode], 1  ; enter silent mode
  3978.         mov     esi, [dirinfo.name]
  3979.         xor     edx, edx
  3980. .up1:
  3981.         lodsb
  3982.         test    al, al
  3983.         jz      .up1done
  3984.         cmp     al, '/'
  3985.         jnz     .up1
  3986.         inc     edx
  3987.         lea     edi, [esi-1]
  3988.         jmp     .up1
  3989. .up1done:
  3990.         cmp     edx, 2
  3991.         jbe     .noup
  3992.         stosb
  3993.         jmp     read_folder
  3994. .noup:
  3995.         mov     esi, [dirinfo.name]
  3996.         mov     edi, esi
  3997.         lodsd
  3998.         or      eax, 0x00202000
  3999.         cmp     eax, '/rd/'
  4000.         jnz     @f
  4001.         lodsw
  4002.         cmp     ax, '1'
  4003.         jz      .nosetrd
  4004. @@:
  4005.         mov     eax, '/rd/'
  4006.         stosd
  4007.         mov     ax, '1'
  4008.         stosw
  4009.         jmp     read_folder
  4010. .nosetrd:
  4011. ; „ ¦¥ à ¬¤¨áª ­¥ ¯à®ç¨â «áï. ‡­ ç¨â, ­¥ áã¤ì¡ ...
  4012.         and     dword [ebp + panel1_numfiles - panel1_data], 0
  4013.         and     dword [ebp + panel1_index - panel1_data], 0
  4014.         and     dword [ebp + panel1_start - panel1_data], 0
  4015.         mov     [bSilentFolderMode], 0  ; leave silent mode
  4016.         ret
  4017. .ok:
  4018.         mov     eax, [dirinfo.dirdata]
  4019.         cmp     [eax+8], ebx
  4020.         jz      .readdone
  4021.         push    dword [eax+8]
  4022.         mov     ecx, [ebp + panel1_files - panel1_data]
  4023.         call    pgfree
  4024.         pop     ecx
  4025.         add     ecx, 0xF
  4026.         and     ecx, not 0xF
  4027.         push    ecx
  4028.         imul    ecx, 4+304
  4029.         add     ecx, 32
  4030.         call    xpgalloc
  4031.         test    eax, eax
  4032.         jnz     .succ1
  4033.         pop     eax
  4034.         jmp     .readdone
  4035. .succ1:
  4036.         mov     [ebp + panel1_files - panel1_data], eax
  4037.         pop     [ebp + panel1_nfa - panel1_data]
  4038.         mov     [prev_dir], 0
  4039.         jmp     read_folder
  4040. .readdone:
  4041.         and     [ebp + panel1_start - panel1_data], 0
  4042.         and     [ebp + panel1_index - panel1_data], 0
  4043.         and     [ebp + panel1_start - panel1_data], 0
  4044.         mov     edi, [ebp + panel1_files - panel1_data]
  4045.         mov     eax, [ebp + panel1_nfa - panel1_data]
  4046.         lea     eax, [edi + eax*4 + 32]
  4047.         mov     ecx, [eax-32+4]
  4048.         test    ecx, ecx
  4049.         jz      .loopdone
  4050.         xor     edx, edx
  4051. ; ˆ£­®à¨à㥬 ᯥ樠«ì­ë¥ ¢å®¤ë, ᮮ⢥âáâ¢ãî騥 ¯ ¯ª¥ '.' ¨ ¬¥âª¥ ⮬ 
  4052. .ptrinit:
  4053.         cmp     word [eax+40], '.'
  4054.         jz      .loopcont
  4055.         test    byte [eax], 8
  4056.         jnz     .loopcont
  4057.         mov     byte [eax+303], 0
  4058.         test    edx, edx
  4059.         jnz     .nodotdot
  4060.         cmp     word [eax+40], '..'
  4061.         jnz     .nodotdot
  4062.         cmp     byte [eax+42], 0
  4063.         jnz     .nodotdot
  4064.         mov     edx, eax
  4065.         push    edi
  4066. @@:
  4067.         cmp     edi, [ebp + panel1_files - panel1_data]
  4068.         jbe     @f
  4069.         push    dword [edi-4]
  4070.         pop     dword [edi]
  4071.         sub     edi, 4
  4072.         jmp     @b
  4073. @@:
  4074.         stosd
  4075.         pop     edi
  4076.         scasd
  4077.         jmp     .dotdot
  4078. .nodotdot:
  4079.         stosd
  4080.         xor     ebx, ebx
  4081.         test    byte [eax], 10h
  4082.         setz    bl
  4083.         add     [ebp + panel1_total_num - panel1_data], ebx
  4084.         mov     ebx, dword [eax+32]
  4085.         add     dword [ebp + panel1_total_size - panel1_data], ebx
  4086.         mov     ebx, dword [eax+36]
  4087.         adc     dword [ebp + panel1_total_size+4 - panel1_data], ebx
  4088. .dotdot:
  4089. ; ¯®¤á¢¥âª 
  4090. ;        call    insert_last_dot
  4091.         pushad
  4092.         mov     ebp, eax
  4093.         lea     esi, [ebp+40]
  4094.         mov     edi, lower_file_name
  4095.         mov     edx, edi
  4096.         xor     eax, eax
  4097. @@:
  4098.         lodsb
  4099.         mov     al, [tolower_table+eax]
  4100.         stosb
  4101.         test    al, al
  4102.         jnz     @b
  4103.         mov     esi, edx
  4104.         lea     edx, [edi-1]
  4105.         xor     ecx, ecx
  4106. .highlight_test_loop:
  4107.         mov     ebx, [highlight_groups+ecx*4]
  4108.         mov     al, [ebx + highlight.IncludeAttributes]
  4109.         mov     ah, [ebp]
  4110.         and     ah, al
  4111.         cmp     ah, al
  4112.         jnz     .highlight_test_failed
  4113.         lea     edi, [ebx + highlight.Mask]
  4114.         call    match_mask_rev_lowercase
  4115.         jc      .highlight_test_failed
  4116.         mov     ah, [ebx + highlight.NormalColor]
  4117.         test    ah, ah
  4118.         jnz     @f
  4119.         mov     ah, [panel_normal_color]
  4120. @@:
  4121.         mov     [ebp+4], ah
  4122.         mov     ah, [ebx + highlight.CursorColor]
  4123.         test    ah, ah
  4124.         jnz     @f
  4125.         mov     ah, [panel_cursor_color]
  4126. @@:
  4127.         mov     [ebp+5], ah
  4128.         mov     ah, [ebx + highlight.SelectedColor]
  4129.         test    ah, ah
  4130.         jnz     @f
  4131.         mov     ah, [panel_selected_color]
  4132. @@:
  4133.         mov     [ebp+6], ah
  4134.         mov     ah, [ebx + highlight.SelectedCursorColor]
  4135.         test    ah, ah
  4136.         jnz     @f
  4137.         mov     ah, [panel_selected_cursor_color]
  4138. @@:
  4139.         mov     [ebp+7], ah
  4140.         jmp     .doname
  4141. .highlight_test_failed:
  4142.         inc     ecx
  4143.         cmp     ecx, [highlight_num_groups]
  4144.         jb      .highlight_test_loop
  4145. .nohighlight:
  4146.         mov     ah, [panel_normal_color]
  4147.         mov     [ebp+4], ah
  4148.         mov     ah, [panel_cursor_color]
  4149.         mov     [ebp+5], ah
  4150.         mov     ah, [panel_selected_color]
  4151.         mov     [ebp+6], ah
  4152.         mov     ah, [panel_selected_cursor_color]
  4153.         mov     [ebp+7], ah
  4154. .doname:
  4155. ;        call    delete_last_dot
  4156.         popad
  4157. .loopcont:
  4158.         add     eax, 304
  4159.         dec     ecx
  4160.         jnz     .ptrinit
  4161. .loopdone:
  4162.         sub     edi, [ebp + panel1_files - panel1_data]
  4163.         shr     edi, 2
  4164.         mov     [ebp + panel1_numfiles - panel1_data], edi
  4165. .done:
  4166. ; ‘®àâ¨à®¢ª 
  4167. sort_files:
  4168.         movzx   eax, [ebp + panel1_sortmode - panel1_data]
  4169.         mov     ebx, [compare_fns + eax*4]
  4170.         mov     edx, [ebp + panel1_files - panel1_data]
  4171.         mov     ecx, [ebp + panel1_numfiles - panel1_data]
  4172.         jecxz   .skip
  4173.         mov     eax, [edx]
  4174.         cmp     word [eax+40], '..'
  4175.         jnz     .nodotdot
  4176.         cmp     byte [eax+42], 0
  4177.         jnz     .nodotdot
  4178.         dec     ecx
  4179.         add     edx, 4
  4180. .nodotdot:
  4181.         call    sort
  4182. .skip:
  4183.         mov     [bSilentFolderMode], 0  ; leave silent mode
  4184.         ret
  4185.  
  4186. compare_name:
  4187.         test    byte [esi], 10h
  4188.         jnz     .1dir
  4189.         test    byte [edi], 10h
  4190.         jnz     .greater
  4191. .eq1:
  4192.         add     esi, 40
  4193.         add     edi, 40
  4194.         jmp     strcmpi
  4195. .greater:
  4196.         test    esi, esi
  4197.         ret
  4198. .1dir:
  4199.         test    byte [edi], 10h
  4200.         jnz     .eq1
  4201. .less:
  4202.         xor     edi, edi
  4203.         stc
  4204.         ret
  4205.  
  4206. compare_name_rev:
  4207.         test    byte [esi], 10h
  4208.         jnz     .1dir
  4209.         test    byte [edi], 10h
  4210.         jnz     .greater
  4211. .eq1:
  4212.         add     esi, 40
  4213.         add     edi, 40
  4214.         xchg    esi, edi
  4215.         jmp     strcmpi
  4216. .greater:
  4217.         test    esi, esi
  4218.         ret
  4219. .1dir:
  4220.         test    byte [edi], 10h
  4221.         jnz     .eq1
  4222. .less:
  4223.         xor     edi, edi
  4224.         stc
  4225.         ret
  4226.  
  4227. strcmpi:
  4228.         push    eax
  4229. @@:
  4230.         lodsb
  4231.         call    match_symbol
  4232.         jnz     .ret
  4233.         inc     edi
  4234.         test    al, al
  4235.         jnz     @b
  4236. .ret:
  4237.         pop     eax
  4238.         ret
  4239.  
  4240. compare_ext:
  4241.         test    byte [esi], 10h
  4242.         jnz     .1dir
  4243.         test    byte [edi], 10h
  4244.         jnz     .greater
  4245. .eq1:
  4246.         add     esi, 40
  4247.         add     edi, 40
  4248.         push    esi edi
  4249.         call    seek_ext
  4250.         xchg    esi, edi
  4251.         call    seek_ext
  4252.         xchg    esi, edi
  4253.         call    strcmpi
  4254.         jnz     .ret
  4255.         pop     edi esi
  4256.         jmp     strcmpi
  4257. .ret:
  4258.         pop     edi esi
  4259.         ret
  4260. .greater:
  4261.         test    esi, esi
  4262.         ret
  4263. .1dir:
  4264.         test    byte [edi], 10h
  4265.         jnz     .eq1
  4266. .less:
  4267.         xor     edi, edi
  4268.         stc
  4269.         ret
  4270.  
  4271. compare_ext_rev:
  4272.         test    byte [esi], 10h
  4273.         jnz     .1dir
  4274.         test    byte [edi], 10h
  4275.         jnz     .greater
  4276. .eq1:
  4277.         add     esi, 40
  4278.         add     edi, 40
  4279.         push    esi edi
  4280.         call    seek_ext
  4281.         xchg    esi, edi
  4282.         call    seek_ext
  4283.         call    strcmpi
  4284.         jnz     .ret
  4285.         pop     edi esi
  4286.         xchg    esi, edi
  4287.         jmp     strcmpi
  4288. .ret:
  4289.         pop     edi esi
  4290.         ret
  4291. .greater:
  4292.         test    esi, esi
  4293.         ret
  4294. .1dir:
  4295.         test    byte [edi], 10h
  4296.         jnz     .eq1
  4297. .less:
  4298.         xor     edi, edi
  4299.         stc
  4300.         ret
  4301.  
  4302. seek_ext:
  4303.         push    eax
  4304.         xor     eax, eax
  4305. .l:
  4306.         inc     esi
  4307.         cmp     byte [esi-1], '.'
  4308.         jnz     @f
  4309.         mov     eax, esi
  4310. @@:
  4311.         cmp     byte [esi-1], 0
  4312.         jnz     .l
  4313.         test    eax, eax
  4314.         jnz     @f
  4315.         lea     eax, [esi-1]
  4316. @@:
  4317.         mov     esi, eax
  4318.         pop     eax
  4319.         ret
  4320.  
  4321. compare_modified:
  4322.         test    byte [esi], 10h
  4323.         jnz     .1dir
  4324.         test    byte [edi], 10h
  4325.         jnz     .greater
  4326. .eq1:
  4327.         push    edi
  4328.         mov     edi, [edi+28]
  4329.         cmp     edi, [esi+28]
  4330.         pop     edi
  4331.         jnz     @f
  4332.         push    edi
  4333.         mov     edi, [edi+24]
  4334.         cmp     edi, [esi+24]
  4335.         pop     edi
  4336.         jnz     @f
  4337.         add     esi, 40
  4338.         add     edi, 40
  4339.         jmp     strcmpi
  4340. @@:
  4341.         ret
  4342. .greater:
  4343.         test    esi, esi
  4344.         ret
  4345. .1dir:
  4346.         test    byte [edi], 10h
  4347.         jnz     .eq1
  4348. .less:
  4349.         xor     edi, edi
  4350.         stc
  4351.         ret
  4352.  
  4353. compare_modified_rev:
  4354.         test    byte [esi], 10h
  4355.         jnz     .1dir
  4356.         test    byte [edi], 10h
  4357.         jnz     .greater
  4358. .eq1:
  4359.         push    esi
  4360.         mov     esi, [esi+28]
  4361.         cmp     esi, [edi+28]
  4362.         pop     esi
  4363.         jnz     @f
  4364.         push    esi
  4365.         mov     esi, [esi+24]
  4366.         cmp     esi, [edi+24]
  4367.         pop     esi
  4368.         jnz     @f
  4369.         add     esi, 40
  4370.         add     edi, 40
  4371.         xchg    esi, edi
  4372.         jmp     strcmpi
  4373. @@:
  4374.         ret
  4375. .greater:
  4376.         test    esi, esi
  4377.         ret
  4378. .1dir:
  4379.         test    byte [edi], 10h
  4380.         jnz     .eq1
  4381. .less:
  4382.         xor     edi, edi
  4383.         stc
  4384.         ret
  4385.  
  4386. compare_size:
  4387.         test    byte [esi], 10h
  4388.         jnz     .1dir
  4389.         test    byte [edi], 10h
  4390.         jnz     .greater
  4391. .eq1:
  4392.         push    edi
  4393.         mov     edi, [edi+36]
  4394.         cmp     edi, [esi+36]
  4395.         pop     edi
  4396.         jnz     @f
  4397.         push    edi
  4398.         mov     edi, [edi+32]
  4399.         cmp     edi, [esi+32]
  4400.         pop     edi
  4401.         jnz     @f
  4402.         add     esi, 40
  4403.         add     edi, 40
  4404.         jmp     strcmpi
  4405. @@:
  4406.         ret
  4407. .greater:
  4408.         test    esi, esi
  4409.         ret
  4410. .1dir:
  4411.         test    byte [edi], 10h
  4412.         jnz     .eq1
  4413. .less:
  4414.         xor     edi, edi
  4415.         stc
  4416.         ret
  4417.  
  4418. compare_size_rev:
  4419.         test    byte [esi], 10h
  4420.         jnz     .1dir
  4421.         test    byte [edi], 10h
  4422.         jnz     .greater
  4423. .eq1:
  4424.         push    esi
  4425.         mov     esi, [esi+36]
  4426.         cmp     esi, [edi+36]
  4427.         pop     esi
  4428.         jnz     @f
  4429.         push    esi
  4430.         mov     esi, [esi+32]
  4431.         cmp     esi, [edi+32]
  4432.         pop     esi
  4433.         jnz     @f
  4434.         add     esi, 40
  4435.         add     edi, 40
  4436.         xchg    esi, edi
  4437.         jmp     strcmpi
  4438. @@:
  4439.         ret
  4440. .greater:
  4441.         test    esi, esi
  4442.         ret
  4443. .1dir:
  4444.         test    byte [edi], 10h
  4445.         jnz     .eq1
  4446. .less:
  4447.         xor     edi, edi
  4448.         stc
  4449.         ret
  4450.  
  4451. compare_unordered:
  4452.         cmp     esi, edi
  4453.         ret
  4454. compare_unordered_rev:
  4455.         cmp     edi, esi
  4456.         ret
  4457.  
  4458. compare_created:
  4459.         test    byte [esi], 10h
  4460.         jnz     .1dir
  4461.         test    byte [edi], 10h
  4462.         jnz     .greater
  4463. .eq1:
  4464.         push    edi
  4465.         mov     edi, [edi+12]
  4466.         cmp     edi, [esi+12]
  4467.         pop     edi
  4468.         jnz     @f
  4469.         push    edi
  4470.         mov     edi, [edi+8]
  4471.         cmp     edi, [esi+8]
  4472.         pop     edi
  4473.         jnz     @f
  4474.         add     esi, 40
  4475.         add     edi, 40
  4476.         jmp     strcmpi
  4477. @@:
  4478.         ret
  4479. .greater:
  4480.         test    esi, esi
  4481.         ret
  4482. .1dir:
  4483.         test    byte [edi], 10h
  4484.         jnz     .eq1
  4485. .less:
  4486.         xor     edi, edi
  4487.         stc
  4488.         ret
  4489.  
  4490. compare_created_rev:
  4491.         test    byte [esi], 10h
  4492.         jnz     .1dir
  4493.         test    byte [edi], 10h
  4494.         jnz     .greater
  4495. .eq1:
  4496.         push    esi
  4497.         mov     esi, [esi+12]
  4498.         cmp     esi, [edi+12]
  4499.         pop     esi
  4500.         jnz     @f
  4501.         push    esi
  4502.         mov     esi, [esi+8]
  4503.         cmp     esi, [edi+8]
  4504.         pop     esi
  4505.         jnz     @f
  4506.         add     esi, 40
  4507.         add     edi, 40
  4508.         xchg    esi, edi
  4509.         jmp     strcmpi
  4510. @@:
  4511.         ret
  4512. .greater:
  4513.         test    esi, esi
  4514.         ret
  4515. .1dir:
  4516.         test    byte [edi], 10h
  4517.         jnz     .eq1
  4518. .less:
  4519.         xor     edi, edi
  4520.         stc
  4521.         ret
  4522.  
  4523. compare_accessed:
  4524.         test    byte [esi], 10h
  4525.         jnz     .1dir
  4526.         test    byte [edi], 10h
  4527.         jnz     .greater
  4528. .eq1:
  4529.         push    edi
  4530.         mov     edi, [edi+20]
  4531.         cmp     edi, [esi+20]
  4532.         pop     edi
  4533.         jnz     @f
  4534.         push    edi
  4535.         mov     edi, [edi+16]
  4536.         cmp     edi, [esi+16]
  4537.         pop     edi
  4538.         jnz     @f
  4539.         add     esi, 40
  4540.         add     edi, 40
  4541.         jmp     strcmpi
  4542. @@:
  4543.         ret
  4544. .greater:
  4545.         test    esi, esi
  4546.         ret
  4547. .1dir:
  4548.         test    byte [edi], 10h
  4549.         jnz     .eq1
  4550. .less:
  4551.         xor     edi, edi
  4552.         stc
  4553.         ret
  4554.  
  4555. compare_accessed_rev:
  4556.         test    byte [esi], 10h
  4557.         jnz     .1dir
  4558.         test    byte [edi], 10h
  4559.         jnz     .greater
  4560. .eq1:
  4561.         push    esi
  4562.         mov     esi, [esi+20]
  4563.         cmp     esi, [edi+20]
  4564.         pop     esi
  4565.         jnz     @f
  4566.         push    esi
  4567.         mov     esi, [esi+16]
  4568.         cmp     esi, [edi+16]
  4569.         pop     esi
  4570.         jnz     @f
  4571.         add     esi, 40
  4572.         add     edi, 40
  4573.         xchg    esi, edi
  4574.         jmp     strcmpi
  4575. @@:
  4576.         ret
  4577. .greater:
  4578.         test    esi, esi
  4579.         ret
  4580. .1dir:
  4581.         test    byte [edi], 10h
  4582.         jnz     .eq1
  4583. .less:
  4584.         xor     edi, edi
  4585.         stc
  4586.         ret
  4587.  
  4588. if 0
  4589. match_mask:
  4590. ; in: esi->name, edi->mask
  4591. ; out: CF clear <=> match
  4592.         pusha
  4593.         xchg    esi, edi
  4594. .main_cycle:
  4595.         push    esi
  4596. @@:
  4597.         lodsb
  4598.         test    al, al
  4599.         jz      @f
  4600.         cmp     al, ','
  4601.         jz      @f
  4602.         cmp     al, '|'
  4603.         jnz     @b
  4604. @@:
  4605.         mov     [esi-1], byte 0
  4606.         xchg    esi, [esp]
  4607.         call    match_single_mask
  4608.         pop     esi
  4609.         mov     [esi-1], al
  4610.         jnc     .found
  4611.         cmp     al, ','
  4612.         jz      .main_cycle
  4613. .done_fail:
  4614.         stc
  4615.         popa
  4616.         ret
  4617. .found:
  4618.         test    al, al
  4619.         jz      .done_succ
  4620.         cmp     al, '|'
  4621.         jz      .test_exclude
  4622.         lodsb
  4623.         jmp     .found
  4624. .done_succ:
  4625.         clc
  4626.         popa
  4627.         ret
  4628. .test_exclude:
  4629.         push    esi
  4630. @@:
  4631.         lodsb
  4632.         test    al, al
  4633.         jz      @f
  4634.         cmp     al, ','
  4635.         jnz     @b
  4636. @@:
  4637.         mov     byte [esi-1], 0
  4638.         xchg    esi, [esp]
  4639.         call    match_single_mask
  4640.         pop     esi
  4641.         mov     [esi-1], al
  4642.         jnc     .done_fail
  4643.         test    al, al
  4644.         jz      .done_succ
  4645.         jmp     .test_exclude
  4646.  
  4647. match_single_mask:
  4648. ; in: esi->mask, edi->name
  4649. ; out: CF clear <=> match
  4650.         pusha
  4651. .mask_symbol:
  4652.         lodsb
  4653.         test    al, al
  4654.         jz      .mask_done
  4655.         cmp     al, '*'
  4656.         jz      .asterisk
  4657.         cmp     al, '?'
  4658.         jz      .quest
  4659.         cmp     al, '['
  4660.         jz      .list
  4661.         call    match_symbol
  4662.         jnz     .done_fail
  4663.         inc     edi
  4664.         jmp     .mask_symbol
  4665. .done_fail:
  4666.         stc
  4667.         popa
  4668.         ret
  4669. .mask_done:
  4670.         scasb
  4671.         jnz     .done_fail
  4672. .done_succ:
  4673.         clc
  4674.         popa
  4675.         ret
  4676. .quest:
  4677.         mov     al, 0
  4678.         scasb
  4679.         jz      .done_fail
  4680.         jmp     .mask_symbol
  4681. .list:
  4682.         lodsb
  4683.         cmp     al, ']'
  4684.         jz      .done_fail
  4685.         cmp     byte [esi+1], '-'
  4686.         jz      .range
  4687.         call    match_symbol
  4688.         jnz     .list
  4689. .listok:
  4690.         inc     edi
  4691. @@:
  4692.         lodsb
  4693.         cmp     al, ']'
  4694.         jnz     @b
  4695.         jmp     .mask_symbol
  4696. .range:
  4697.         call    match_symbol
  4698.         ja      @f
  4699.         mov     al, [esi+2]
  4700.         call    match_symbol
  4701.         jae     .listok
  4702. @@:
  4703.         inc     esi
  4704.         jmp     .list
  4705. .asterisk:
  4706.         cmp     byte [esi], 0
  4707.         jz      .done_succ
  4708.         cmp     byte [esi], '?'
  4709.         jnz     @f
  4710.         mov     al, 0
  4711.         scasb
  4712.         jz      .done_fail
  4713.         inc     esi
  4714.         jmp     .asterisk
  4715. @@:
  4716.         cmp     byte [esi], '['
  4717.         jz      .asterisk_common
  4718. ; the mask is ...*<normal-symbol>...
  4719. .asterisk_normal:
  4720.         mov     al, [esi]
  4721. @@:
  4722.         cmp     byte [edi], 0
  4723.         jz      .done_fail
  4724.         call    match_symbol
  4725.         jz      @f
  4726.         inc     edi
  4727.         jmp     @b
  4728. @@:
  4729.         inc     edi
  4730.         inc     esi
  4731.         call    match_single_mask
  4732.         jnc     .done_succ
  4733.         dec     esi
  4734.         jmp     .asterisk_normal
  4735. .asterisk_common:
  4736.         push    edi
  4737. @@:
  4738.         call    match_single_mask
  4739.         jnc     @f
  4740.         mov     al, 0
  4741.         scasb
  4742.         jnz     @b
  4743.         pop     edi
  4744.         jmp     .done_fail
  4745. @@:
  4746.         pop     edi
  4747.         jmp     .done_succ
  4748.  
  4749. match_mask_rev:
  4750. ; in: esi->name, edx->end of name, edi->mask
  4751. ; out: CF clear <=> match
  4752.         pusha
  4753.         xchg    esi, edx
  4754.         xchg    esi, edi
  4755. .main_cycle:
  4756.         mov     ecx, esi
  4757. @@:
  4758.         lodsb
  4759.         test    al, al
  4760.         jz      @f
  4761.         cmp     al, ','
  4762.         jz      @f
  4763.         cmp     al, '|'
  4764.         jnz     @b
  4765. @@:
  4766.         dec     esi
  4767.         mov     [esi], byte 0
  4768.         call    match_single_mask_rev2
  4769.         mov     [esi], al
  4770.         inc     esi
  4771.         jnc     .found
  4772.         cmp     al, ','
  4773.         jz      .main_cycle
  4774. .done_fail:
  4775.         stc
  4776.         popa
  4777.         ret
  4778. .found:
  4779.         test    al, al
  4780.         jz      .done_succ
  4781.         cmp     al, '|'
  4782.         jz      .test_exclude
  4783.         lodsb
  4784.         jmp     .found
  4785. .done_succ:
  4786.         clc
  4787.         popa
  4788.         ret
  4789. .test_exclude:
  4790.         mov     ecx, esi
  4791. @@:
  4792.         lodsb
  4793.         test    al, al
  4794.         jz      @f
  4795.         cmp     al, ','
  4796.         jnz     @b
  4797. @@:
  4798.         dec     esi
  4799.         mov     byte [esi], 0
  4800.         call    match_single_mask_rev2
  4801.         mov     [esi], al
  4802.         inc     esi
  4803.         jnc     .done_fail
  4804.         test    al, al
  4805.         jz      .done_succ
  4806.         jmp     .test_exclude
  4807.  
  4808. match_single_mask_rev2:
  4809.         pusha
  4810.         jmp     match_single_mask_rev.mask_symbol
  4811. match_single_mask_rev:
  4812. ; in: esi->mask, edi->end of name, edx->start of name
  4813. ; out: CF clear <=> match
  4814.         pusha
  4815.         mov     ecx, esi
  4816. @@:
  4817.         lodsb
  4818.         test    al, al
  4819.         jnz     @b
  4820.         dec     esi
  4821. ; esi->end of mask, ecx->start of mask
  4822. .mask_symbol:
  4823.         dec     esi
  4824.         cmp     esi, ecx
  4825.         jb      .mask_done
  4826.         mov     al, [esi]
  4827.         cmp     al, '*'
  4828.         jz      .asterisk
  4829.         cmp     al, '?'
  4830.         jz      .quest
  4831.         cmp     al, ']'
  4832.         jz      .list
  4833.         dec     edi
  4834.         cmp     edi, edx
  4835.         jb      .done_fail
  4836.         call    match_symbol
  4837.         jz      .mask_symbol
  4838. .done_fail:
  4839.         stc
  4840.         popa
  4841.         ret
  4842. .mask_done:
  4843.         cmp     edi, edx
  4844.         jnz     .done_fail
  4845. .done_succ:
  4846.         clc
  4847.         popa
  4848.         ret
  4849. .quest:
  4850.         dec     edi
  4851.         cmp     edi, edx
  4852.         jb      .done_fail
  4853.         jmp     .mask_symbol
  4854. .list:
  4855.         dec     edi
  4856.         cmp     edi, edx
  4857.         jb      .done_fail
  4858. .list_check:
  4859.         dec     esi
  4860.         cmp     esi, ecx
  4861.         jbe     .done_fail
  4862.         mov     al, [esi]
  4863.         cmp     al, '['
  4864.         jz      .done_fail
  4865.         cmp     byte [esi-1], '-'
  4866.         jz      .range
  4867.         call    match_symbol
  4868.         jnz     .list_check
  4869. .listok:
  4870. @@:
  4871.         dec     esi
  4872.         cmp     esi, ecx
  4873.         jb      .done_fail
  4874.         cmp     byte [esi], '['
  4875.         jnz     @b
  4876.         jmp     .mask_symbol
  4877. .range:
  4878.         call    match_symbol
  4879.         jb      @f
  4880.         mov     al, [esi-2]
  4881.         call    match_symbol
  4882.         jbe     .listok
  4883. @@:
  4884.         dec     esi
  4885.         dec     esi
  4886.         jmp     .list_check
  4887. .asterisk:
  4888.         cmp     esi, ecx
  4889.         jz      .done_succ
  4890.         cmp     byte [esi-1], '?'
  4891.         jnz     @f
  4892.         cmp     edi, edx
  4893.         jz      .done_fail
  4894.         dec     esi
  4895.         jmp     .asterisk
  4896. @@:
  4897.         cmp     byte [esi-1], ']'
  4898.         jz      .asterisk_common
  4899. ; the mask is ...<normal-symbol>*...
  4900. .asterisk_normal:
  4901.         mov     al, [esi-1]
  4902. @@:
  4903.         cmp     edi, edx
  4904.         jz      .done_fail
  4905.         call    match_symbol
  4906.         jz      @f
  4907.         dec     edi
  4908.         jmp     @b
  4909. @@:
  4910.         dec     edi
  4911.         dec     esi
  4912.         call    match_single_mask_rev2
  4913.         jnc     .done_succ
  4914.         inc     esi
  4915.         jmp     .asterisk_normal
  4916. .asterisk_common:
  4917.         push    edi
  4918. @@:
  4919.         call    match_single_mask_rev2
  4920.         jnc     @f
  4921.         dec     edi
  4922.         cmp     edi, edx
  4923.         jae     @b
  4924.         pop     edi
  4925.         jmp     .done_fail
  4926. @@:
  4927.         pop     edi
  4928.         jmp     .done_succ
  4929. end if
  4930.  
  4931. ;tolower:
  4932. ;        push    ecx
  4933. ;        movzx   ecx, al
  4934. ;        mov     al, [tolower_table+ecx]
  4935. ;        pop     ecx
  4936. ;        ret
  4937.  
  4938. match_symbol:
  4939. ; in: al,[edi]=symbols
  4940. ; out: flags as 'cmp al,[edi]'
  4941.         push    eax ecx
  4942.         movzx   ecx, al
  4943.         mov     al, [tolower_table+ecx]
  4944.         movzx   ecx, byte [edi]
  4945.         cmp     al, [tolower_table+ecx]
  4946.         pop     ecx eax
  4947.         ret
  4948.  
  4949. match_mask_rev_lowercase:
  4950. ; in: esi->name, edx->end of name, edi->mask
  4951. ; out: CF clear <=> match
  4952.         pusha
  4953.         xchg    esi, edx
  4954.         xchg    esi, edi
  4955. .main_cycle:
  4956.         mov     ecx, esi
  4957. @@:
  4958.         lodsb
  4959.         test    al, al
  4960.         jz      @f
  4961.         cmp     al, ','
  4962.         jz      @f
  4963.         cmp     al, ';'
  4964.         jz      @f
  4965.         cmp     al, '|'
  4966.         jnz     @b
  4967. @@:
  4968.         dec     esi
  4969.         mov     [esi], byte 0
  4970.         call    match_single_mask_rev_lowercase
  4971.         mov     [esi], al
  4972.         inc     esi
  4973.         jnc     .found
  4974.         cmp     al, ','
  4975.         jz      .main_cycle
  4976.         cmp     al, ';'
  4977.         jz      .main_cycle
  4978. .done_fail:
  4979.         stc
  4980.         popa
  4981.         ret
  4982. .found:
  4983.         test    al, al
  4984.         jz      .done_succ
  4985.         cmp     al, '|'
  4986.         jz      .test_exclude
  4987.         lodsb
  4988.         jmp     .found
  4989. .done_succ:
  4990.         clc
  4991.         popa
  4992.         ret
  4993. .test_exclude:
  4994.         mov     ecx, esi
  4995. @@:
  4996.         lodsb
  4997.         test    al, al
  4998.         jz      @f
  4999.         cmp     al, ','
  5000.         jz      @f
  5001.         cmp     al, ';'
  5002.         jnz     @b
  5003. @@:
  5004.         dec     esi
  5005.         mov     byte [esi], 0
  5006.         call    match_single_mask_rev_lowercase
  5007.         mov     [esi], al
  5008.         inc     esi
  5009.         jnc     .done_fail
  5010.         test    al, al
  5011.         jz      .done_succ
  5012.         jmp     .test_exclude
  5013.  
  5014. match_single_mask_rev_lowercase:
  5015. ; in: esi->end of mask, ecx->start of mask, edi->end of name, edx->start of name
  5016. ; out: CF clear <=> match
  5017.         push    esi edi eax
  5018. .mask_symbol:
  5019.         dec     esi
  5020.         cmp     esi, ecx
  5021.         jb      .mask_done
  5022.         mov     al, [esi]
  5023.         cmp     al, '*'
  5024.         jz      .asterisk
  5025.         cmp     al, '?'
  5026.         jz      .quest
  5027.         cmp     al, ']'
  5028.         jz      .list
  5029.         dec     edi
  5030.         cmp     edi, edx
  5031.         jb      .done_fail
  5032.         cmp     al, [edi]
  5033.         jz      .mask_symbol
  5034. .done_fail:
  5035.         stc
  5036.         pop     eax edi esi
  5037.         ret
  5038. .mask_done:
  5039.         cmp     edi, edx
  5040.         jnz     .done_fail
  5041. .done_succ:
  5042.         clc
  5043.         pop     eax edi esi
  5044.         ret
  5045. .quest:
  5046.         dec     edi
  5047.         cmp     edi, edx
  5048.         jb      .done_fail
  5049.         jmp     .mask_symbol
  5050. .list:
  5051.         dec     edi
  5052.         cmp     edi, edx
  5053.         jb      .done_fail
  5054. .list_check:
  5055.         dec     esi
  5056.         cmp     esi, ecx
  5057.         jbe     .done_fail
  5058.         mov     al, [esi]
  5059.         cmp     al, '['
  5060.         jz      .done_fail
  5061.         cmp     byte [esi-1], '-'
  5062.         jz      .range
  5063.         cmp     al, [edi]
  5064.         jnz     .list_check
  5065. .listok:
  5066. @@:
  5067.         dec     esi
  5068.         cmp     esi, ecx
  5069.         jb      .done_fail
  5070.         cmp     byte [esi], '['
  5071.         jnz     @b
  5072.         jmp     .mask_symbol
  5073. .range:
  5074.         cmp     al, [edi]
  5075.         jb      @f
  5076.         mov     al, [esi-2]
  5077.         cmp     al, [edi]
  5078.         jbe     .listok
  5079. @@:
  5080.         dec     esi
  5081.         dec     esi
  5082.         jmp     .list_check
  5083. .asterisk:
  5084.         cmp     esi, ecx
  5085.         jz      .done_succ
  5086.         cmp     byte [esi-1], '?'
  5087.         jnz     @f
  5088.         cmp     edi, edx
  5089.         jz      .done_fail
  5090.         dec     esi
  5091.         jmp     .asterisk
  5092. @@:
  5093.         cmp     byte [esi-1], ']'
  5094.         jz      .asterisk_common
  5095. ; the mask is ...<normal-symbol>*...
  5096. .asterisk_normal:
  5097.         mov     al, [esi-1]
  5098. @@:
  5099.         cmp     edi, edx
  5100.         jz      .done_fail
  5101.         cmp     al, [edi]
  5102.         jz      @f
  5103.         dec     edi
  5104.         jmp     @b
  5105. @@:
  5106.         dec     edi
  5107.         dec     esi
  5108.         call    match_single_mask_rev_lowercase
  5109.         jnc     .done_succ
  5110.         inc     esi
  5111.         jmp     .asterisk_normal
  5112. .asterisk_common:
  5113.         push    edi
  5114. @@:
  5115.         call    match_single_mask_rev_lowercase
  5116.         jnc     @f
  5117.         dec     edi
  5118.         cmp     edi, edx
  5119.         jae     @b
  5120.         pop     edi
  5121.         jmp     .done_fail
  5122. @@:
  5123.         pop     edi
  5124.         jmp     .done_succ
  5125.  
  5126. find_extension:
  5127.         lea     esi, [ecx+40]
  5128.         push    esi
  5129. @@:
  5130.         lodsb
  5131.         test    al, al
  5132.         jnz     @b
  5133. @@:
  5134.         dec     esi
  5135.         cmp     byte [esi], '.'
  5136.         jz      .found_ext
  5137.         cmp     esi, [esp]
  5138.         ja      @b
  5139. ; empty extension
  5140.         pop     esi
  5141.         stc
  5142.         ret
  5143. .found_ext:
  5144.         inc     esi
  5145.         mov     edi, [associations]
  5146. .find_loop:
  5147.         push    esi edi
  5148.         call    strcmpi
  5149.         pop     edi esi
  5150.         pushf
  5151. @@:
  5152.         inc     edi
  5153.         cmp     byte [edi-1], 0
  5154.         jnz     @b
  5155.         popf
  5156.         jz      .found
  5157. @@:
  5158.         inc     edi
  5159.         cmp     byte [edi-1], 0
  5160.         jnz     @b
  5161.         cmp     byte [edi], 0
  5162.         jnz     .find_loop
  5163. ; unknown extension
  5164.         stc
  5165. .found:
  5166.         pop     esi
  5167.         ret
  5168.  
  5169. title  db      'Kolibri Far 0.32',0
  5170.  
  5171. nomem_draw      db      'No memory for redraw.',0
  5172. .size = $ - nomem_draw
  5173.  
  5174. def_left_dir    db      '/rd/1',0
  5175. def_right_dir   db      '/hd0/1',0
  5176.  
  5177. bSilentFolderMode db    1
  5178.  
  5179. if lang eq ru
  5180. aFolder         db      ' ¯ª '
  5181. .size = $-aFolder
  5182. aUp             db      '‚¢¥àå'
  5183. .size = $-aUp
  5184. aDrive          db      '„¨áª',0
  5185. aScreens        db      'ªà ­ë',0
  5186. else
  5187. aFolder         db      'Folder'
  5188. .size = $-aFolder
  5189. aUp             db      'Up'
  5190. .size = $-aUp
  5191. aDrive          db      'Drive',0
  5192. aScreens        db      'Screens',0
  5193. end if
  5194.  
  5195. align 4
  5196. _10d dd 10
  5197. _100d dd 100
  5198. muldiv10 dd 429496729
  5199. _10 db 10
  5200. _100 db 100
  5201.  
  5202. fpu_cw  dw      000011100111111b
  5203.  
  5204. keybar_panels:
  5205. if lang eq ru
  5206. ; ¡¥§ ª« ¢¨è-¬®¤¨ä¨ª â®à®¢
  5207.         db      '®¬®éì'
  5208.         db      '®«ì§Œ'
  5209.         db      'à®á¬ '
  5210.         db      '¥¤ ªâ'
  5211.         db      'Š®¯¨à '
  5212.         db      '¥à¥­ '
  5213.         db      ' ¯ª  '
  5214.         db      '“¤ «¥­'
  5215.         db      'Š®­äŒ­'
  5216.         db      '‚ë室 '
  5217.         db      'Œ®¤ã«¨'
  5218.         db      'ªà ­ë'
  5219. ; Shift
  5220.         db      '„®¡ ¢«'
  5221.         db      ' á¯ ª'
  5222.         db      '€à劮¬'
  5223.         db      '¥¤ ª.'
  5224.         db      'Š®¯¨à '
  5225.         db      '¥à¥¨¬'
  5226.         db      '      '
  5227.         db      '“¤ «¥­'
  5228.         db      '‘®åà ­'
  5229.         db      '®á«¤­'
  5230.         db      'ƒà㯯ë'
  5231.         db      '‚ë¡à ­'
  5232. ; Ctrl
  5233.         db      '‹¥¢ ï '
  5234.         db      'à ¢ ï'
  5235.         db      'ˆ¬ï   '
  5236.         db      ' áè¨à'
  5237.         db      'Œ®¤¨ä '
  5238.         db      ' §¬¥à'
  5239.         db      '¥á®àâ'
  5240.         db      '‘®§¤ ­'
  5241.         db      '„®áâã¯'
  5242.         db      'Ž¯¨á ­'
  5243.         db      '‚« ¤¥«'
  5244.         db      '‘®àâ  '
  5245. ; Ctrl+Shift
  5246.         db      '      '
  5247.         db      '      '
  5248.         db      'à®á¬ '
  5249.         db      '¥¤ ªâ'
  5250.         db      '      '
  5251.         db      '      '
  5252.         db      '      '
  5253.         db      '      '
  5254.         db      '      '
  5255.         db      '      '
  5256.         db      '      '
  5257.         db      '      '
  5258. ; Alt
  5259.         db      '‹¥¢ ï '
  5260.         db      'à ¢ ï'
  5261.         db      '‘¬®âà.'
  5262.         db      '¥¤ ª.'
  5263.         db      '¥ç âì'
  5264.         db      '‘¢ï§ì '
  5265.         db      'ˆáª âì'
  5266.         db      'ˆáâ®à '
  5267.         db      '‚¨¤¥® '
  5268.         db      '„¥à¥¢®'
  5269.         db      'ˆáâà '
  5270.         db      'ˆá⏠¯'
  5271. ; Alt+Shift
  5272.         db      '      '
  5273.         db      '      '
  5274.         db      '      '
  5275.         db      '      '
  5276.         db      '      '
  5277.         db      '      '
  5278.         db      '      '
  5279.         db      '      '
  5280.         db      'Š®­ä«'
  5281.         db      '      '
  5282.         db      '      '
  5283.         db      '      '
  5284. ; Alt+Ctrl
  5285. times 12 db     '      '
  5286. ; Alt+Ctrl+Shift
  5287. times 12 db     '      '
  5288. else
  5289. ; No modificators
  5290.         db      'Help  '
  5291.         db      'UserMn'
  5292.         db      'View  '
  5293.         db      'Edit  '
  5294.         db      'Copy  '
  5295.         db      'RenMov'
  5296.         db      'MkFold'
  5297.         db      'Delete'
  5298.         db      'ConfMn'
  5299.         db      'Quit  '
  5300.         db      'Plugin'
  5301.         db      'Screen'
  5302. ; Shift
  5303.         db      'Add   '
  5304.         db      'Extrct'
  5305.         db      'ArcCmd'
  5306.         db      'Edit..'
  5307.         db      'Copy  '
  5308.         db      'Rename'
  5309.         db      '      '
  5310.         db      'Delete'
  5311.         db      'Save  '
  5312.         db      'Last  '
  5313.         db      'Group '
  5314.         db      'SelUp '
  5315. ; Ctrl
  5316.         db      'Left  '
  5317.         db      'Right '
  5318.         db      'Name  '
  5319.         db      'Extens'
  5320.         db      'Modifn'
  5321.         db      'Size  '
  5322.         db      'Unsort'
  5323.         db      'Creatn'
  5324.         db      'Access'
  5325.         db      'Descr '
  5326.         db      'Owner '
  5327.         db      'Sort  '
  5328. ; Ctrl+Shift
  5329.         db      '      '
  5330.         db      '      '
  5331.         db      'View  '
  5332.         db      'Edit  '
  5333.         db      '      '
  5334.         db      '      '
  5335.         db      '      '
  5336.         db      '      '
  5337.         db      '      '
  5338.         db      '      '
  5339.         db      '      '
  5340.         db      '      '
  5341. ; Alt
  5342.         db      'Left  '
  5343.         db      'Right '
  5344.         db      'View..'
  5345.         db      'Edit..'
  5346.         db      'Print '
  5347.         db      'MkLink'
  5348.         db      'Find  '
  5349.         db      'Histry'
  5350.         db      'Video '
  5351.         db      'Tree  '
  5352.         db      'ViewHs'
  5353.         db      'FoldHs'
  5354. ; Alt+Shift
  5355.         db      '      '
  5356.         db      '      '
  5357.         db      '      '
  5358.         db      '      '
  5359.         db      '      '
  5360.         db      '      '
  5361.         db      '      '
  5362.         db      '      '
  5363.         db      'ConfPl'
  5364.         db      '      '
  5365.         db      '      '
  5366.         db      '      '
  5367. ; Alt+Ctrl
  5368. times 12 db     '      '
  5369. ; Alt+Ctrl+Shift
  5370. times 12 db     '      '
  5371. end if
  5372.  
  5373. keybar_viewer:
  5374. if lang eq ru
  5375. ; ¡¥§ ª« ¢¨è-¬®¤¨ä¨ª â®à®¢
  5376.         db      '®¬®éì'
  5377.         db      ' §¢¥à'
  5378.         db      '‚ë室 '
  5379.         db      'Š®¤   '
  5380.         db      '      '
  5381.         db      '¥¤ ªâ'
  5382.         db      '®¨áª '
  5383. keybar_cp:
  5384.         db      'cp1251'
  5385.         db      '      '
  5386.         db      '‚ë室 '
  5387.         db      'Œ®¤ã«¨'
  5388.         db      'ªà ­ë'
  5389. ; Shift
  5390.         db      '      '
  5391.         db      '‘«®¢  '
  5392.         db      '      '
  5393.         db      '      '
  5394.         db      '      '
  5395.         db      '      '
  5396.         db      '„ «ìè¥'
  5397.         db      '’ ¡«¨æ'
  5398.         db      '      '
  5399.         db      '      '
  5400.         db      '      '
  5401.         db      '      '
  5402. ; Ctrl
  5403.         db      '      '
  5404.         db      '      '
  5405.         db      '      '
  5406.         db      '      '
  5407.         db      '      '
  5408.         db      '      '
  5409.         db      '      '
  5410.         db      '      '
  5411.         db      '      '
  5412.         db      '®§¨æ '
  5413.         db      '      '
  5414.         db      '      '
  5415. ; Ctrl+Shift
  5416.         db      '      '
  5417.         db      '      '
  5418.         db      '      '
  5419.         db      '      '
  5420.         db      '      '
  5421.         db      '      '
  5422.         db      '      '
  5423.         db      '      '
  5424.         db      '      '
  5425.         db      '      '
  5426.         db      '      '
  5427.         db      '      '
  5428. ; Alt
  5429.         db      '      '
  5430.         db      '      '
  5431.         db      '      '
  5432.         db      '      '
  5433.         db      '¥ç âì'
  5434.         db      '      '
  5435.         db      ' § ¤ '
  5436.         db      '¥à¥©â'
  5437.         db      '‚¨¤¥® '
  5438.         db      '      '
  5439.         db      'ˆáâà '
  5440.         db      '      '
  5441. ; Alt+Shift
  5442.         db      '      '
  5443.         db      '      '
  5444.         db      '      '
  5445.         db      '      '
  5446.         db      '      '
  5447.         db      '      '
  5448.         db      '      '
  5449.         db      '      '
  5450.         db      'Š®­ä¨£'
  5451.         db      '      '
  5452.         db      '      '
  5453.         db      '      '
  5454. ; Alt+Ctrl
  5455. times 12 db     '      '
  5456. ; Alt+Ctrl+Shift
  5457. times 12 db     '      '
  5458. else
  5459. ; No modificators
  5460.         db      'Help  '
  5461.         db      'Unwrap'
  5462.         db      'Quit  '
  5463.         db      'Hex   '
  5464.         db      '      '
  5465.         db      'Edit  '
  5466.         db      'Search'
  5467. keybar_cp:
  5468.         db      'cp1251'
  5469.         db      '      '
  5470.         db      'Quit  '
  5471.         db      'Plugin'
  5472.         db      'Screen'
  5473. ; Shift
  5474.         db      '      '
  5475.         db      'WWrap '
  5476.         db      '      '
  5477.         db      '      '
  5478.         db      '      '
  5479.         db      '      '
  5480.         db      'Next  '
  5481.         db      'Table '
  5482.         db      '      '
  5483.         db      '      '
  5484.         db      '      '
  5485.         db      '      '
  5486. ; Ctrl
  5487.         db      '      '
  5488.         db      '      '
  5489.         db      '      '
  5490.         db      '      '
  5491.         db      '      '
  5492.         db      '      '
  5493.         db      '      '
  5494.         db      '      '
  5495.         db      '      '
  5496.         db      'GoFile'
  5497.         db      '      '
  5498.         db      '      '
  5499. ; Ctrl+Shift
  5500.         db      '      '
  5501.         db      '      '
  5502.         db      '      '
  5503.         db      '      '
  5504.         db      '      '
  5505.         db      '      '
  5506.         db      '      '
  5507.         db      '      '
  5508.         db      '      '
  5509.         db      '      '
  5510.         db      '      '
  5511.         db      '      '
  5512. ; Alt
  5513.         db      '      '
  5514.         db      '      '
  5515.         db      '      '
  5516.         db      '      '
  5517.         db      'Print '
  5518.         db      '      '
  5519.         db      'Prev  '
  5520.         db      'Goto  '
  5521.         db      'Video '
  5522.         db      '      '
  5523.         db      'ViewHs'
  5524.         db      '      '
  5525. ; Alt+Shift
  5526.         db      '      '
  5527.         db      '      '
  5528.         db      '      '
  5529.         db      '      '
  5530.         db      '      '
  5531.         db      '      '
  5532.         db      '      '
  5533.         db      '      '
  5534.         db      'Config'
  5535.         db      '      '
  5536.         db      '      '
  5537.         db      '      '
  5538. ; Alt+Ctrl
  5539. times 12 db     '      '
  5540. ; Alt+Ctrl+Shift
  5541. times 12 db     '      '
  5542. end if
  5543.  
  5544.         align   4
  5545. cur_width       dd      80
  5546. cur_height      dd      25
  5547. saved_width     dd      -1
  5548. saved_height    dd      -1
  5549. fill_width      dd      0
  5550. fill_height     dd      0
  5551. max_width = 256
  5552. max_height = 256
  5553. console_data_ptr dd     0
  5554.  
  5555. cursor_x        dd      -1
  5556. cursor_y        dd      -1
  5557. cur_cursor_pos  dd      -1
  5558. old_cursor_pos  dd      -1
  5559.  
  5560. active_panel    dd      panel1_data
  5561.  
  5562. associations    dd      0
  5563.  
  5564. console_colors  dd      0x000000, 0x000080, 0x008000, 0x008080
  5565.                 dd      0x800000, 0x800080, 0x808000, 0xC0C0C0
  5566.                 dd      0x808080, 0x0000FF, 0x00FF00, 0x00FFFF
  5567.                 dd      0xFF0000, 0xFF00FF, 0xFFFF00, 0xFFFFFF
  5568.  
  5569. compare_fns     dd      compare_name
  5570.                 dd      compare_name_rev
  5571.                 dd      compare_ext
  5572.                 dd      compare_ext_rev
  5573.                 dd      compare_modified
  5574.                 dd      compare_modified_rev
  5575.                 dd      compare_size
  5576.                 dd      compare_size_rev
  5577.                 dd      compare_unordered
  5578.                 dd      compare_unordered_rev
  5579.                 dd      compare_created
  5580.                 dd      compare_created_rev
  5581.                 dd      compare_accessed
  5582.                 dd      compare_accessed_rev
  5583.  
  5584. ctrlkey_tests   dd      ctrlkey_test0
  5585.                 dd      ctrlkey_test1
  5586.                 dd      ctrlkey_test2
  5587.                 dd      ctrlkey_test3
  5588.                 dd      ctrlkey_test4
  5589. ctrlkey_tests_num = 5
  5590.  
  5591. virtual at 0
  5592. screen_vtable:
  5593.         .OnRedraw       dd      ?
  5594.         .OnKey          dd      ?
  5595.         .keybar         dd      ?
  5596.         .getname        dd      ?
  5597. end virtual
  5598.  
  5599. panels_vtable:
  5600.         dd      panels_OnRedraw
  5601.         dd      panels_OnKey
  5602.         dd      keybar_panels
  5603.         dd      panels_getname
  5604.  
  5605. viewer_vtable:
  5606.         dd      viewer_OnRedraw
  5607.         dd      viewer_OnKey
  5608.         dd      keybar_viewer
  5609.         dd      viewer_getname
  5610.  
  5611. ; additions to this table require changes in tools.inc::get_error_msg
  5612. errors1:
  5613.         dd      error0msg
  5614.         dd      error1msg
  5615.         dd      error2msg
  5616.         dd      error3msg
  5617.         dd      error4msg
  5618.         dd      error5msg
  5619.         dd      error6msg
  5620.         dd      error7msg
  5621.         dd      error8msg
  5622.         dd      error9msg
  5623.         dd      error10msg
  5624.         dd      error11msg
  5625. errors2:
  5626.         dd      error30msg
  5627.         dd      error31msg
  5628.         dd      error32msg
  5629.  
  5630. encodings:
  5631. .cp866 = 0
  5632. .cp1251 = 1
  5633. .koi8r = 2
  5634. .unicode = 3
  5635.  
  5636. .names:
  5637.         db      'cp866   '
  5638.         db      'cp1251  '
  5639.         db      'koi8-r  '
  5640.         db      'Unicode '
  5641.  
  5642. .tables:
  5643. ; cp866 - trivial map
  5644.         times 128 db %+127
  5645. ; cp1251
  5646.         db      0x3F,0x3F,0x27,0x3F,0x22,0x3A,0xC5,0xD8,0x3F,0x25,0x3F,0x3C,0x3F,0x3F,0x3F,0x3F
  5647.         db      0x3F,0x27,0x27,0x22,0x22,0x07,0x2D,0x2D,0x3F,0x54,0x3F,0x3E,0x3F,0x3F,0x3F,0x3F
  5648.         db      0xFF,0xF6,0xF7,0x3F,0xFD,0x3F,0xB3,0x15,0xF0,0x63,0xF2,0x3C,0xBF,0x2D,0x52,0xF4
  5649.         db      0xF8,0x2B,0x49,0x69,0x3F,0xE7,0x14,0xFA,0xF1,0xFC,0xF3,0x3E,0x3F,0x3F,0x3F,0xF5
  5650.         times 0x30 db %-1+0x80
  5651.         times 0x10 db %-1+0xE0
  5652. ; koi8-r
  5653.         db      0xC4,0xB3,0xDA,0xBF,0xC0,0xD9,0xC3,0xB4,0xC2,0xC1,0xC5,0xDF,0xDC,0xDB,0xDD,0xDE
  5654.         db      0xB0,0xB1,0xB2,0xF4,0xFE,0xF9,0xFB,0xF7,0xF3,0xF2,0xFF,0xF5,0xF8,0xFD,0xFA,0xF6
  5655.         db      0xCD,0xBA,0xD5,0xF1,0xD6,0xC9,0xB8,0xB7,0xBB,0xD4,0xD3,0xC8,0xBE,0xBD,0xBC,0xC6
  5656.         db      0xC7,0xCC,0xB5,0xF0,0xB6,0xB9,0xD1,0xD2,0xCB,0xCF,0xD0,0xCA,0xD8,0xD7,0xCE,0xFC
  5657.         db      0xEE,0xA0,0xA1,0xE6,0xA4,0xA5,0xE4,0xA3,0xE5,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE
  5658.         db      0xAF,0xEF,0xE0,0xE1,0xE2,0xE3,0xA6,0xA2,0xEC,0xEB,0xA7,0xE8,0xED,0xE9,0xE7,0xEA
  5659.         db      0x9E,0x80,0x81,0x96,0x84,0x85,0x94,0x83,0x95,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E
  5660.         db      0x8F,0x9F,0x90,0x91,0x92,0x93,0x86,0x82,0x9C,0x9B,0x87,0x98,0x9D,0x99,0x97,0x9A
  5661.  
  5662. .menu:
  5663.         db      .cp866
  5664. .menu.1:
  5665.         dd      .menu.2
  5666.         dd      0
  5667. if lang eq ru
  5668.         db      '&DOS ⥪áâ (cp866)',0
  5669. else
  5670.         db      '&DOS text (cp866)',0
  5671. end if
  5672.         db      .cp1251
  5673. .menu.2:
  5674.         dd      .menu.3
  5675.         dd      .menu.1
  5676. if lang eq ru
  5677.         db      '&Windows ⥪áâ (cp1251)',0
  5678. else
  5679.         db      '&Windows text (cp1251)',0
  5680. end if
  5681.         db      .koi8r
  5682. .menu.3:
  5683.         dd      .menu.4
  5684.         dd      .menu.2
  5685. if lang eq ru
  5686.         db      '&Linux ⥪áâ (koi8-r)',0
  5687. else
  5688.         db      '&Linux text (koi8-r)',0
  5689. end if
  5690.         db      .unicode
  5691. .menu.4:
  5692.         dd      0
  5693.         dd      .menu.3
  5694.         db      '&Unicode',0
  5695.  
  5696. active_screen   dd      0
  5697. tabsize         dd      8
  5698.  
  5699. ascii2scan:
  5700.         times 32 db 0
  5701.         db      0x39,0x02,0x03,0x04,0x05,0x06,0x08,0x28,0x0A,0x0B,0x09,0x0D,0x33,0x0C,0x34,0x35
  5702.         db      0x0B,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x27,0x27,0x33,0x0D,0x34,0x35
  5703.         db      0x03,0x1E,0x30,0x2E,0x20,0x12,0x21,0x22,0x23,0x17,0x24,0x25,0x26,0x32,0x31,0x18
  5704.         db      0x19,0x10,0x13,0x1F,0x14,0x16,0x2F,0x11,0x2D,0x15,0x2C,0x1A,0x2B,0x1B,0x07,0x0C
  5705.         db      0x29,0x1E,0x30,0x2E,0x20,0x12,0x21,0x22,0x23,0x17,0x24,0x25,0x26,0x32,0x31,0x18
  5706.         db      0x19,0x10,0x13,0x1F,0x14,0x16,0x2F,0x11,0x2D,0x15,0x2C,0x1A,0x2B,0x1B,0x29,0x00
  5707.         db      0x21,0x33,0x20,0x16,0x26,0x14,0x27,0x19,0x30,0x10,0x13,0x25,0x2F,0x15,0x24,0x22
  5708.         db      0x23,0x2E,0x31,0x12,0x1E,0x1A,0x11,0x2D,0x17,0x18,0x1B,0x1F,0x32,0x28,0x34,0x2C
  5709.         db      0x21,0x33,0x20,0x16,0x26,0x14,0x27,0x19,0x30,0x10,0x13,0x25,0x2F,0x15,0x24,0x22
  5710.         times 48 db 0
  5711.         db      0x23,0x2E,0x31,0x12,0x1E,0x1A,0x11,0x2D,0x17,0x18,0x1B,0x1F,0x32,0x28,0x34,0x2C
  5712.         db      0x29,0x29,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
  5713.  
  5714. ; Š« ¢¨è­ë¥ á®ç¥â ­¨ï
  5715. ; db scancode, reserved
  5716. ; dw ctrlstate
  5717. ; dd handler
  5718. ; ctrlstate: ¬« ¤è¨¥ 4 ¡¨â  - ¤«ï Shift, á«¥¤ãî騥 - ¤«ï Ctrl, á«¥¤ãî騥 - ¤«ï Alt
  5719. ; 0 = ­¨ ®¤­  ª« ¢¨è  ­¥ ­ ¦ â 
  5720. ; 1 = ஢­® ®¤­  ­ ¦ â 
  5721. ; 2 = ®¡¥ ­ ¦ âë
  5722. ; 3 = «¥¢ ï ­ ¦ â , ¯à ¢ ï ­¥â
  5723. ; 4 = ¯à ¢ ï ­ ¦ â , «¥¢ ï ­¥â
  5724. panels_ctrlkeys:
  5725.         dw      0x48, 0
  5726.         dd      panels_OnKey.up
  5727.         dw      0x50, 0
  5728.         dd      panels_OnKey.down
  5729.         dw      0x4B, 0
  5730.         dd      panels_OnKey.left
  5731.         dw      0x4D, 0
  5732.         dd      panels_OnKey.right
  5733.         dw      0x51, 0
  5734.         dd      panels_OnKey.pgdn
  5735.         dw      0x49, 0
  5736.         dd      panels_OnKey.pgup
  5737.         dw      0xF, 0
  5738.         dd      panels_OnKey.tab
  5739.         dw      0x47, 0
  5740.         dd      panels_OnKey.home
  5741.         dw      0x4F, 0
  5742.         dd      panels_OnKey.end
  5743.         dw      0x1C, 0
  5744.         dd      panels_OnKey.enter
  5745.         dw      0x3D, 0
  5746.         dd      panels_OnKey.f3
  5747.         dw      0x3F, 0
  5748.         dd      panels_OnKey.f5
  5749.         dw      0x3F, 1
  5750.         dd      panels_OnKey.shift_f5
  5751.         dw      0x41, 0
  5752.         dd      panels_OnKey.f7
  5753.         dw      0x42, 0
  5754.         dd      panels_OnKey.f8
  5755.         dw      0x43, 0x100
  5756.         dd      alt_f9
  5757.         dw      0x44, 0
  5758.         dd      exit
  5759.         dw      0x5D, 0
  5760.         dd      panels_OnKey.menu
  5761. repeat 9-3+1
  5762.         dw      0x3D+%-1, 0x10
  5763.         dd      panels_OnKey.ctrl_f39
  5764. end repeat
  5765.         dw      0x3B, 0x100
  5766.         dd      panels_OnKey.alt_f12
  5767.         dw      0x3C, 0x100
  5768.         dd      panels_OnKey.alt_f12
  5769.         dw      0x58, 0
  5770.         dd      F12
  5771.         dw      0x13, 0x10
  5772.         dd      panels_OnKey.ctrl_r
  5773.         dw      2, 0x30
  5774.         dd      panels_OnKey.change_mode
  5775.         dw      3, 0x30
  5776.         dd      panels_OnKey.change_mode
  5777.         dw      4, 0x30
  5778.         dd      panels_OnKey.change_mode
  5779.         dw      5, 0x30
  5780.         dd      panels_OnKey.change_mode
  5781. repeat 10
  5782.         dw      %+1, 0x40
  5783.         dd      panels_OnKey.quick_jump
  5784. end repeat
  5785.         dw      0x52, 0
  5786.         dd      panels_OnKey.insert
  5787.         dw      0x4E, 0
  5788.         dd      panels_OnKey.greyplus
  5789.         dw      0x4A, 0
  5790.         dd      panels_OnKey.greyminus
  5791.         db      0
  5792.  
  5793. viewer_ctrlkeys:
  5794.         dw      1, 0
  5795.         dd      viewer_OnKey.exit
  5796.         dw      0x51, 0
  5797.         dd      viewer_OnKey.pgdn
  5798.         dw      0x49, 0
  5799.         dd      viewer_OnKey.pgup
  5800.         dw      0x50, 0
  5801.         dd      viewer_OnKey.down
  5802.         dw      0x48, 0
  5803.         dd      viewer_OnKey.up
  5804.         dw      0x4B, 0
  5805.         dd      viewer_OnKey.left
  5806.         dw      0x4B, 0x10
  5807.         dd      viewer_OnKey.ctrl_left
  5808.         dw      0x4B, 0x11
  5809.         dd      viewer_OnKey.ctrl_shift_left
  5810.         dw      0x4C, 0
  5811.         dd      viewer_OnKey.exit
  5812.         dw      0x4D, 0
  5813.         dd      viewer_OnKey.right
  5814.         dw      0x4D, 0x10
  5815.         dd      viewer_OnKey.ctrl_right
  5816.         dw      0x4D, 0x11
  5817.         dd      viewer_OnKey.ctrl_shift_right
  5818.         dw      0x3C, 0
  5819.         dd      viewer_OnKey.f2
  5820.         dw      0x3D, 0
  5821.         dd      viewer_OnKey.exit
  5822.         dw      0x3E, 0
  5823.         dd      viewer_OnKey.f4
  5824.         dw      0x42, 0
  5825.         dd      viewer_OnKey.f8
  5826.         dw      0x42, 1
  5827.         dd      viewer_OnKey.shift_f8
  5828.         dw      0x44, 0
  5829.         dd      viewer_OnKey.exit
  5830.         dw      0x47, 0
  5831.         dd      viewer_OnKey.home
  5832.         dw      0x4F, 0
  5833.         dd      viewer_OnKey.end
  5834.         dw      0x58, 0
  5835.         dd      F12
  5836.         dw      0x43, 0x100
  5837.         dd      alt_f9
  5838.         db      0
  5839.  
  5840. dirinfo:
  5841.                 dd      1
  5842. .first          dd      0
  5843.                 dd      0
  5844. .size           dd      300
  5845. .dirdata        dd      0
  5846.                 db      0
  5847. .name           dd      0
  5848.  
  5849. readinfo:
  5850.                 dd      0
  5851. .first          dq      0
  5852. .size           dd      0
  5853. .data           dd      0
  5854.                 db      0
  5855. .name           dd      0
  5856.  
  5857. writeinfo:
  5858. .code           dd      2
  5859. .first          dq      0
  5860. .size           dd      0
  5861. .data           dd      0
  5862.                 db      0
  5863. .name           dd      0
  5864.  
  5865. attrinfo:
  5866.                 dd      5
  5867.                 dd      0
  5868.                 dd      0
  5869.                 dd      0
  5870.                 dd      .attr
  5871.                 db      0
  5872. .name           dd      0
  5873.  
  5874. delinfo:
  5875.                 dd      8
  5876.                 dd      0
  5877.                 dd      0
  5878.                 dd      0
  5879.                 dd      0
  5880.                 db      0
  5881.                 dd      execdata
  5882.  
  5883. mkdirinfo:
  5884.                 dd      9
  5885.                 dd      0
  5886.                 dd      0
  5887.                 dd      0
  5888.                 dd      0
  5889.                 db      0
  5890.                 dd      CopyDestEditBuf+12
  5891.  
  5892. if lang eq ru
  5893. compare_names   db      '¨ˆà¬Œ €­á‘¤„'
  5894. else
  5895. compare_names   db      'nNxXmMsSuUcCaA'
  5896. end if
  5897.  
  5898. ; ‡¤¥áì ­ ç¨­ îâáï ª®­ä¨£ãà æ¨®­­ë¥ ¤ ­­ë¥ - ¢ ⥪ã饩 ॠ«¨§ æ¨¨ ®­¨ § è¨âë ¢ ¡¨­ à­¨ª
  5899.  
  5900. ;  ­¥«ì
  5901. panel_normal_color      db      1Bh
  5902. panel_selected_color    db      1Eh
  5903. panel_border_color      db      1Bh
  5904. panel_cursor_color      db      30h
  5905. panel_selected_cursor_color db  3Eh
  5906. panel_header_color      db      1Bh
  5907. panel_active_header_color db    30h
  5908. column_header_color     db      1Eh
  5909. panel_number_color      db      1Bh
  5910. panel_numselected_color db      3Eh
  5911. panel_nscreens_color    db      0Bh
  5912. ; „¨ «®£¨
  5913. dialog_colors:
  5914. dialog_main_color       db      70h
  5915. dialog_border_color     db      70h
  5916. dialog_header_color     db      70h
  5917. dialog_edit_color       db      30h
  5918. dialog_unmodified_edit_color db 38h
  5919. dialog_normal_btn_color db      70h
  5920. dialog_selected_btn_color db    30h
  5921. ; à¥¤ã¯à¥¦¤¥­¨ï ¨ ®è¨¡ª¨
  5922. warning_colors:
  5923. ; !!! ¤®«¦­ë ¡ëâì ⥠¦¥ ¯®«ï ¨ ¢ ⮬ ¦¥ ¯®à浪¥, çâ® ¨ ¤«ï ®¡ëç­ëå ¤¨ «®£®¢ !!!
  5924. warning_main_color      db      4Fh
  5925. warning_border_color    db      4Fh
  5926. warning_header_color    db      4Fh
  5927. warning_edit_color      db      30h
  5928. warning_unmodified_edit_color db 38h
  5929. warning_normal_btn_color db     4Fh
  5930. warning_selected_btn_color db   70h
  5931. ; Œ¥­î
  5932. menu_normal_color       db      3Fh
  5933. menu_selected_color     db      0Fh
  5934. menu_highlight_color    db      3Eh
  5935. menu_selected_highlight_color db 0Eh
  5936. menu_border_color       db      3Fh
  5937. menu_header_color       db      3Fh
  5938. menu_scrollbar_color    db      3Fh
  5939. ; ‹¨­¥©ª  ª« ¢¨è
  5940. keybar_number_color     db      7
  5941. keybar_name_color       db      30h
  5942. keybar_bgr_color        db      7
  5943. ; Š®¬ ­¤­ ï áâப 
  5944. cmdbar_normal_color     db      7
  5945. cmdbar_prefix_color     db      7
  5946. ; à®á¬®âà騪
  5947. view_normal_color       db      1Bh
  5948. view_status_color       db      30h
  5949. view_arrows_color       db      1Eh
  5950.  
  5951. ; ®¤á¢¥âª  ä ©«®¢
  5952. highlight_num_groups    dd      10
  5953. highlight_groups        dd      highlight_group0
  5954.                 dd      highlight_group1
  5955.                 dd      highlight_group2
  5956.                 dd      highlight_group3
  5957.                 dd      highlight_group4
  5958.                 dd      highlight_group5
  5959.                 dd      highlight_group6
  5960.                 dd      highlight_group7
  5961.                 dd      highlight_group8
  5962.                 dd      highlight_group9
  5963.  
  5964. ; ”®à¬ â ®¯¨á ­¨ï £àã¯¯ë ¯®¤á¢¥âª¨:
  5965. virtual at 0
  5966. highlight:
  5967.         .IncludeAttributes      db ?
  5968.         .NormalColor            db ?
  5969.         .CursorColor            db ?
  5970.         .SelectedColor          db ?
  5971.         .SelectedCursorColor    db ?
  5972.         .Mask:                  ; ASCIIZ-string
  5973. end virtual
  5974.  
  5975. ; all highlight masks must be in lowercase!
  5976. highlight_group0:
  5977.         db      2
  5978.         db      13h, 38h, 0, 0
  5979.         db      '*',0
  5980. highlight_group1:
  5981.         db      4
  5982.         db      13h, 38h, 0, 0
  5983.         db      '*',0
  5984. highlight_group2:
  5985.         db      10h
  5986.         db      1Fh, 3Fh, 0, 0
  5987.         db      '*|..',0
  5988. highlight_group3:
  5989.         db      10h
  5990.         db      0, 0, 0, 0
  5991.         db      '..',0
  5992. highlight_group4:
  5993.         db      0
  5994.         db      1Ah, 3Ah, 0, 0
  5995.         db      '*.exe,*.com,*.bat,*.cmd',0
  5996. highlight_group5:
  5997.         db      0
  5998.         db      1Ah, 3Ah, 0, 0
  5999.         db      '*|*.*',0
  6000. highlight_group6:
  6001.         db      0
  6002.         db      1Dh, 3Dh, 0, 0
  6003.         db      '*.rar,*.zip,*.[zj],*.[bg7]z,*.[bg]zip,*.tar,*.t[ag]z,*.ar[cj],*.r[0-9][0-9],'
  6004.         db      '*.a[0-9][0-9],*.bz2,*.cab,*.msi,*.jar,*.lha,*.lzh,*.ha,*.ac[bei],*.pa[ck],'
  6005.         db      '*.rk,*.cpio,*.rpm,*.zoo,*.hqx,*.sit,*.ice,*.uc2,*.ain,*.imp,*.777,*.ufa,*.boa,'
  6006.         db      '*.bs[2a],*.sea,*.hpk,*.ddi,*.x2,*.rkv,*.[lw]sz,*.h[ay]p,*.lim,*.sqz,*.chz',0
  6007. highlight_group7:
  6008.         db      0
  6009.         db      16h, 36h, 0, 0
  6010.         db      '*.bak,*.tmp',0
  6011. highlight_group8:
  6012.         db      0
  6013.         db      17h, 37h, 0, 0
  6014.         db      '*.asm,*.inc',0
  6015. highlight_group9:
  6016.         db      10h
  6017.         db      1Fh, 3Fh, 0, 0
  6018.         db      '*',0
  6019.  
  6020. bConfirmDelete  db      1
  6021. bConfirmDeleteIncomplete db 0
  6022.  
  6023. FolderShortcuts dd      0,0,0,0,0,0,0,0,0,0
  6024.  
  6025. ; ‡¤¥áì § ª ­ç¨¢ îâáï ª®­ä¨£ãà æ¨®­­ë¥ ¤ ­­ë¥
  6026.  
  6027. bWasE0          db      0
  6028. ctrlstate       db      0
  6029. MemForImage     dd      0
  6030. restore_semicolon dd    0
  6031. bForHex         db      0
  6032.  
  6033. align   4
  6034. ; ‘®®¡é¥­¨¥ ® ®¡«®¬¥ ¯à¨ ¢ë¤¥«¥­¨¨ ¯ ¬ïâ¨
  6035. nomem_dlgdata:
  6036.         dd      2
  6037.         dd      -1
  6038.         dd      -1
  6039.         dd      12
  6040.         dd      2
  6041.         dd      1
  6042.         dd      1
  6043.         dd      aError
  6044.         rb      4
  6045.         dd      0
  6046.         dd      0
  6047.         dd      2
  6048. ; áâப  "No memory"
  6049.         dd      1
  6050.         dd      1,0,10,0
  6051.         dd      aNoMemory
  6052.         dd      1
  6053. ; ª­®¯ª  "Ok"
  6054.         dd      2
  6055.         dd      4,1,7,1
  6056.         dd      aOk
  6057.         dd      0xD
  6058.  
  6059. ; ¤¨ «®£ ª®¯¨à®¢ ­¨ï
  6060. copy_dlgdata:
  6061.         dd      1
  6062. .x      dd      -1
  6063. .y      dd      -1
  6064. .width  dd      ?
  6065. .height dd      4
  6066.         dd      4
  6067.         dd      2
  6068.         dd      aCopyCaption
  6069. .main_color db ?
  6070. .border_color db ?
  6071. .header_color db ?
  6072.         db      0
  6073.         dd      0
  6074.         dd      0
  6075.         dd      4
  6076. ; áâப  'Š®¯¨à®¢ âì "%s" ¢:'
  6077.         dd      1
  6078.         dd      1,0
  6079. .width2 dd      ?
  6080.         dd      0
  6081.         dd      CopySourceTextBuf
  6082.         dd      0
  6083. ; ¯®«¥ । ªâ¨à®¢ ­¨ï á ¨¬¥­¥¬ ä ©« /¯ ¯ª¨ ­ §­ ç¥­¨ï
  6084.         dd      3
  6085.         dd      1,1
  6086. .width3 dd      ?
  6087.         dd      1
  6088.         dd      CopyDestEditBuf
  6089. .flags0 dd      0
  6090. ; ª­®¯ª  "ª®¯¨à®¢ âì"
  6091. .copy_btn:
  6092.         dd      2
  6093. .copy_x1 dd     ?
  6094.         dd      3
  6095. .copy_x2 dd     ?
  6096.         dd      3
  6097.         dd      aCopy
  6098. .flags1 dd      18h
  6099. ; ª­®¯ª  "®â¬¥­¨âì"
  6100.         dd      2
  6101. .cnl_x1 dd      ?
  6102.         dd      3
  6103. .cnl_x2 dd      ?
  6104.         dd      3
  6105.         dd      aCancelB
  6106. .flags2 dd      8
  6107.  
  6108. mkdir_dlgdata:
  6109.         dd      1
  6110.         dd      -1, -1
  6111. .width  dd      ?
  6112. .height dd      4
  6113.         dd      4, 2
  6114.         dd      aMkDirCaption
  6115.         dd      ?
  6116.         dd      0
  6117.         dd      0
  6118.         dd      4
  6119. ; ‘âப  "‘®§¤ âì ¯ ¯ªã"
  6120.         dd      1
  6121.         dd      1,0,aMkDirLen,0
  6122.         dd      aMkDir
  6123.         dd      0
  6124. ; ¯®«¥ । ªâ¨à®¢ ­¨ï á ¨¬¥­¥¬ ᮧ¤ ¢ ¥¬®© ¯ ¯ª¨
  6125.         dd      3
  6126.         dd      1,1
  6127. .width2 dd      ?
  6128.         dd      1
  6129.         dd      CopyDestEditBuf
  6130. .flags0 dd      0xC
  6131. ; ª­®¯ª  "à®¤®«¦¨âì"
  6132. .cont_btn:
  6133.         dd      2
  6134. .cont_x1 dd     ?
  6135.         dd      3
  6136. .cont_x2 dd     ?
  6137.         dd      3
  6138.         dd      a_Continue
  6139. .flags1 dd      18h
  6140. ; ª­®¯ª  "®â¬¥­¨âì"
  6141.         dd      2
  6142. .cnl_x1 dd      ?
  6143.         dd      3
  6144. .cnl_x2 dd      ?
  6145.         dd      3
  6146.         dd      aCancelB
  6147. .flags2 dd      8
  6148.  
  6149. ; ¤¨ «®£ ¢ë¤¥«¥­¨ï/á­ïâ¨ï
  6150. mark_dlgdata:
  6151.         dd      1
  6152.         dd      -1, -1
  6153.         dd      37, 1
  6154.         dd      4, 2
  6155. .title  dd      ?
  6156.         dd      ?
  6157.         dd      0, 0
  6158.         dd      1
  6159. ; ¯®«¥ । ªâ¨à®¢ ­¨ï
  6160.         dd      3
  6161.         dd      1, 0, 35, 0
  6162.         dd      enter_string_buf
  6163. .flags  dd      ?
  6164.  
  6165. RetryOrCancelBtn:
  6166.         dd      aRetry
  6167.         dd      a_Cancel
  6168. DeleteOrKeepBtn:
  6169.         dd      a_Delete
  6170.         dd      aKeep
  6171. RetryOrIgnoreBtn:
  6172.         dd      aRetry
  6173.         dd      aIgnore
  6174. DeleteOrCancelBtn:
  6175.         dd      a_Delete
  6176.         dd      a_Cancel
  6177. DeleteErrorBtn:
  6178.         dd      aRetry
  6179.         dd      aSkip
  6180.         dd      aSkipAll
  6181.         dd      a_Cancel
  6182.  
  6183. if lang eq ru
  6184. aDeleteCaption          db      '“¤ «¥­¨¥',0
  6185. aConfirmDeleteText      db      '‚ë å®â¨â¥ 㤠«¨âì',0
  6186. aDeleteFolder           db      ' ¯ ¯ªã',0
  6187. aConfirmDeleteTextMax = $ - aConfirmDeleteText - 2
  6188. aDeleteFile             db      ' ä ©«',0
  6189. aCancelB                db      '[ Žâ¬¥­¨âì ]',0
  6190. aCancelBLength = $ - aCancelB - 1
  6191. aCopyCaption            db      'Š®¯¨à®¢ ­¨¥',0
  6192. aCopy                   db      '[ Š®¯¨à®¢ âì ]',0
  6193. aCopyLength = $ - aCopy - 1
  6194. a_Continue              db      '[ à®¤®«¦¨âì ]',0
  6195. a_ContinueLength = $ - a_Continue - 1
  6196. aCopy1                  db      'Š®¯¨à®¢ âì "',0
  6197. aCopy2                  db      '" ¢:',0
  6198. aError                  db      'Žè¨¡ª ',0
  6199. aContinue               db      'à®¤®«¦¨âì',0
  6200. aRetry                  db      '®¢â®à¨âì',0
  6201. a_Cancel                db      'Žâ¬¥­¨âì',0
  6202. a_Delete                db      '“¤ «¨âì',0
  6203. aSkip                   db      'à®¯ãáâ¨âì',0
  6204. aSkipAll                db      'à®¯ãáâ¨âì ¢á¥',0
  6205. error0msg               db      '‘âà ­­®... ¥â ®è¨¡ª¨',0
  6206. error1msg               db      '‘âà ­­®... ¥ ®¯à¥¤¥«¥­  ¡ §  ¨/¨«¨ à §¤¥« ¦ñá⪮£® ¤¨áª ',0
  6207. error2msg               db      '”ã­ªæ¨ï ­¥ ¯®¤¤¥à¦¨¢ ¥âáï ¤«ï ¤ ­­®© ä ©«®¢®© á¨á⥬ë',0
  6208. error3msg               db      '¥¨§¢¥áâ­ ï ä ©«®¢ ï á¨á⥬ ',0
  6209. error4msg               db      '‘âà ­­®... Žè¨¡ª  4',0
  6210. error5msg               db      '” ©« ­¥ ­ ©¤¥­',0
  6211. error6msg               db      '” ©« § ª®­ç¨«áï',0
  6212. error7msg               db      '‘âà ­­®... “ª § â¥«ì ¢­¥ ¯ ¬ï⨠¯à¨«®¦¥­¨ï',0
  6213. error8msg               db      '„¨áª § ¯®«­¥­',0
  6214. error9msg               db      '” ©«®¢ ï áâàãªâãà  à §àã襭 ',0
  6215. error10msg              db      '„®áâ㯠§ ¯à¥éñ­',0
  6216. error11msg              db      'Žè¨¡ª  ãáâனá⢠',0
  6217. error30msg              db      '¥¤®áâ â®ç­® ¯ ¬ïâ¨',0
  6218. error31msg              db      '” ©« ­¥ ï¥âáï ¨á¯®«­ï¥¬ë¬',0
  6219. error32msg              db      '‘«¨èª®¬ ¬­®£® ¯à®æ¥áᮢ',0
  6220. aUnknownError           db      '¥¨§¢¥áâ­ë© ª®¤ ®è¨¡ª¨: ',0
  6221. aCannotReadFolder       db      '¥ ¬®£ã ¯à®ç¨â âì ¯ ¯ªã',0
  6222. aRunError               db      'Žè¨¡ª  ¯à¨ § ¯ã᪥ ¯à®£à ¬¬ë:',0
  6223. aFileNameTooBig         db      '®«­®¥ ¨¬ï ä ©«  ᫨誮¬ ¤«¨­­®¥',0
  6224. aFolderNameTooBig       db      '®«­®¥ ¨¬ï ¯ ¯ª¨ ᫨誮¬ ¤«¨­­®¥',0
  6225. aCmdLineTooBig          db      'Š®¬ ­¤­ ï áâப  ¯à¥¢ë蠥⠣࠭¨æã OS ¢ 256 ᨬ¢®«®¢',0
  6226. aCannotCopyToSelf       db      '” ©« ­¥ ¬®¦¥â ¡ëâì ᪮¯¨à®¢ ­ ¢ á ¬®£® ᥡï',0
  6227. aCannotReadFile         db      '¥ ¬®£ã ¯à®ç¨â âì ä ©«',0
  6228. aIncompleteFile         db      'ë« ¯®«ã祭 ­¥¯®«­ë© ä ©«. “¤ «¨âì ¥£®?',0
  6229. aKeep                   db      'Žáâ ¢¨âì',0
  6230. aCannotWriteFile        db      '¥ ¬®£ã § ¯¨á âì ¢ ä ©«',0
  6231. aCannotDeleteFile       db      '¥ ¬®£ã 㤠«¨âì ä ©«',0
  6232. aCannotDeleteFolder     db      '¥ ¬®£ã 㤠«¨âì ¯ ¯ªã',0
  6233. aIgnore                 db      'ˆ£­®à¨à®¢ âì',0
  6234. aMkDirCaption           db      '‘®§¤ ­¨¥ ¯ ¯ª¨',0
  6235. aMkDir                  db      '‘®§¤ âì ¯ ¯ªã',0
  6236. aMkDirLen = $ - aMkDir - 1
  6237. aCannotMakeFolder       db      '¥ ¬®£ã ᮧ¤ âì ¯ ¯ªã',0
  6238. aName                   db      3,'ˆ¬ï'
  6239. aSize                   db      6,' §¬¥à'
  6240. aDate                   db      4,'„ â '
  6241. aTime                   db      5,'‚६ï'
  6242. aCannotLoadDLL          db      '¥ ¬®£ã § £à㧨âì DLL',0
  6243. aInvalidDLL             db      '” ©« ­¥ ­ ©¤¥­ ¨«¨ ¨¬¥¥â ­¥¢¥à­ë© ä®à¬ â',0
  6244. aMissingExport          db      '¥®¡å®¤¨¬ ï äã­ªæ¨ï ­¥ ­ ©¤¥­ ',0
  6245. aInitFailed             db      'Žè¨¡ª  ¯à¨ ¨­¨æ¨ «¨§ æ¨¨',0
  6246. aIncompatibleVersion    db      '¥á®¢¬¥á⨬ ï ¢¥àá¨ï',0
  6247. aTables                 db      '’ ¡«¨æë',0
  6248. aSelect                 db      '®¬¥â¨âì',0
  6249. aDeselect               db      '‘­ïâì',0
  6250. else
  6251. aDeleteCaption          db      'Delete',0
  6252. aConfirmDeleteText      db      'Do you wish to delete',0
  6253. aDeleteFolder           db      ' the folder',0
  6254. aConfirmDeleteTextMax = $ - aConfirmDeleteText - 2
  6255. aDeleteFile             db      ' the file',0
  6256. aDelete                 db      ' Delete ',0
  6257. aDeleteLength = $ - aDelete - 1
  6258. aCancel                 db      ' Cancel ',0
  6259. aCancelLength = $ - aCancel - 1
  6260. aCancelB                db      '[ Cancel ]',0
  6261. aCancelBLength = $ - aCancelB - 1
  6262. aCopyCaption            db      'Copy',0
  6263. aCopy                   db      '[ Copy ]',0
  6264. aCopyLength = $ - aCopy - 1
  6265. a_Continue              db      '[ Continue ]',0
  6266. a_ContinueLength = $ - a_Continue - 1
  6267. aCopy1                  db      'Copy "',0
  6268. aCopy2                  db      '" to:',0
  6269. aError                  db      'Error',0
  6270. aContinue               db      'Continue',0
  6271. aRetry                  db      'Retry',0
  6272. a_Cancel                db      'Cancel',0
  6273. a_Delete                db      'Delete',0
  6274. aSkip                   db      'Skip',0
  6275. aSkipAll                db      'Skip all',0
  6276. error0msg               db      'Strange... No error',0
  6277. error1msg               db      'Strange... Hard disk base and/or partition not defined',0
  6278. error2msg               db      'The file system does not support this function',0
  6279. error3msg               db      'Unknown file system',0
  6280. error4msg               db      'Strange... Error 4',0
  6281. error5msg               db      'File not found',0
  6282. error6msg               db      'End of file',0
  6283. error7msg               db      'Strange... Pointer lies outside of application memory',0
  6284. error8msg               db      'Disk is full',0
  6285. error9msg               db      'File structure is destroyed',0
  6286. error10msg              db      'Access denied',0
  6287. error11msg              db      'Device error',0
  6288. error30msg              db      'Not enough memory',0
  6289. error31msg              db      'File is not executable',0
  6290. error32msg              db      'Too many processes',0
  6291. aUnknownError           db      'Unknown error code: ',0
  6292. aCannotReadFolder       db      'Cannot read folder',0
  6293. aRunError               db      'Cannot execute program:',0
  6294. aFileNameTooBig         db      'Full file name is too long',0
  6295. aFolderNameTooBig       db      'Full folder name is too long',0
  6296. aCmdLineTooBig          db      'Command line is too long (OS limit is 256 symbols)',0
  6297. aCannotCopyToSelf       db      'File cannot be copied onto itself',0
  6298. aCannotReadFile         db      'Cannot read file',0
  6299. aIncompleteFile         db      'Incomplete file was retrieved. Delete it?',0
  6300. aKeep                   db      'Keep',0
  6301. aCannotWriteFile        db      'Cannot write to the file',0
  6302. aCannotDeleteFile       db      'Cannot delete the file',0
  6303. aCannotDeleteFolder     db      'Cannot delete the folder',0
  6304. aIgnore                 db      'Ignore',0
  6305. aMkDirCaption           db      'Make folder',0
  6306. aMkDir                  db      'Create the folder',0
  6307. aMkDirLen = $ - aMkDir - 1
  6308. aCannotMakeFolder       db      'Cannot create folder',0
  6309. aName                   db      4,'Name'
  6310. aSize                   db      4,'Size'
  6311. aDate                   db      4,'Date'
  6312. aTime                   db      4,'Time'
  6313. aCannotLoadDLL          db      'Cannot load DLL',0
  6314. aInvalidDLL             db      'File is not found or invalid',0
  6315. aMissingExport          db      'Required function is not present',0
  6316. aInitFailed             db      'Initialization failed',0
  6317. aIncompatibleVersion    db      'Incompatible version',0
  6318. aTables                 db      'Tables',0
  6319. aSelect                 db      'Select',0
  6320. aDeselect               db      'Deselect',0
  6321. end if
  6322.  
  6323. aOk                     db      'OK',0
  6324. aNoMemory               db      'No memory!'
  6325. nullstr                 db      0
  6326. standard_dll_path:
  6327. libini_name             db      '/rd/1/dll/'
  6328. standard_dll_path_size = $ - standard_dll_path
  6329.                         db      'libini.obj',0
  6330. aStart                  db      'START',0
  6331. aLibInit                db      'lib_init',0
  6332. aVersion                db      'version',0
  6333. aIniGetInt              db      'ini.get_int',0
  6334. aIniGetStr              db      'ini.get_str',0
  6335. aIniQuerySec            db      'ini.query_sec',0
  6336.  
  6337. aConfirmations          db      'Confirmations',0
  6338. aConfirmDelete          db      'Delete',0
  6339. aConfirmDeleteIncomplete db     'DeleteIncomplete',0
  6340.  
  6341. aAssociations           db      'Associations',0
  6342. aMenu                   db      'Menu',0
  6343. aFolderShortcuts        db      'FolderShortcuts',0
  6344. aShortcut               db      'Shortcut'
  6345. .d                      db      '0',0
  6346.  
  6347. align 4
  6348. ini_import:
  6349. ini.get_int     dd      aIniGetInt
  6350. ini.get_str     dd      aIniGetStr
  6351. ini.query_sec   dd      aIniQuerySec
  6352.                 dd      0
  6353.  
  6354. virtual at 0
  6355. PanelMode:
  6356. ; up to 16 columns on one panel
  6357. .NumColumns     dd      ?
  6358. ; available column types:
  6359. COLUMN_TYPE_NONE = 0
  6360. COLUMN_TYPE_NAME = 1
  6361.         COLUMN_NAME_MARK = 10h          ; (reserved)
  6362.         COLUMN_NAME_NOPATH = 20h        ; (reserved)
  6363.         COLUMN_NAME_RIGHTALIGN = 40h    ; (reserved)
  6364. COLUMN_TYPE_SIZE = 2
  6365.         COLUMN_SIZE_COMMA = 10h         ; (reserved)
  6366. COLUMN_TYPE_PACKED_SIZE = 3             ; (reserved)
  6367. COLUMN_TYPE_DATE = 4
  6368. COLUMN_TYPE_TIME = 5
  6369. COLUMN_TYPE_DATETIME = 6                ; (reserved)
  6370. COLUMN_TYPE_DATETIME_CREATION = 7       ; (reserved)
  6371. COLUMN_TYPE_DATETIME_ACCESS = 8         ; (reserved)
  6372. COLUMN_TYPE_ATTRIBUTES = 9              ; (reserved)
  6373. COLUMN_TYPE_DESCRIPTION = 10            ; (reserved)
  6374. COLUMN_TYPE_OWNER = 11                  ; (reserved)
  6375. COLUMN_TYPE_NUMLINKS = 12               ; (reserved)
  6376. COLUMN_TYPE_CUSTOM = 13                 ; (reserved)
  6377. .ColumnTypes    rb      16
  6378.  
  6379. .ColumnWidths   rb      16
  6380. .bFullScreen    db      ?               ; (reserved)
  6381. .bAlignExtensions db    ?
  6382.                 rb      2
  6383. .size = $
  6384. end virtual
  6385.  
  6386. align 4
  6387. column_headers:
  6388.         dd      nullstr
  6389.         dd      aName
  6390.         dd      aSize
  6391.         dd      nullstr
  6392.         dd      aDate
  6393.         dd      aTime
  6394. draw_column_proc:
  6395.         dd      draw_empty_column
  6396.         dd      draw_name_column
  6397.         dd      draw_size_column
  6398.         dd      -1
  6399.         dd      draw_date_column
  6400.         dd      draw_time_column
  6401. colmodes:
  6402. ; ०¨¬ 0 : NM,SC,D
  6403.         dd      3
  6404.         db      COLUMN_TYPE_NAME+COLUMN_NAME_MARK, COLUMN_TYPE_SIZE+COLUMN_SIZE_COMMA
  6405.                 db      COLUMN_TYPE_DATE, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  6406.         db      0, 10, 8
  6407.                 times 13 db 0
  6408.         db      0, 1
  6409.                 times 2 db 0
  6410. ; ०¨¬ 1 : N,N,N
  6411.         dd      3
  6412.         db      COLUMN_TYPE_NAME, COLUMN_TYPE_NAME, COLUMN_TYPE_NAME
  6413.                 times 13 db 0
  6414.         times 16 db 0
  6415.         db      0, 1
  6416.                 times 2 db 0
  6417. ; ०¨¬ 2 : N,N
  6418.         dd      2
  6419.         db      COLUMN_TYPE_NAME, COLUMN_TYPE_NAME
  6420.                 times 14 db 0
  6421.         times 16 db 0
  6422.         db      0, 0
  6423.                 times 2 db 0
  6424. ; ०¨¬ 3 : N,S,D,T
  6425.         dd      4
  6426.         db      COLUMN_TYPE_NAME, COLUMN_TYPE_SIZE, COLUMN_TYPE_DATE, COLUMN_TYPE_TIME
  6427.                 times 12 db 0
  6428.         db      0, 6, 8, 5
  6429.                 times 12 db 0
  6430.         db      0, 1
  6431.                 times 2 db 0
  6432. ; ०¨¬ 4 : N,S
  6433.         dd      2
  6434.         db      COLUMN_TYPE_NAME, COLUMN_TYPE_SIZE
  6435.                 times 14 db 0
  6436.         db      0, 6
  6437.                 times 14 db 0
  6438.         db      0, 0
  6439.                 times 2 db 0
  6440. ; ०¨¬ 5 : N,S,P,DM,DC,DA,A
  6441. ; ०¨¬ 6 : N,Z
  6442. ; ०¨¬ 7 : N,S,Z
  6443. ; ०¨¬ 8 : N,S,O
  6444. ; ०¨¬ 9 : N,S,LN
  6445.  
  6446. execinfo:
  6447.         dd      7
  6448.         dd      0
  6449. execparams dd   0
  6450.         dd      0
  6451.         dd      0
  6452.         db      0
  6453. execptr dd      ?
  6454.  
  6455. IncludeIGlobals
  6456.  
  6457. i_end:
  6458.  
  6459. IncludeUGlobals
  6460.  
  6461. execdata rb     1024
  6462. execdataend:
  6463.         align   4
  6464. attrinfo.attr   rb      40
  6465.  
  6466. panel1_data:
  6467. panel1_left     dd      ?
  6468. panel1_top      dd      ?
  6469. panel1_width    dd      ?
  6470. panel1_height   dd      ?
  6471. panel1_index    dd      ?
  6472. panel1_start    dd      ?
  6473. panel1_colsz    dd      ?
  6474. panel1_colst    dd      ?
  6475. panel1_sortmode db      ?
  6476.                 rb      3
  6477. panel1_nfa      dd      ?
  6478. panel1_numfiles dd      ?
  6479. panel1_files    dd      ?
  6480. panel1_colmode  dd      ?
  6481. panel1_colwidths rd     16+1
  6482. panel1_total_num dd     ?
  6483. panel1_total_size dq    ?
  6484. panel1_selected_num dd ?
  6485. panel1_selected_size dq ?
  6486. panel1_dir      rb      1024
  6487.  
  6488. panel2_data:
  6489. panel2_left     dd      ?
  6490. panel2_top      dd      ?
  6491. panel2_width    dd      ?
  6492. panel2_height   dd      ?
  6493. panel2_index    dd      ?
  6494. panel2_start    dd      ?
  6495. panel2_colsz    dd      ?
  6496. panel2_colst    dd      ?
  6497. panel2_sortmode db      ?
  6498.                 rb      3
  6499. panel2_nfa      dd      ?
  6500. panel2_numfiles dd      ?
  6501. panel2_files    dd      ?
  6502. panel2_colmode  dd      ?
  6503. panel2_colwidths rd     16+1
  6504. panel2_total_num dd     ?
  6505. panel2_total_size dq    ?
  6506. panel2_selected_num  dd ?
  6507. panel2_selected_size dq ?
  6508. panel2_dir      rb      1024
  6509.  
  6510. ;console_data    rb      max_width*max_height*2
  6511.  
  6512. nomem_dlgsavearea       rb      (12+4)*(3+3)*2
  6513.  
  6514. cur_header      rb      max_width
  6515. tmp             dd      ?
  6516.  
  6517. skinh           dd      ?
  6518. std_colors      rd      10
  6519.  
  6520. min_y           dd      ?
  6521. max_y           dd      ?
  6522. min_x           dd      ?
  6523. max_x           dd      ?
  6524. used_width      dd      ?
  6525. used_height     dd      ?
  6526.  
  6527. wnd_width       dd      ?
  6528. wnd_height      dd      ?
  6529.  
  6530. column_left     dd      ?
  6531. column_top      dd      ?
  6532. column_width    dd      ?
  6533. column_height   dd      ?
  6534. column_index    dd      ?
  6535. last_column_index dd    ?
  6536.  
  6537. scrpos          dq      ?
  6538. viewer_right_side dq    ?
  6539.  
  6540. saved_file_name:
  6541. procinfo        rb      1024
  6542. lower_file_name = procinfo + 512
  6543.  
  6544. app_path        rb      1100
  6545.  
  6546. error_msg       rb      128
  6547.  
  6548. prev_dir        rb      1024
  6549.  
  6550. driveinfo       rb      32+304
  6551. tmpname         rb      32
  6552.  
  6553. screens         dd      ?
  6554. num_screens     dd      ?
  6555. active_screen_vtable dd ?
  6556. active_screen_data dd   ?
  6557.  
  6558. aConfirmDeleteTextBuf   rb      aConfirmDeleteTextMax + 1
  6559. CopySourceTextBuf       rb      512
  6560. CopyDestEditBuf         rb      12+512+1
  6561. .length = $ - CopyDestEditBuf - 13
  6562.  
  6563. enter_string_buf        rb      12+512+1
  6564.  
  6565. bMemForImageValidData   db      ?
  6566.  
  6567. align 4
  6568. tolower_table   rb      256
  6569. layout          rb      128
  6570.  
  6571. copy_buffer_size = 32768
  6572. copy_buffer     rb      copy_buffer_size
  6573.  
  6574. ; data for directory delete
  6575. ; If directory nested level is >1024, then its full name is too big,
  6576. ; so we see the overflow when creating full name (we check for this!)
  6577. del_dir_stack   rd      1024
  6578. del_dir_stack_ptr dd    ?
  6579. del_dir_query_size = 32
  6580. del_dir_query_area rb   32+304*del_dir_query_size
  6581. del_bSkipAll    db      ?
  6582.  
  6583. ; stack
  6584.         align   4
  6585.         rb      512
  6586. stacktop:
  6587.  
  6588. mem:
  6589.