Subversion Repositories Kolibri OS

Rev

Rev 814 | Rev 1000 | 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. version equ '0.6'
  11. version_dword equ 0*10000h + 60
  12.  
  13. min_width = 54
  14. max_width = 255
  15. min_height = 8
  16. max_height = 255
  17.  
  18. include 'lang.inc'
  19. include 'font.inc'
  20. include 'sort.inc'
  21. include 'kglobals.inc'
  22. include 'dialogs.inc'
  23. include 'search.inc'
  24. include 'viewer.inc'
  25. include 'editor.inc'
  26. include 'tools.inc'
  27. include 'filetool.inc'
  28.  
  29. cursor_normal_size = (font_height*15+50)/100
  30. cursor_big_size = font_height
  31.  
  32. start:
  33.         mov     edi, identical_table
  34.         mov     ecx, 0x100
  35.         xor     eax, eax
  36. @@:
  37.         stosb
  38.         inc     eax
  39.         loop    @b
  40.         mov     cl, 'A'
  41. @@:
  42.         stosb
  43.         inc     eax
  44.         loop    @b
  45.         add     al, 0x20
  46.         mov     cl, 'Z'-'A'+1
  47. @@:
  48.         stosb
  49.         inc     eax
  50.         loop    @b
  51.         sub     al, 0x20
  52.         mov     cl, '€'-'Z'-1
  53. @@:
  54.         stosb
  55.         inc     eax
  56.         loop    @b
  57.         add     al, 0x20
  58.         mov     cl, ''-'€'
  59. @@:
  60.         stosb
  61.         inc     eax
  62.         loop    @b
  63.         add     al, 0x30
  64.         mov     cl, 'Ÿ'-''+1
  65. @@:
  66.         stosb
  67.         inc     eax
  68.         loop    @b
  69.         sub     al, 0x50
  70.         mov     cl, 256-'Ÿ'-1
  71. @@:
  72.         stosb
  73.         inc     eax
  74.         loop    @b
  75.         mov     byte [edi-256+'ð'], 'ñ'
  76.         mov     cl, 'A'
  77.         inc     eax
  78.         rep     stosb
  79.         mov     cl, 'Z'-'A'+1
  80.         dec     eax
  81.         rep     stosb
  82.         mov     cl, 'a'-'Z'-1
  83.         inc     eax
  84.         rep     stosb
  85.         mov     byte [edi-'a'+'_'], 0
  86.         mov     cl, 'z'-'a'+1
  87.         dec     eax
  88.         rep     stosb
  89.         mov     cl, '€'-'z'-1
  90.         inc     eax
  91.         rep     stosb
  92.         mov     cl, '¯'-'€'+1
  93.         dec     eax
  94.         rep     stosb
  95.         mov     cl, 'à'-'¯'-1
  96.         inc     eax
  97.         rep     stosb
  98.         mov     cl, 'ñ'-'à'+1
  99.         dec     eax
  100.         rep     stosb
  101.         mov     cl, 256-'ñ'-1
  102.         inc     eax
  103.         rep     stosb
  104.         mov     edi, SearchStringEditBuf
  105.         mov     eax, SearchStringEditBuf.length
  106.         stosd
  107.         xor     eax, eax
  108.         stosd
  109.         stosd
  110.         stosb
  111.         push    68
  112.         pop     eax
  113.         push    11
  114.         pop     ebx
  115.         int     0x40
  116.         call    init_console
  117.         call    draw_window
  118.         push    66
  119.         pop     eax
  120.         push    1
  121.         pop     ebx
  122.         mov     ecx, ebx
  123.         int     40h     ; set keyboard mode to scancodes
  124.         mov     eax, 200
  125.         mov     [panel1_nfa], eax
  126.         mov     [panel2_nfa], eax
  127.         mov     ecx, 200*4 + 32 + 200*304
  128.         call    pgalloc
  129.         mov     [panel1_files], eax
  130.         call    pgalloc
  131.         mov     [panel2_files], eax
  132.         test    eax, eax
  133.         jz      exit
  134.         xor     eax, eax
  135.         cmp     [panel1_files], eax
  136.         jz      exit
  137.         mov     [panel1_hPlugin], eax
  138.         mov     [panel1_parents], eax
  139.         mov     [panel1_parents_sz], eax
  140.         mov     [panel1_parents_alloc], eax
  141.         mov     [panel2_hPlugin], eax
  142.         mov     [panel2_parents], eax
  143.         mov     [panel2_parents_sz], eax
  144.         mov     [panel2_parents_alloc], eax
  145.         mov     [panel1_sortmode], al   ; sort by name
  146.         mov     [panel2_sortmode], al
  147.         mov     al, 2                   ; "á।­¨©" ä®à¬ â
  148.         mov     [panel1_colmode], eax
  149.         mov     [panel2_colmode], eax
  150.         mov     [num_screens], 1
  151.         mov     ecx, 0x1000
  152.         call    pgalloc
  153.         mov     [screens], eax
  154.         test    eax, eax
  155.         jz      exit
  156.         mov     ecx, panels_vtable
  157.         mov     [eax], ecx
  158.         mov     [active_screen_vtable], ecx
  159.         mov     [active_screen_keybar], keybar_panels
  160. ; load libini.obj and kfar.ini
  161.         mov     eax, libini_name
  162.         mov     esi, ini_import
  163.         push    3
  164.         pop     ebp     ; we use version 3 of libini
  165.         call    load_dll_and_import
  166.         test    eax, eax
  167.         jnz     .noini
  168.         mov     edi, app_path
  169.         or      ecx, -1
  170.         repnz   scasb
  171.         mov     dword [edi-1], '.ini'
  172.         mov     byte [edi+3], 0
  173.         push    1
  174.         push    dword aConfirmDelete
  175.         push    dword aConfirmations
  176.         push    dword app_path
  177.         call    [ini.get_int]
  178.         mov     [bConfirmDelete], al
  179.         push    0
  180.         push    dword aConfirmDeleteIncomplete
  181.         push    dword aConfirmations
  182.         push    dword app_path
  183.         call    [ini.get_int]
  184.         mov     [bConfirmDeleteIncomplete], al
  185.         push    2
  186.         push    aLeftViewMode
  187.         push    aPanels
  188.         push    app_path
  189.         call    [ini.get_int]
  190.         cmp     eax, 1
  191.         jb      @f
  192.         cmp     eax, 4
  193.         ja      @f
  194.         mov     [panel1_colmode], eax
  195. @@:
  196.         push    2
  197.         push    aRightViewMode
  198.         push    aPanels
  199.         push    app_path
  200.         call    [ini.get_int]
  201.         cmp     eax, 1
  202.         jb      @f
  203.         cmp     eax, 4
  204.         ja      @f
  205.         mov     [panel2_colmode], eax
  206. @@:
  207.         push    nullstr
  208.         push    512
  209.         push    saved_file_name
  210.         push    aEolStyle
  211.         push    aEditor
  212.         push    app_path
  213.         call    [ini.get_str]
  214.         mov     cl, edit.eol_dos
  215.         mov     al, [saved_file_name]
  216.         or      al, 20h
  217.         cmp     al, 'd'
  218.         jz      @f
  219.         mov     cl, edit.eol_mac
  220.         cmp     al, 'm'
  221.         jz      @f
  222.         mov     cl, edit.eol_unix
  223. @@:
  224.         mov     [EditEOLStyle], cl
  225.         mov     ecx, 0x1000
  226.         call    xpgalloc
  227.         test    eax, eax
  228.         jz      .skip_assoc
  229.         mov     [associations], eax
  230.         push    enum_associations_callback
  231.         push    aAssociations
  232.         push    app_path
  233.         call    [ini.enum_keys]
  234. .skip_assoc:
  235.         xor     ebp, ebp
  236.         xor     esi, esi
  237. .shortcut_loop:
  238.         mov     edi, saved_file_name
  239.         push    dword nullstr
  240.         push    512
  241.         push    edi
  242.         push    dword aShortcut
  243.         push    dword aFolderShortcuts
  244.         push    dword app_path
  245.         call    [ini.get_str]
  246.         cmp     byte [edi], 0
  247.         jz      .shortcut_cont
  248.         or      ecx, -1
  249.         xor     eax, eax
  250.         repnz   scasb
  251.         not     ecx
  252.         cmp     ecx, 2
  253.         jz      @f
  254.         cmp     byte [edi-2], '/'
  255.         jnz     @f
  256.         mov     byte [edi-2], 0
  257.         dec     ecx
  258. @@:
  259.         mov     al, [aShortcut.d]
  260.         push    esi
  261.         inc     esi
  262.         mov     [FolderShortcuts+(eax-'0')*4], esi
  263.         lea     esi, [esi+ecx-1]
  264.         push    esi
  265.         and     esi, 0xFFF
  266.         cmp     esi, ecx
  267.         pop     esi
  268.         ja      .norealloc
  269.         mov     edx, ebp
  270.         mov     ecx, esi
  271.         call    xpgrealloc
  272.         test    eax, eax
  273.         jnz     @f
  274.         pop     esi
  275.         mov     edi, FolderShortcuts
  276.         mov     ecx, 10
  277.         rep     stosd
  278.         jmp     .skip_shortcuts
  279. @@:
  280.         mov     ebp, eax
  281. .norealloc:
  282.         pop     edi
  283.         add     edi, ebp
  284.         mov     ecx, saved_file_name
  285. @@:
  286.         mov     al, [ecx]
  287.         inc     ecx
  288.         stosb
  289.         test    al, al
  290.         jnz     @b
  291. .shortcut_cont:
  292.         inc     [aShortcut.d]
  293.         cmp     [aShortcut.d], '9'
  294.         jbe     .shortcut_loop
  295.         mov     esi, FolderShortcuts
  296.         mov     ecx, 10
  297.         dec     ebp
  298. .l3:
  299.         lodsd
  300.         test    eax, eax
  301.         jz      @f
  302.         add     [esi-4], ebp
  303. @@:
  304.         loop    .l3
  305. .skip_shortcuts:
  306. ; load plugins
  307.         push    enum_plugins_callback
  308.         push    aPlugins
  309.         push    app_path
  310.         call    [ini.enum_keys]
  311. ; calculate info for editor
  312.         xor     ebx, ebx
  313.         mov     ecx, [num_plugins]
  314.         mov     esi, [plugins]
  315. @@:
  316.         dec     ecx
  317.         js      @f
  318.         mov     [esi+PluginInfo.EditInfoOffs], ebx
  319.         add     ebx, [esi+PluginInfo.EditInfoSize]
  320.         jnc     @f
  321.         sbb     ebx, ebx
  322. @@:
  323. ; ¯®áª®«ìªã à §¬¥à ¡«®ª  ¢ । ªâ®à¥ ®£à ­¨ç¥­, â® ¨ à §¬¥à ¯ ¬ïâ¨, १¥à¢¨à㥬®© ¤«ï ¯« £¨­®¢, ®£à ­¨ç¥­
  324. ; 512 - £àã¡ ï ¢¥àå­ïï ®æ¥­ª , £ à ­â¨àãîé ï à ¡®âã । ªâ®à , ॠ«ì­® ¯« £¨­ë ¤®«¦­ë âॡ®¢ âì ¬¥­ìè¥
  325.         cmp     ebx, 512
  326.         jb      @f
  327.         or      ebx, -1
  328.         mov     [EditPlugInfo], ebx     ; disable plugins for editor
  329.         push    ContinueBtn
  330.         push    1
  331.         push    EditConfigErr_ptr
  332.         push    2
  333.         call    SayErr
  334. @@:
  335.         add     ebx, 3
  336.         and     ebx, not 3
  337.         mov     [EditPlugInfo], ebx
  338. .noini:
  339.         mov     eax, [EditPlugInfo]
  340.         add     eax, editor_line.plugdata
  341.         imul    eax, max_height
  342.         add     eax, editor_data.basesize + 0xFFF
  343.         shr     eax, 12
  344.         mov     [EditDataSize], eax
  345.         mov     esi, def_left_dir
  346.         mov     edi, panel1_dir
  347. @@:
  348.         lodsb
  349.         stosb
  350.         test    al, al
  351.         jnz     @b
  352.         mov     esi, def_right_dir
  353.         mov     edi, panel2_dir
  354. @@:
  355.         lodsb
  356.         stosb
  357.         test    al, al
  358.         jnz     @b
  359.         call    draw_keybar
  360.         call    draw_cmdbar
  361.         mov     [prev_dir], 0
  362.         mov     ebp, panel1_data
  363.         call    calc_colwidths
  364.         call    read_folder
  365.         call    draw_panel
  366.         mov     [bSilentFolderMode], 1
  367.         mov     ebp, panel2_data
  368.         call    calc_colwidths
  369.         call    read_folder
  370.         call    draw_panel
  371. event:
  372.         call    get_event
  373.         dec     eax
  374.         jz      redraw
  375.         dec     eax
  376.         jz      key
  377. ; button - we have only one button, close
  378. exit:
  379. ; close all screens
  380. @@:
  381.         mov     ecx, [num_screens]
  382.         mov     eax, [screens]
  383.         mov     ebp, [eax+ecx*8-4]
  384.         mov     eax, [eax+ecx*8-8]
  385.         push    ebp
  386.         call    [eax+screen_vtable.OnExit]
  387.         pop     ecx
  388.         call    pgfree
  389.         dec     [num_screens]
  390.         jnz     @b
  391. ; unload all plugins
  392.         mov     ecx, [num_plugins]
  393.         imul    esi, ecx, PluginInfo.size
  394.         add     esi, [plugins]
  395. .unload:
  396.         dec     ecx
  397.         js      .unload_done
  398.         sub     esi, PluginInfo.size
  399.         push    ecx esi
  400.         call    [esi+PluginInfo.unload]
  401.         pop     esi ecx
  402.         jmp     .unload
  403. .unload_done:
  404. if 0    ; commented due to bug in libini
  405.         cmp     [ini.set_int], aIniSetInt
  406.         jz      .nosave
  407.         push    [panel1_colmode]
  408.         push    aLeftViewMode
  409.         push    aPanels
  410.         push    app_path
  411.         call    [ini.set_int]
  412.         push    [panel2_colmode]
  413.         push    aRightViewMode
  414.         push    aPanels
  415.         push    app_path
  416.         call    [ini.set_int]
  417. .nosave:
  418. end if
  419. if CHECK_FOR_LEAKS
  420.         mov     ecx, [panel1_files]
  421.         call    pgfree
  422.         mov     ecx, [panel2_files]
  423.         call    pgfree
  424.         mov     ecx, [screens]
  425.         call    pgfree
  426.         mov     ecx, [associations]
  427.         call    pgfree
  428.         mov     ecx, [console_data_ptr]
  429.         call    pgfree
  430.         mov     ecx, [MemForImage]
  431.         call    pgfree
  432.         mov     esi, FolderShortcuts
  433.         push    10
  434.         pop     ecx
  435. @@:
  436.         lodsd
  437.         test    eax, eax
  438.         jnz     @f
  439.         loop    @b
  440.         jmp     .nofreefs
  441. @@:
  442.         mov     ecx, eax
  443.         call    pgfree
  444.         mov     ecx, [plugins]
  445.         call    pgfree
  446.         mov     ecx, [panel1_parents]
  447.         call    pgfree
  448.         mov     ecx, [panel2_parents]
  449.         call    pgfree
  450. .nofreefs:
  451.         mov     eax, [numallocatedregions]
  452.         test    eax, eax
  453.         jz      @f
  454.         mov     edi, allocatedregions
  455.         int3
  456.         jmp     $
  457. @@:
  458. end if
  459.         or      eax, -1
  460.         int     40h
  461.  
  462. get_event:
  463.         push    ebx
  464.         mov     ebx, [idle_interval]
  465.         cmp     ebx, -1
  466.         jz      .infinite
  467.         push    23
  468.         pop     eax
  469.         int     40h
  470.         pop     ebx
  471.         test    eax, eax
  472.         jnz     .ret
  473.         mov     ebp, [active_screen_data]
  474.         mov     eax, [active_screen_vtable]
  475.         mov     eax, [eax+screen_vtable.OnIdle]
  476.         test    eax, eax
  477.         jz      get_event
  478.         call    eax
  479.         jmp     get_event
  480. .infinite:
  481.         pop     ebx
  482.         push    10
  483.         pop     eax
  484.         int     40h
  485. .ret:
  486.         ret
  487.  
  488. redraw:
  489. ; query kbd state from OS
  490.         mov     al, 66
  491.         push    3
  492.         pop     ebx
  493.         int     0x40
  494.         and     eax, 0x3F
  495.         cmp     al, [ctrlstate]
  496.         mov     [ctrlstate], al
  497.         jz      @f
  498.         call    draw_keybar
  499. @@:
  500.         mov     al, 9
  501.         mov     ebx, procinfo
  502.         or      ecx, -1
  503.         int     40h
  504. ; test if rolled up
  505. ; height of rolled up window is [skinh]+3
  506.         mov     eax, [ebx+46]
  507.         sub     eax, [skinh]
  508.         cmp     eax, 5
  509.         ja      @f
  510.         mov     al, 12
  511.         push    1
  512.         pop     ebx
  513.         int     0x40
  514.         xor     eax, eax
  515. ; ebx, ecx, edi are ignored by function 0 after first redraw
  516.         mov     edx, 0x53000000
  517.         int     0x40
  518.         mov     al, 12
  519.         inc     ebx
  520.         int     0x40
  521.         jmp     event
  522. @@:
  523.         xor     ecx, ecx
  524.         mov     eax, [ebx+42]
  525.         mov     [wnd_width], eax
  526.         sub     eax, 5*2-1
  527.         jae     @f
  528.         xor     eax, eax
  529. @@:
  530.         cdq
  531.         mov     esi, font_width
  532.         div     esi
  533.         cmp     eax, min_width
  534.         jae     @f
  535.         mov     al, min_width
  536.         mov     ch, 1
  537. @@:
  538.         cmp     eax, max_width
  539.         jbe     @f
  540.         mov     eax, max_width
  541.         mov     ch, 1
  542. @@:
  543.         cmp     eax, [cur_width]
  544.         mov     [cur_width], eax
  545.         setnz   cl
  546.         or      cl, ch
  547.         test    edx, edx
  548.         mov     [fill_width], edx
  549.         setnz   ch
  550.         mov     eax, [ebx+46]
  551.         mov     [wnd_height], eax
  552.         sub     eax, [skinh]
  553.         sub     eax, 5-1
  554.         jns     @f
  555.         xor     eax, eax
  556. @@:
  557.         cdq
  558.         mov     esi, font_height
  559.         div     esi
  560.         cmp     eax, min_height
  561.         jae     @f
  562.         mov     al, min_height
  563.         mov     cl, 1
  564. @@:
  565.         cmp     eax, max_height
  566.         jbe     @f
  567.         mov     eax, max_height
  568.         mov     cl, 1
  569. @@:
  570.         mov     [fill_height], edx
  571.         cmp     eax, [cur_height]
  572.         mov     [cur_height], eax
  573.         jnz     .resize
  574.         test    cl, cl
  575.         jnz     .resize
  576.         test    edx, edx
  577.         setnz   cl
  578.         or      cl, ch
  579.         jz      @f
  580.         test    byte [ebx+70], 1
  581.         jnz     @f
  582. .resize:
  583.         push    67
  584.         pop     eax
  585.         or      ebx, -1
  586.         or      ecx, -1
  587.         mov     edx, [cur_width]
  588.         imul    edx, font_width
  589.         add     edx, 5*2-1
  590.         mov     esi, [cur_height]
  591.         imul    esi, font_height
  592.         add     esi, [skinh]
  593.         add     esi, 5-1
  594.         int     40h
  595. .resize_draw:
  596.         mov     ecx, [MemForImage]
  597.         call    pgfree
  598.         and     [MemForImage], 0
  599.         call    init_console
  600. ;        call    draw_window
  601.         call    draw_keybar
  602.         mov     ebp, [active_screen_data]
  603.         mov     eax, [active_screen_vtable]
  604.         mov     [cursor_size], cursor_normal_size
  605.         call    dword [eax+screen_vtable.OnRedraw]
  606.         jmp     event
  607. @@:
  608.         call    draw_window
  609.         jmp     event
  610. alt_f9:
  611.         cmp     [saved_width], -1
  612.         jz      @f
  613.         mov     eax, [saved_width]
  614.         mov     [cur_width], eax
  615.         or      [saved_width], -1
  616.         mov     eax, [saved_height]
  617.         mov     [cur_height], eax
  618.         or      [saved_height], -1
  619.         jmp     redraw.resize
  620. @@:
  621.         push    48
  622.         pop     eax
  623.         push    5
  624.         pop     ebx
  625.         int     0x40
  626.         push    eax
  627.         sub     eax, [esp+2]
  628.         inc     eax
  629.         movzx   eax, ax
  630.         sub     eax, 10
  631.         xor     edx, edx
  632.         mov     ecx, font_width
  633.         div     ecx
  634.         xchg    [cur_width], eax
  635.         mov     [saved_width], eax
  636.         mov     eax, ebx
  637.         shr     ebx, 16
  638.         sub     eax, ebx
  639.         sub     eax, 5-1
  640.         sub     eax, [skinh]
  641.         xor     edx, edx
  642.         mov     ecx, font_height
  643.         div     ecx
  644.         xchg    [cur_height], eax
  645.         mov     [saved_height], eax
  646.         mov     ecx, ebx
  647.         pop     ebx
  648.         shr     ebx, 16
  649.         mov     edx, [cur_width]
  650.         imul    edx, font_width
  651.         add     edx, 5*2-1
  652.         mov     esi, [cur_height]
  653.         imul    esi, font_height
  654.         add     esi, [skinh]
  655.         add     esi, 4
  656.         push    67
  657.         pop     eax
  658.         int     0x40
  659.         jmp     redraw.resize_draw
  660. key:
  661.         mov     al, 2
  662.         int     40h
  663.         test    al, al
  664.         jnz     event
  665.         xchg    al, ah
  666.         cmp     al, 0xE0
  667.         jnz     @f
  668.         mov     [bWasE0], 1
  669.         jmp     event
  670. @@:
  671.         xchg    ah, [bWasE0]
  672.         mov     ebp, [active_screen_data]
  673.         mov     edx, [active_screen_vtable]
  674.         cmp     al, 0x1D
  675.         jz      .ctrl_down
  676.         cmp     al, 0x9D
  677.         jz      .ctrl_up
  678.         cmp     al, 0x2A
  679.         jz      .lshift_down
  680.         cmp     al, 0xAA
  681.         jz      .lshift_up
  682.         cmp     al, 0x36
  683.         jz      .rshift_down
  684.         cmp     al, 0xB6
  685.         jz      .rshift_up
  686.         cmp     al, 0x38
  687.         jz      .alt_down
  688.         cmp     al, 0xB8
  689.         jz      .alt_up
  690.         call    [edx+screen_vtable.OnKey]
  691.         jmp     event
  692. .ctrl_down:
  693.         test    ah, ah
  694.         jnz     .rctrl_down
  695.         or      [ctrlstate], 4
  696.         jmp     .keybar
  697. .rctrl_down:
  698.         or      [ctrlstate], 8
  699.         jmp     .keybar
  700. .ctrl_up:
  701.         test    ah, ah
  702.         jnz     .rctrl_up
  703.         and     [ctrlstate], not 4
  704.         jmp     .keybar
  705. .rctrl_up:
  706.         and     [ctrlstate], not 8
  707. .keybar:
  708.         call    draw_keybar
  709.         call    draw_image
  710. @@:     jmp     event
  711. .lshift_down:
  712. ; ignore E0 2A sequence
  713. ; e.g. arrow keys with NumLock on generate sequence E0 2A E0 xx / E0 xx+80 E0 AA
  714. ; where xx is scancode, so we can safely ignore E0 2A
  715.         test    ah, ah
  716.         jnz     @b
  717.         or      [ctrlstate], 1
  718.         jmp     .keybar
  719. .lshift_up:
  720. ; ignore E0 AA sequence
  721.         test    ah, ah
  722.         jnz     @b
  723.         and     [ctrlstate], not 1
  724.         jmp     .keybar
  725. .rshift_down:
  726.         or      [ctrlstate], 2
  727.         jmp     .keybar
  728. .rshift_up:
  729.         and     [ctrlstate], not 2
  730.         jmp     .keybar
  731. .alt_down:
  732.         test    ah, ah
  733.         jnz     .ralt_down
  734.         or      [ctrlstate], 0x10
  735.         jmp     .keybar
  736. .ralt_down:
  737.         or      [ctrlstate], 0x20
  738.         jmp     .keybar
  739. .alt_up:
  740.         test    ah, ah
  741.         jnz     .ralt_up
  742.         and     [ctrlstate], not 0x10
  743.         jmp     .keybar
  744. .ralt_up:
  745.         and     [ctrlstate], not 0x20
  746.         jmp     .keybar
  747.  
  748. process_ctrl_keys:
  749.         cmp     byte [esi], 0
  750.         jz      .done
  751.         push    ecx
  752.         cmp     al, [esi]
  753.         jz      .check
  754. .cont:
  755.         pop     ecx
  756.         add     esi, 8
  757.         jmp     process_ctrl_keys
  758. .done:
  759.         stc
  760.         ret
  761. .check:
  762.         mov     cl, 0
  763.         call    .check_ctrlkey
  764.         jc      .cont
  765.         mov     cl, 2
  766.         call    .check_ctrlkey
  767.         jc      .cont
  768.         mov     cl, 4
  769.         call    .check_ctrlkey
  770.         jc      .cont
  771.         pop     ecx
  772.         call    dword [esi+4]
  773.         clc
  774.         ret
  775. .check_ctrlkey:
  776.         push    eax edx
  777.         movzx   edx, [ctrlstate]
  778.         shr     edx, cl
  779.         add     cl, cl
  780.         movzx   eax, word [esi+2]
  781.         shr     eax, cl
  782.         and     eax, 15
  783.         cmp     al, ctrlkey_tests_num
  784.         jae     .fail
  785.         xchg    eax, edx
  786.         and     al, 3
  787.         call    [ctrlkey_tests + edx*4]
  788.         cmp     al, 1
  789.         pop     edx eax
  790.         ret
  791. .fail:
  792.         stc
  793.         pop     edx eax
  794.         ret
  795.  
  796. ctrlkey_test0:
  797.         test    al, al
  798.         setz    al
  799.         ret
  800. ctrlkey_test1:
  801.         test    al, al
  802.         setnp   al
  803.         ret
  804. ctrlkey_test2:
  805.         cmp     al, 3
  806.         setz    al
  807.         ret
  808. ctrlkey_test3:
  809.         cmp     al, 1
  810.         setz    al
  811.         ret
  812. ctrlkey_test4:
  813.         cmp     al, 2
  814.         setz    al
  815.         ret
  816.  
  817. enum_associations_callback:
  818. ; LongBool __stdcall callback(f_name,sec_name,key_name);
  819. ; [esp+4] = f_name, [esp+8] = sec_name, [esp+12] = key_name
  820.         mov     esi, [esp+12]
  821.         mov     edi, esi
  822. @@:
  823.         lodsb
  824.         test    al, al
  825.         jnz     @b
  826.         sub     esi, edi        ; esi = size of key name
  827.         push    nullstr
  828.         push    1024
  829.         push    saved_file_name
  830.         push    edi
  831.         push    dword [esp+16+8]
  832.         push    dword [esp+20+4]
  833.         call    [ini.get_str]
  834.         test    eax, eax
  835.         jnz     .ret
  836.         mov     eax, saved_file_name
  837. @@:
  838.         inc     esi
  839.         inc     eax
  840.         cmp     byte [eax-1], 0
  841.         jnz     @b
  842. ; esi = total size of entry
  843.         push    esi
  844.         add     esi, [associations_size]
  845.         mov     ecx, [associations_allocated]
  846. @@:
  847.         cmp     esi, ecx
  848.         jbe     @f
  849.         add     ecx, ecx
  850.         jmp     @b
  851. @@:
  852.         pop     esi
  853.         cmp     [associations_allocated], ecx
  854.         jz      @f
  855.         mov     [associations_allocated], ecx
  856.         mov     edx, [associations]
  857.         call    xpgrealloc
  858.         mov     [associations], eax
  859.         test    eax, eax
  860.         jz      .err
  861. @@:
  862.         mov     eax, esi
  863.         mov     esi, edi
  864.         mov     edi, [associations]
  865.         add     edi, [associations_size]
  866.         dec     edi
  867.         add     [associations_size], eax
  868. @@:
  869.         lodsb
  870.         stosb
  871.         test    al, al
  872.         jnz     @b
  873.         mov     esi, saved_file_name
  874. @@:
  875.         lodsb
  876.         stosb
  877.         test    al, al
  878.         jnz     @b
  879. .ret:
  880.         mov     al, 1
  881.         ret     12
  882. .err:
  883.         mov     ecx, edx
  884.         call    pgfree
  885.         xor     eax, eax
  886.         ret     12
  887.  
  888. enum_plugins_callback:
  889. ; LongBool __stdcall callback(f_name,sec_name,key_name);
  890. ; [esp+4] = f_name, [esp+8] = sec_name, [esp+12] = key_name
  891.         push    nullstr
  892.         push    1024
  893.         push    saved_file_name
  894.         push    dword [esp+12+12]
  895.         push    dword [esp+16+8]
  896.         push    dword [esp+20+4]
  897.         call    [ini.get_str]
  898.         test    eax, eax
  899.         jnz     .ret
  900.         mov     esi, saved_file_name
  901.         cmp     byte [esi], '/'
  902.         jz      .absolute
  903. ; convert path to absolute
  904.         mov     edi, execdata
  905.         push    esi
  906. @@:
  907.         lodsb
  908.         stosb
  909.         test    al, al
  910.         jnz     @b
  911.         pop     edi
  912.         mov     esi, app_path
  913.         push    esi
  914.         xor     ecx, ecx
  915. @@:
  916.         lodsb
  917.         test    al, al
  918.         jz      @f
  919.         cmp     al, '/'
  920.         jnz     @b
  921.         mov     ecx, esi
  922.         jmp     @b
  923. @@:
  924.         pop     esi
  925.         sub     ecx, esi
  926.         rep     movsb
  927.         mov     esi, execdata
  928. .z:
  929.         cmp     word [esi], '.'
  930.         jz      .ret
  931.         cmp     word [esi], './'
  932.         jnz     @f
  933.         add     esi, 2
  934.         jmp     .z
  935. @@:
  936.         cmp     word [esi], '..'
  937.         jnz     .c
  938.         cmp     byte [esi+2], 0
  939.         jz      .ret
  940.         cmp     byte [esi+2], '/'
  941.         jnz     .c
  942.         add     esi, 3
  943. @@:
  944.         dec     edi
  945.         cmp     edi, saved_file_name
  946.         jbe     .ret
  947.         cmp     byte [edi-1], '/'
  948.         jnz     @b
  949.         jmp     .z
  950. .c:
  951.         lodsb
  952.         stosb
  953.         test    al, al
  954.         jz      @f
  955.         cmp     edi, saved_file_name+1024
  956.         jb      .c
  957.         mov     esi, execdata
  958.         call    load_dll_and_import.big
  959. .ret:
  960.         mov     al, 1
  961.         ret     12
  962. @@:
  963. .absolute:
  964. ; allocate space for plugin info
  965.         mov     eax, [num_plugins]
  966.         inc     eax
  967.         mov     [num_plugins], eax
  968.         imul    ecx, eax, PluginInfo.size
  969.         cmp     ecx, [alloc_plugins]
  970.         jbe     .norealloc
  971.         mov     edx, [plugins]
  972.         call    xpgrealloc
  973.         test    eax, eax
  974.         jnz     @f
  975. .dec_ret:
  976.         dec     [num_plugins]
  977.         jmp     .ret
  978. @@:
  979.         mov     [plugins], eax
  980.         lea     eax, [ecx+0xFFF]
  981.         and     eax, not 0xFFF
  982.         mov     [alloc_plugins], eax
  983. .norealloc:
  984.         mov     esi, [plugins]
  985.         lea     esi, [esi+ecx-PluginInfo.size]
  986. ; load plugin DLL
  987.         or      ebp, -1
  988.         mov     eax, saved_file_name
  989.         call    load_dll_and_import.do
  990.         test    eax, eax
  991.         jnz     .dec_ret
  992. ; find exported functions
  993.         mov     eax, aVersion
  994.         call    load_dll_and_import.find_exported_function
  995.         jnc     @f
  996.         xor     eax, eax
  997. @@:
  998. MIN_INTERFACE_VER = 3
  999. MAX_INTERFACE_VER = 3
  1000.         cmp     eax, MIN_INTERFACE_VER
  1001.         jb      @f
  1002.         cmp     eax, MAX_INTERFACE_VER
  1003.         jbe     .version_ok
  1004. @@:
  1005.         push    aIncompatibleVersion
  1006. .cantload:
  1007.         push    saved_file_name
  1008.         push    aCannotLoadPlugin
  1009.         mov     eax, esp
  1010.         push    ContinueBtn
  1011.         push    1
  1012.         push    eax
  1013.         push    3
  1014.         call    SayErr
  1015.         add     esp, 12
  1016.         jmp     .dec_ret
  1017. .version_ok:
  1018.         mov     edi, esi
  1019.         mov     esi, plugin_exported
  1020. .import:
  1021.         lodsd
  1022.         test    eax, eax
  1023.         jz      .import_done
  1024.         call    load_dll_and_import.find_exported_function
  1025.         jnc     @f
  1026.         mov     eax, [esi-4+plugin_exported_default-plugin_exported]
  1027. @@:
  1028.         stosd
  1029.         jmp     .import
  1030. .import_done:
  1031. ; initialize plugin
  1032.         mov     eax, aPluginLoad
  1033.         call    load_dll_and_import.find_exported_function
  1034.         jc      .ok
  1035.         push    kfar_info
  1036.         call    eax
  1037.         cmp     eax, 1
  1038.         jb      .ok
  1039.         ja      .dec_ret
  1040.         push    aInitFailed
  1041.         jmp     .cantload
  1042. .ok:
  1043.         mov     al, 1
  1044.         ret     12
  1045.  
  1046. plugin_unload_default:
  1047.         ret
  1048.  
  1049. OpenFilePlugin_default:
  1050.         xor     eax, eax
  1051.         ret     28
  1052. GetFiles_default:
  1053.         xor     eax, eax
  1054.         ret     20
  1055.  
  1056. ClosePlugin_default:
  1057.         ret     4
  1058.  
  1059. GetOpenPluginInfo_default:
  1060.         ret     8
  1061.  
  1062. SetFolder_default:
  1063. open_default:
  1064.         xor     eax, eax
  1065.         ret     12
  1066.  
  1067. new_screen:
  1068. ; in: ecx=sizeof(screen data), edx->vtable
  1069. ; out: ebp=pointer or NULL, eax!=0 if successful
  1070. ; destroys ebx,ecx
  1071.         call    xpgalloc
  1072.         test    eax, eax
  1073.         jnz     @f
  1074.         ret
  1075. @@:
  1076.         mov     ebp, eax
  1077.         mov     eax, [screens]
  1078.         mov     ecx, [num_screens]
  1079.         inc     ecx
  1080.         shl     ecx, 3
  1081.         test    ecx, 0xFFF
  1082.         jnz     .norealloc
  1083.         push    edx
  1084.         mov     edx, eax
  1085.         call    xpgrealloc
  1086.         pop     edx
  1087.         test    eax, eax
  1088.         jnz     @f
  1089.         mov     ecx, ebp
  1090.         call    pgfree
  1091.         xor     eax, eax
  1092.         ret
  1093. @@:
  1094.         mov     [screens], eax
  1095. .norealloc:
  1096.         inc     [num_screens]
  1097.         mov     [eax+ecx-8], edx
  1098.         mov     [eax+ecx-4], ebp
  1099.         mov     eax, [num_screens]
  1100.         dec     eax
  1101.         mov     [active_screen], eax
  1102.         mov     [active_screen_vtable], edx
  1103.         mov     [active_screen_data], ebp
  1104.         or      [idle_interval], -1
  1105.         mov     edx, [edx+screen_vtable.keybar]
  1106.         test    edx, edx
  1107.         jz      @f
  1108.         mov     [active_screen_keybar], edx
  1109. @@:
  1110.         jmp     draw_keybar
  1111.  
  1112. next_screen:
  1113.         mov     eax, [active_screen]
  1114.         inc     eax
  1115.         cmp     eax, [num_screens]
  1116.         jnz     @f
  1117.         xor     eax, eax
  1118. @@:     mov     [active_screen], eax
  1119.         jmp     change_screen
  1120.  
  1121. delete_active_screen:
  1122.         mov     edi, [screens]
  1123.         mov     eax, [active_screen]
  1124.         shl     eax, 3
  1125.         add     edi, eax
  1126.         push    dword [edi+4]
  1127.         lea     esi, [edi+8]
  1128.         mov     ecx, [num_screens]
  1129.         sub     ecx, [active_screen]
  1130.         dec     ecx
  1131.         add     ecx, ecx
  1132.         rep     movsd
  1133.         dec     [num_screens]
  1134.         mov     ecx, [num_screens]
  1135.         shl     ecx, 3
  1136.         test    ecx, 0xFFF
  1137.         jnz     .norealloc
  1138.         mov     edx, [screens]
  1139.         call    pgrealloc               ; must succeed, because we decrease size
  1140.         mov     [screens], eax
  1141. .norealloc:
  1142.         pop     ecx
  1143.         call    pgfree
  1144.         dec     [active_screen]
  1145.  
  1146. change_screen:
  1147.         pusha
  1148.         or      [idle_interval], -1
  1149.         mov     eax, [active_screen]
  1150.         mov     esi, [screens]
  1151.         mov     ebp, [esi+eax*8+4]
  1152.         mov     eax, [esi+eax*8]
  1153.         push    eax ebp
  1154.         mov     eax, [eax+screen_vtable.OnActivate]
  1155.         test    eax, eax
  1156.         jz      @f
  1157.         call    eax
  1158. @@:
  1159.         pop     ebp eax
  1160.         mov     [active_screen_vtable], eax
  1161.         mov     [active_screen_data], ebp
  1162.         mov     edx, [eax+screen_vtable.keybar]
  1163.         test    edx, edx
  1164.         jz      @f
  1165.         mov     [active_screen_keybar], edx
  1166. @@:
  1167.         call    draw_keybar
  1168.         mov     [cursor_size], cursor_normal_size
  1169.         call    [eax+screen_vtable.OnRedraw]
  1170.         popa
  1171.         ret
  1172.  
  1173. F12:
  1174.         mov     eax, [cur_width]
  1175.         add     eax, 8
  1176.         mov     esi, eax
  1177.         mul     [num_screens]
  1178.         mov     ecx, eax
  1179.         call    xpgalloc
  1180.         test    eax, eax
  1181.         jnz     @f
  1182.         ret
  1183. @@:
  1184.         mov     ebx, eax
  1185.         mov     edi, eax
  1186.         xor     ecx, ecx
  1187. .next:
  1188.         xor     eax, eax
  1189.         stosd
  1190.         inc     ecx
  1191.         cmp     ecx, [num_screens]
  1192.         jz      @f
  1193.         lea     eax, [edi+esi-4]
  1194.         mov     dword [edi-4], eax
  1195. @@:
  1196.         xor     eax, eax
  1197.         stosd
  1198.         dec     ecx
  1199.         jz      @f
  1200.         lea     eax, [edi-8]
  1201.         sub     eax, esi
  1202.         mov     dword [edi-4], eax
  1203. @@:
  1204.         mov     al, '&'
  1205.         stosb
  1206.         cmp     ecx, 36
  1207.         jae     .noletter
  1208.         lea     eax, [ecx+'0']
  1209.         cmp     al, '9'
  1210.         jbe     @f
  1211.         add     al, 7
  1212. @@:
  1213.         stosb
  1214.         mov     al, '.'
  1215.         stosb
  1216.         jmp     .letter_done
  1217. .noletter:
  1218.         mov     al, ' '
  1219.         stosb
  1220.         stosb
  1221. .letter_done:
  1222.         mov     al, ' '
  1223.         stosb
  1224.         pushad
  1225.         mov     eax, [screens]
  1226.         mov     ebp, [eax+ecx*8+4]
  1227.         mov     eax, [eax+ecx*8]
  1228.         mov     ecx, [cur_width]
  1229.         sub     ecx, 12
  1230.         call    [eax + screen_vtable.getname]
  1231.         popad
  1232.         sub     edi, 4
  1233.         add     edi, [cur_width]
  1234.         inc     ecx
  1235.         cmp     ecx, [num_screens]
  1236.         jb      .next
  1237.         mov     eax, [active_screen]
  1238.         mul     esi
  1239.         add     eax, ebx
  1240.         push    1
  1241.         push    dword aScreens
  1242.         push    eax
  1243.         call    menu
  1244.         cmp     eax, -1
  1245.         jz      @f
  1246.         sub     eax, ebx
  1247.         div     esi
  1248.         mov     [active_screen], eax
  1249. @@:
  1250.         mov     ecx, ebx
  1251.         call    pgfree
  1252.         jmp     change_screen
  1253.  
  1254. panels_OnKey:
  1255. ; restore screen hidden by quick search box
  1256.         cmp     [bDisplayQuickSearch], 0
  1257.         jz      @f
  1258.         mov     [bDisplayQuickSearch], 0
  1259.         push    0
  1260.         push    QuickSearchDlg
  1261.         call    HideDialogBox
  1262. @@:
  1263.         mov     ebp, [active_panel]
  1264.         mov     ecx, [ebp + panel1_index - panel1_data]
  1265.         mov     edx, [ebp + panel1_start - panel1_data]
  1266.         mov     ebx, [ebp + panel1_colst - panel1_data]
  1267.         add     ebx, edx
  1268.         mov     esi, panels_ctrlkeys
  1269.         call    process_ctrl_keys
  1270.         jc      .nostdkey
  1271.         mov     [bQuickSearchMode], 0
  1272.         ret
  1273. .leaveqsmode:
  1274.         mov     [bQuickSearchMode], 0
  1275.         call    draw_image
  1276.         ret
  1277. .keepqsmode:
  1278.         push    QuickSearchDlg
  1279.         call    ShowDialogBox
  1280.         mov     [bDisplayQuickSearch], 1
  1281.         ret
  1282. .nostdkey:
  1283.         cmp     [bQuickSearchMode], 0
  1284.         jz      .noqsmode
  1285.         test    al, al
  1286.         js      .keepqsmode
  1287.         cmp     al, 40h
  1288.         jae     .leaveqsmode
  1289.         cmp     al, 0Eh
  1290.         jz      .qsbackspace
  1291.         cmp     al, 1Ch
  1292.         jz      .test_enter
  1293.         movzx   eax, al
  1294.         cmp     byte [scan2ascii+eax], 0
  1295.         jz      .leaveqsmode
  1296.         call    get_ascii_char
  1297.         mov     ecx, dword [quick_search_buf + 4]
  1298.         cmp     ecx, quicksearch_maxlen
  1299.         jae     .keepqsmode
  1300.         mov     byte [quick_search_buf + 12 + ecx], al
  1301.         mov     byte [quick_search_buf + 12 + ecx + 1], 0
  1302.         push    ecx
  1303.         call    quick_find
  1304.         pop     ecx
  1305.         jnc     @f
  1306.         mov     byte [quick_search_buf + 12 + ecx], 0
  1307.         jmp     .keepqsmode
  1308. @@:
  1309.         inc     dword [quick_search_buf + 4]
  1310.         sub     ecx, 16
  1311.         jae     @f
  1312.         xor     ecx, ecx
  1313. @@:
  1314.         mov     dword [quick_search_buf + 8], ecx
  1315.         jmp     .keepqsmode
  1316. .qsbackspace:
  1317.         mov     ecx, dword [quick_search_buf + 4]
  1318.         jecxz   .keepqsmode2
  1319.         dec     ecx
  1320.         mov     byte [quick_search_buf + 12 + ecx], 0
  1321.         dec     dword [quick_search_buf + 4]
  1322. .keepqsmode2:
  1323.         jmp     .keepqsmode
  1324. .test_enter:
  1325.         test    [ctrlstate], 0Ch        ; LCtrl or RCtrl pressed?
  1326.         jz      .keepqsmode2
  1327.         test    [ctrlstate], 3          ; Shift pressed?
  1328.         jnz     @f
  1329.         call    quick_find_next
  1330.         jmp     .keepqsmode2
  1331. @@:
  1332.         call    quick_find_prev
  1333.         jmp     .keepqsmode2
  1334. .noqsmode:
  1335. ; handle Alt+<key> combinations for quick search
  1336.         test    [ctrlstate], 30h        ; LAlt or RAlt pressed?
  1337.         jz      .noalt                  ; no => skip
  1338.         test    [ctrlstate], 0Ch        ; LCtrl or RCtrl pressed?
  1339.         jnz     .noalt                  ; yes => skip
  1340.         cmp     al, 40h
  1341.         jae     .noalt
  1342.         movzx   eax, al
  1343.         cmp     byte [scan2ascii+eax], 0
  1344.         jz      .noalt
  1345.         call    get_ascii_char
  1346.         mov     edi, quick_search_buf + 12
  1347.         mov     dword [edi-12], quicksearch_maxlen-1
  1348.         mov     dword [edi-8], 1
  1349.         and     dword [edi-4], 0
  1350.         stosb
  1351.         mov     byte [edi], 0
  1352.         call    quick_find
  1353.         jnc     @f
  1354.         mov     byte [quick_search_buf + 12], 0
  1355.         and     dword [quick_search_buf + 4], 0
  1356. @@:
  1357.         mov     ebx, QuickSearchDlg
  1358.         mov     eax, [ebp + panel1_left - panel1_data]
  1359.         add     eax, 10
  1360.         mov     edx, [cur_width]
  1361.         sub     edx, 21
  1362.         cmp     eax, edx
  1363.         jb      @f
  1364.         mov     eax, edx
  1365. @@:
  1366.         mov     [ebx + dlgtemplate.x], eax
  1367.         mov     eax, [ebp + panel1_top - panel1_data]
  1368.         add     eax, [ebp + panel1_height - panel1_data]
  1369.         mov     edx, [cur_height]
  1370.         sub     edx, 2
  1371.         cmp     eax, edx
  1372.         jb      @f
  1373.         mov     eax, edx
  1374. @@:
  1375.         mov     [ebx + dlgtemplate.y], eax
  1376.         push    ebx
  1377.         call    ShowDialogBox
  1378.         mov     [bQuickSearchMode], 1
  1379.         mov     [bDisplayQuickSearch], 1
  1380. .find_letter_done:
  1381. .noalt:
  1382. .ret:
  1383.         ret
  1384. .up:
  1385.         jecxz   .ret
  1386.         dec     ecx
  1387.         mov     [ebp + panel1_index - panel1_data], ecx
  1388.         cmp     ecx, edx
  1389.         jae     .done_redraw
  1390.         mov     [ebp + panel1_start - panel1_data], ecx
  1391. .done_redraw:
  1392. ;        call    draw_panel
  1393. ;        ret
  1394.         jmp     draw_panel
  1395. .insert:
  1396.         lea     eax, [ecx*4]
  1397.         add     eax, [ebp + panel1_files - panel1_data]
  1398.         mov     eax, [eax]
  1399.         cmp     word [eax+40], '..'
  1400.         jnz     @f
  1401.         cmp     byte [eax+42], 0
  1402.         jz      .insert.down
  1403. @@:
  1404.         xor     byte [eax+303], 1
  1405.         mov     edx, [eax+32]
  1406.         test    byte [eax+303], 1
  1407.         mov     eax, [eax+36]
  1408.         jnz     .insert.increase
  1409.         sub     dword [ebp + panel1_selected_size - panel1_data], edx
  1410.         sbb     dword [ebp + panel1_selected_size+4 - panel1_data], eax
  1411.         dec     [ebp + panel1_selected_num - panel1_data]
  1412.         jmp     .insert.down
  1413. .insert.increase:
  1414.         add     dword [ebp + panel1_selected_size - panel1_data], edx
  1415.         adc     dword [ebp + panel1_selected_size+4 - panel1_data], eax
  1416.         inc     [ebp + panel1_selected_num - panel1_data]
  1417. .insert.down:
  1418.         inc     ecx
  1419.         cmp     ecx, [ebp + panel1_numfiles - panel1_data]
  1420.         jae     .done_redraw
  1421.         jmp     @f
  1422. .down:
  1423.         inc     ecx
  1424.         cmp     ecx, [ebp + panel1_numfiles - panel1_data]
  1425.         jae     .ret
  1426. @@:
  1427.         mov     [ebp + panel1_index - panel1_data], ecx
  1428.         cmp     ecx, ebx
  1429.         jb      .done_redraw
  1430.         sub     ecx, [ebp + panel1_colst - panel1_data]
  1431.         inc     ecx
  1432.         mov     [ebp + panel1_start - panel1_data], ecx
  1433.         jmp     .done_redraw
  1434. .left:
  1435.         test    ecx, ecx
  1436.         jnz     @f
  1437.         ret
  1438. @@:
  1439.         mov     eax, [ebp + panel1_colsz - panel1_data]
  1440.         sub     ecx, eax
  1441.         jae     @f
  1442.         xor     ecx, ecx
  1443. @@:
  1444.         mov     [ebp + panel1_index - panel1_data], ecx
  1445. .finalize_left:
  1446.         cmp     ecx, edx
  1447.         jae     .done_redraw
  1448.         sub     edx, eax
  1449.         jae     @f
  1450.         xor     edx, edx
  1451. @@:
  1452.         mov     [ebp + panel1_start - panel1_data], edx
  1453.         jmp     .done_redraw
  1454. .pgup:
  1455.         mov     eax, [ebp + panel1_colst - panel1_data]
  1456.         dec     eax
  1457.         jnz     @f
  1458.         inc     eax
  1459. @@:
  1460.         test    ecx, ecx
  1461.         jnz     @f
  1462.         ret
  1463. @@:
  1464.         sub     ecx, eax
  1465.         jae     @f
  1466.         xor     ecx, ecx
  1467. @@:
  1468.         mov     [ebp + panel1_index - panel1_data], ecx
  1469.         dec     ecx
  1470.         jmp     .finalize_left
  1471. .right:
  1472.         mov     eax, [ebp + panel1_colsz - panel1_data]
  1473.         add     ecx, eax
  1474.         cmp     ecx, [ebp + panel1_numfiles - panel1_data]
  1475.         jb      @f
  1476.         mov     ecx, [ebp + panel1_numfiles - panel1_data]
  1477.         dec     ecx
  1478. @@:
  1479.         mov     [ebp + panel1_index - panel1_data], ecx
  1480. .finalize_right:
  1481.         cmp     ecx, ebx
  1482.         jb      .done_redraw
  1483.         add     ebx, eax
  1484.         cmp     ebx, [ebp + panel1_numfiles - panel1_data]
  1485.         jbe     @f
  1486.         mov     ebx, [ebp + panel1_numfiles - panel1_data]
  1487. @@:
  1488.         sub     ebx, [ebp + panel1_colst - panel1_data]
  1489.         jae     @f
  1490.         xor     ebx, ebx
  1491. @@:
  1492.         mov     [ebp + panel1_start - panel1_data], ebx
  1493.         jmp     .done_redraw
  1494. .pgdn:
  1495.         mov     eax, [ebp + panel1_colst - panel1_data]
  1496.         dec     eax
  1497.         jnz     @f
  1498.         inc     eax
  1499. @@:
  1500.         add     ecx, eax
  1501.         cmp     ecx, [ebp + panel1_numfiles - panel1_data]
  1502.         jb      @f
  1503.         mov     ecx, [ebp + panel1_numfiles - panel1_data]
  1504.         dec     ecx
  1505. @@:
  1506.         mov     [ebp + panel1_index - panel1_data], ecx
  1507.         inc     ecx
  1508.         jmp     .finalize_right
  1509. .tab:
  1510.         xor     [active_panel], panel1_data xor panel2_data
  1511.         call    draw_cmdbar
  1512.         call    draw_panel
  1513.         mov     ebp, [active_panel]
  1514.         jmp     .done_redraw
  1515. .home:
  1516.         and     [ebp + panel1_start - panel1_data], 0
  1517.         and     [ebp + panel1_index - panel1_data], 0
  1518.         jmp     .done_redraw
  1519. .end:
  1520.         mov     eax, [ebp + panel1_numfiles - panel1_data]
  1521.         dec     eax
  1522.         mov     [ebp + panel1_index - panel1_data], eax
  1523.         inc     eax
  1524.         sub     eax, [ebp + panel1_colst - panel1_data]
  1525.         jae     @f
  1526.         xor     eax, eax
  1527. @@:
  1528.         mov     [ebp + panel1_start - panel1_data], eax
  1529.         jmp     .done_redraw
  1530. .enter:
  1531.         cmp     [bQuickSearchMode], 0
  1532.         jz      @f
  1533.         call    draw_image
  1534. @@:
  1535.         call    get_curfile_folder_entry
  1536.         test    byte [ecx], 10h
  1537.         jnz     .enter_folder
  1538. ; todo: add <Enter> handling on plugin panel
  1539.         cmp     [ebp + panel1_hPlugin - panel1_data], 0
  1540.         jnz     .ret
  1541. ; generate full file name
  1542.         lea     esi, [ebp + panel1_dir - panel1_data]
  1543.         mov     edi, execdata
  1544. @@:
  1545.         lodsb
  1546.         test    al, al
  1547.         jz      @f
  1548.         stosb
  1549.         cmp     edi, execdataend-1
  1550.         jae     .bigfilename
  1551.         jmp     @b
  1552. @@:
  1553.         lea     esi, [ecx+40]
  1554.         mov     al, '/'
  1555.         stosb
  1556. @@:
  1557.         lodsb
  1558.         stosb
  1559.         cmp     edi, execdataend
  1560.         ja      .bigfilename
  1561.         test    al, al
  1562.         jnz     @b
  1563. ; try to open file and look for all plugins
  1564.         push    O_READ
  1565.         push    execdata
  1566.         call    open
  1567.         test    eax, eax
  1568.         jz      .noplugins      ; if can't open, just try to execute
  1569.         mov     esi, eax        ; save handle
  1570.         push    filedata_buffer_size
  1571.         push    filedata_buffer
  1572.         push    esi
  1573.         call    read
  1574.         mov     edi, eax        ; save size of read data
  1575. ; test for Kolibri executable
  1576.         cmp     eax, 24h
  1577.         jb      .enter.noexec
  1578.         cmp     dword [filedata_buffer], 'MENU'
  1579.         jnz     @f
  1580.         cmp     word [filedata_buffer+4], 'ET'
  1581.         jnz     @f
  1582. .close_run:
  1583.         push    esi
  1584.         call    close
  1585.         jmp     .run_app
  1586. @@:
  1587.         cmp     dword [filedata_buffer], 'KPCK'
  1588.         jnz     @f
  1589.         cmp     dword [filedata_buffer+12], 0x26914601
  1590.         jz      .close_run
  1591. @@:
  1592. .enter.noexec:
  1593.         mov     ecx, [num_plugins]
  1594.         mov     edx, [plugins]
  1595.         sub     edx, PluginInfo.size
  1596. .plugloop:
  1597.         add     edx, PluginInfo.size
  1598.         dec     ecx
  1599.         js      .plugdone
  1600.         pushad
  1601.         push    execdata
  1602.         push    [ebp+panel1_hFile-panel1_data]
  1603.         push    [ebp+panel1_hPlugin-panel1_data]
  1604.         push    edi
  1605.         push    filedata_buffer
  1606.         call    get_curfile_folder_entry
  1607.         push    ecx
  1608.         push    esi
  1609.         call    [edx+PluginInfo.OpenFilePlugin]
  1610.         mov     [esp+28], eax
  1611.         popad
  1612.         test    eax, eax
  1613.         jz      .plugloop
  1614.         cmp     eax, -1
  1615.         jnz     .pluginok
  1616.         push    esi
  1617.         call    close
  1618.         ret
  1619. .pluginok:
  1620. ; save current directory and set root directory of hPlugin
  1621.         mov     edi, eax        ; save handle
  1622.         mov     esi, execdata
  1623. @@:
  1624.         lodsb
  1625.         test    al, al
  1626.         jnz     @b
  1627.         sub     esi, execdata-9
  1628. ; allocate esi bytes in buffer 'parents'
  1629.         mov     ecx, [ebp + panel1_parents_sz - panel1_data]
  1630.         add     ecx, esi
  1631.         cmp     ecx, [ebp + panel1_parents_alloc - panel1_data]
  1632.         jbe     .enter.norealloc
  1633.         push    edx
  1634.         mov     edx, [ebp + panel1_parents - panel1_data]
  1635.         call    xpgrealloc
  1636.         pop     edx
  1637.         test    eax, eax
  1638.         jnz     @f
  1639.         push    edi
  1640.         call    [edx+PluginInfo.ClosePlugin]
  1641.         ret
  1642. @@:
  1643.         mov     [ebp + panel1_parents - panel1_data], eax
  1644. .enter.norealloc:
  1645.         mov     [ebp + panel1_parents_sz - panel1_data], ecx
  1646. ; save current state to the end of buffer
  1647.         sub     ecx, esi
  1648.         add     ecx, [ebp + panel1_parents - panel1_data]
  1649.         xchg    edx, [ebp + panel1_hPlugin - panel1_data]
  1650.         mov     [ecx], edx
  1651.         xchg    edi, [ebp + panel1_hFile - panel1_data]
  1652.         mov     [ecx+4], edi
  1653.         mov     byte [ecx+8], 0
  1654.         lea     edi, [ecx+9]
  1655.         lea     ecx, [esi-9]
  1656.         mov     esi, execdata
  1657.         rep     movsb
  1658.         mov     word [ebp + panel1_dir - panel1_data], '/'
  1659.         mov     eax, [ebp + panel1_hPlugin - panel1_data]
  1660.         lea     ebx, [ebp + panel1_plugin_info - panel1_data]
  1661.         and     dword [ebx], 0
  1662.         push    ebp
  1663.         push    ebx
  1664.         push    [ebp + panel1_hFile - panel1_data]
  1665.         call    [eax+PluginInfo.GetOpenPluginInfo]
  1666.         pop     ebp
  1667.         call    get_curfile_folder_entry
  1668.         mov     esi, ecx
  1669.         mov     edi, left_dotdot_entry
  1670.         cmp     ebp, panel1_data
  1671.         jz      @f
  1672.         add     edi, right_dotdot_entry-left_dotdot_entry
  1673. @@:
  1674.         mov     ecx, 10
  1675.         rep     movsd
  1676.         mov     byte [edi-40], 10h      ; attributes: folder
  1677.         mov     eax, '..'
  1678.         stosd
  1679.         jmp     .reread
  1680. .plugdone:
  1681.         push    esi
  1682.         call    close
  1683. .noplugins:
  1684. ; run program or association
  1685.         call    get_curfile_folder_entry
  1686.         call    find_extension
  1687.         jc      .run_app
  1688. .run_association:
  1689.         cmp     byte [edi], 0
  1690.         jz      .l1
  1691.         cmp     byte [edi], ';'
  1692.         jnz     @f
  1693. .l1:
  1694.         ret
  1695. @@:
  1696.         mov     esi, edi
  1697. @@:
  1698.         lodsb
  1699.         test    al, al
  1700.         jz      @f
  1701.         cmp     al, ';'
  1702.         jnz     @b
  1703.         dec     esi
  1704.         mov     byte [esi], 0
  1705.         mov     [restore_semicolon], esi
  1706. @@:
  1707. .run_association2:
  1708.         mov     [execparams], execdata
  1709.         mov     [execptr], edi
  1710.         jmp     .dorun
  1711. .run_app:
  1712.         mov     [execptr], execdata
  1713.         and     [execparams], 0
  1714. .dorun:
  1715.         lea     esi, [ebp + panel1_dir - panel1_data]
  1716.         mov     edi, execdata
  1717. @@:
  1718.         lodsb
  1719.         test    al, al
  1720.         jz      @f
  1721.         stosb
  1722.         cmp     edi, execdataend-1
  1723.         jae     .bigfilename
  1724.         jmp     @b
  1725. @@:
  1726.         lea     esi, [ecx+40]
  1727.         mov     al, '/'
  1728.         stosb
  1729. @@:
  1730.         lodsb
  1731.         stosb
  1732.         cmp     edi, execdataend
  1733.         ja      .bigfilename
  1734.         test    al, al
  1735.         jnz     @b
  1736. ; for fasm call - special handling, because
  1737. ; 1) fasm command line convention is different : fasm infile,outfile[,path] rather than tinypad infile
  1738. ; 2) fasm will probably create new file in directory, so we want to reload panel data
  1739.         xor     edx, edx
  1740.         cmp     [execparams], edx
  1741.         jz      .nofasm
  1742.         mov     esi, [execptr]
  1743. @@:
  1744.         lodsb
  1745.         test    al, al
  1746.         jnz     @b
  1747.         mov     eax, [esi-5]
  1748.         or      eax, 0x20202020
  1749.         cmp     eax, 'fasm'
  1750.         jnz     .nofasm
  1751.         cmp     edi, execdata+(execdataend-execdata)/2
  1752.         ja      .bigfilename
  1753.         mov     esi, execdata
  1754. @@:
  1755.         lodsb
  1756.         stosb
  1757.         test    al, al
  1758.         jnz     @b
  1759.         mov     byte [esi-1], ','
  1760.         inc     edx
  1761. ; output file: no extension if input file has extension, '.bin' otherwise
  1762.         push    edi
  1763. @@:
  1764.         dec     edi
  1765.         cmp     byte [edi], '.'
  1766.         jz      .ptfound
  1767.         cmp     byte [edi], '/'
  1768.         jnz     @b
  1769.         pop     edi
  1770.         cmp     edi, execdataend-4
  1771.         ja      .bigfilename
  1772.         mov     dword [edi-1], '.bin'
  1773.         mov     byte [edi+3], 0
  1774.         jmp     .nofasm
  1775. .ptfound:
  1776.         mov     byte [edi], 0
  1777.         pop     edi
  1778. .nofasm:
  1779.         mov     ebx, execinfo
  1780. ; if command line is more than 256 symbols, the kernel will truncate it
  1781. ; we do not want this!
  1782. ; N.B. We know that command line is either NULL or execdata, which is always ASCIIZ string,
  1783. ;      but can be up to 1023 symbols
  1784.         mov     esi, [ebx+8]
  1785.         test    esi, esi
  1786.         jz      .cmdlinelenok
  1787. @@:
  1788.         lodsb
  1789.         test    al, al
  1790.         jnz     @b
  1791.         sub     esi, [ebx+8]
  1792.         dec     esi
  1793.         cmp     esi, 256
  1794.         ja      .bigcmdline
  1795. .cmdlinelenok:
  1796.         push    70
  1797.         pop     eax
  1798.         int     40h
  1799.         xor     esi, esi
  1800.         xchg    esi, [restore_semicolon]
  1801.         test    esi, esi
  1802.         jz      @f
  1803.         mov     byte [esi], ';'
  1804. @@:
  1805.         neg     eax
  1806.         js      @f
  1807.         call    get_error_msg
  1808.         push    eax
  1809.         push    dword aRunError
  1810.         mov     eax, esp
  1811.         push    ContinueBtn
  1812.         push    1
  1813.         push    eax
  1814.         push    2
  1815.         call    SayErr
  1816.         pop     eax
  1817.         pop     eax
  1818.         ret
  1819. @@:
  1820.         test    edx, edx
  1821.         jz      @f
  1822.         push    5
  1823.         pop     eax
  1824.         push    20
  1825.         pop     ebx
  1826.         int     0x40
  1827.         jmp     .ctrl_r
  1828. @@:
  1829.         ret
  1830. .bigfilename3:
  1831.         pop     esi
  1832. .bigfilename2:
  1833.         pop     esi
  1834. .bigfilename:
  1835.         mov     eax, aFileNameTooBig
  1836. .l2:
  1837.         xor     esi, esi
  1838.         xchg    esi, [restore_semicolon]
  1839.         test    esi, esi
  1840.         jz      @f
  1841.         mov     byte [esi], ';'
  1842. @@:
  1843.         push    eax
  1844.         mov     eax, esp
  1845.         push    ContinueBtn
  1846.         push    1
  1847.         push    eax
  1848.         push    1
  1849.         call    SayErr
  1850.         pop     eax
  1851.         ret
  1852. .bigcmdline:
  1853.         mov     eax, aCmdLineTooBig
  1854.         jmp     .l2
  1855. .bigfoldername2:
  1856.         mov     esi, prev_dir
  1857.         lea     edi, [ebp + panel1_dir - panel1_data]
  1858. @@:
  1859.         lodsb
  1860.         stosb
  1861.         test    al, al
  1862.         jnz     @b
  1863. .bigfoldername:
  1864.         mov     eax, aFolderNameTooBig
  1865.         jmp     .l2
  1866. .enter_folder:
  1867.         lea     esi, [ecx+40]
  1868.         cmp     word [esi], '..'
  1869.         jnz     @f
  1870.         cmp     byte [esi+2], 0
  1871.         jz      .dotdot
  1872. @@:
  1873.         push    esi
  1874.         lea     esi, [ebp + panel1_dir - panel1_data]
  1875.         mov     edi, prev_dir
  1876. @@:
  1877.         lodsb
  1878.         stosb
  1879.         test    al, al
  1880.         jnz     @b
  1881.         lea     edi, [esi-1]
  1882.         lea     edx, [ebp + panel1_dir - panel1_data + 1024]
  1883.         cmp     esi, edx
  1884.         pop     esi
  1885.         jae     .bigfoldername
  1886.         mov     al, '/'
  1887.         cmp     [edi-1], al
  1888.         jz      @f
  1889.         stosb
  1890. @@:
  1891.         lodsb
  1892.         cmp     edi, edx
  1893.         jae     .bigfoldername2
  1894.         stosb
  1895.         test    al, al
  1896.         jnz     @b
  1897.         mov     eax, [ebp + panel1_hPlugin - panel1_data]
  1898.         test    eax, eax
  1899.         jz      .reread
  1900.         push    ebp
  1901.         lea     esi, [ebp + panel1_dir - panel1_data]
  1902.         push    esi
  1903.         add     ecx, 40
  1904.         push    ecx
  1905.         push    [ebp + panel1_hFile - panel1_data]
  1906.         call    [eax+PluginInfo.SetFolder]
  1907.         pop     ebp
  1908.         test    al, al
  1909.         jnz     .reread
  1910.         mov     esi, prev_dir
  1911.         lea     edi, [ebp + panel1_dir - panel1_data]
  1912. @@:
  1913.         lodsb
  1914.         stosb
  1915.         test    al, al
  1916.         jnz     @b
  1917. .retd:
  1918.         ret
  1919. .reread:
  1920.         call    read_folder
  1921. .done_cmdbar:
  1922.         call    draw_cmdbar
  1923.         jmp     .done_redraw
  1924. .dotdot:
  1925.         lea     edi, [ebp + panel1_dir - panel1_data]
  1926.         cmp     word [edi], '/'
  1927.         jnz     .dotdot_noroot
  1928.         cmp     [ebp + panel1_hPlugin - panel1_data], 0
  1929.         jz      .retd
  1930.         call    close_plugin_panel
  1931.         jmp     .dotdot
  1932. .dotdot_noroot:
  1933.         mov     edx, edi
  1934.         mov     al, 0
  1935.         or      ecx, -1
  1936.         repnz   scasb
  1937.         dec     edi
  1938.         mov     al, '/'
  1939.         std
  1940.         repnz   scasb
  1941.         cld
  1942.         inc     edi
  1943.         cmp     edi, edx
  1944.         jnz     @f
  1945.         inc     edi
  1946. @@:
  1947.         push    dword [edi]
  1948.         mov     byte [edi], 0
  1949.         push    edi
  1950.         mov     eax, [ebp + panel1_hPlugin - panel1_data]
  1951.         test    eax, eax
  1952.         jz      .dotdot_native
  1953.         push    ebp
  1954.         lea     esi, [ebp + panel1_dir - panel1_data]
  1955.         push    esi
  1956.         push    aDotDot
  1957.         push    [ebp + panel1_hFile - panel1_data]
  1958.         call    [eax+PluginInfo.SetFolder]
  1959.         pop     ebp
  1960.         test    al, al
  1961.         jnz     .dotdot_native
  1962.         pop     edi
  1963.         pop     dword [edi]
  1964.         ret
  1965. .dotdot_native:
  1966.         call    read_folder
  1967.         pop     edi
  1968.         pop     dword [edi]
  1969.         push    edi
  1970.         cmp     byte [edi], '/'
  1971.         jnz     @f
  1972.         inc     edi
  1973. @@:
  1974.         mov     edx, [ebp + panel1_files - panel1_data]
  1975.         mov     ecx, [ebp + panel1_numfiles - panel1_data]
  1976. .scanloop:
  1977.         mov     esi, [edx]
  1978.         add     esi, 40
  1979.         push    esi edi
  1980. @@:
  1981.         lodsb
  1982.         call    match_symbol
  1983.         jnz     @f
  1984.         inc     edi
  1985.         test    al, al
  1986.         jnz     @b
  1987. @@:
  1988.         pop     edi esi
  1989.         jz      .scanfound
  1990.         add     edx, 4
  1991.         loop    .scanloop
  1992.         jmp     .scandone
  1993. .scanfound:
  1994.         sub     edx, [ebp + panel1_files - panel1_data]
  1995.         shr     edx, 2
  1996.         mov     [ebp + panel1_index - panel1_data], edx
  1997.         sub     edx, [ebp + panel1_colst - panel1_data]
  1998.         jb      .scandone
  1999.         inc     edx
  2000.         mov     [ebp + panel1_start - panel1_data], edx
  2001. .scandone:
  2002.         pop     edi
  2003.         mov     byte [edi], 0
  2004.         jmp     .done_cmdbar
  2005. .ctrl_f39:
  2006.         sub     al, 0x3D
  2007.         add     al, al
  2008.         mov     ah, [ebp + panel1_sortmode - panel1_data]
  2009.         and     ah, 0xFE
  2010.         cmp     al, ah
  2011.         jnz     @f
  2012.         and     [ebp + panel1_sortmode - panel1_data], 1
  2013.         or      al, [ebp + panel1_sortmode - panel1_data]
  2014.         xor     al, 1
  2015. @@:
  2016.         mov     [ebp + panel1_sortmode - panel1_data], al
  2017.         mov     eax, [ebp + panel1_index - panel1_data]
  2018.         mov     ecx, [ebp + panel1_files - panel1_data]
  2019.         push    dword [ecx+eax*4]
  2020.         push    ecx
  2021.         call    sort_files
  2022.         pop     edi
  2023.         pop     eax
  2024.         or      ecx, -1
  2025.         repnz   scasd
  2026.         not     ecx
  2027.         dec     ecx
  2028.         mov     [ebp + panel1_index - panel1_data], ecx
  2029.         sub     ecx, [ebp + panel1_start - panel1_data]
  2030.         jb      .less_start
  2031.         sub     ecx, [ebp + panel1_colst - panel1_data]
  2032.         jae     .gr_end
  2033. @@:     jmp     .done_redraw
  2034. .less_start:
  2035.         add     [ebp + panel1_start - panel1_data], ecx
  2036.         jmp     @b
  2037. .gr_end:
  2038.         inc     ecx
  2039.         add     [ebp + panel1_start - panel1_data], ecx
  2040.         jmp     @b
  2041. .alt_f12:
  2042.         mov     ebp, panel1_data
  2043.         cmp     al, 0x3B
  2044.         jz      @f
  2045.         mov     ebp, panel2_data
  2046. @@:
  2047. ; get drives list
  2048.         mov     ebx, dirinfo
  2049.         mov     [ebx+dirinfo.size-dirinfo], 1
  2050.         mov     [ebx+dirinfo.dirdata-dirinfo], driveinfo
  2051.         mov     [ebx+dirinfo.name-dirinfo], tmpname
  2052.         mov     byte [tmpname], '/'
  2053.         xor     edx, edx
  2054.         xor     ecx, ecx
  2055. .drive_loop_e:
  2056.         mov     byte [tmpname+1], 0
  2057.         push    70
  2058.         pop     eax
  2059.         int     40h
  2060.         mov     ebx, dirinfo
  2061.         test    eax, eax
  2062.         jnz     .drive_loop_e_done
  2063.         mov     esi, driveinfo+32+40
  2064.         mov     edi, tmpname+1
  2065. @@:
  2066.         lodsb
  2067.         stosb
  2068.         test    al, al
  2069.         jnz     @b
  2070.         push    [ebx+dirinfo.first-dirinfo]
  2071.         and     [ebx+dirinfo.first-dirinfo], 0
  2072. .drive_loop_i:
  2073.         push    70
  2074.         pop     eax
  2075.         int     40h
  2076.         mov     ebx, dirinfo
  2077.         test    eax, eax
  2078.         jnz     .drive_loop_i_done
  2079.         add     ecx, 32+8
  2080.         push    ecx
  2081.         and     ecx, 0xFFF
  2082.         cmp     ecx, 32+8
  2083.         pop     ecx
  2084.         ja      @f
  2085.         call    xpgrealloc
  2086.         mov     edx, eax
  2087.         test    eax, eax
  2088.         jnz     @f
  2089.         pop     eax
  2090.         ret
  2091. @@:
  2092.         lea     edi, [edx+ecx-32]
  2093.         mov     esi, tmpname
  2094. @@:
  2095.         lodsb
  2096.         test    al, al
  2097.         jz      @f
  2098.         stosb
  2099.         jmp     @b
  2100. @@:
  2101.         mov     esi, driveinfo+32+40
  2102.         mov     al, '/'
  2103.         stosb
  2104. @@:
  2105.         lodsb
  2106.         stosb
  2107.         test    al, al
  2108.         jnz     @b
  2109.         inc     [ebx+dirinfo.first-dirinfo]
  2110.         jmp     .drive_loop_i
  2111. .drive_loop_i_done:
  2112.         pop     [ebx+dirinfo.first-dirinfo]
  2113.         inc     [ebx+dirinfo.first-dirinfo]
  2114.         jmp     .drive_loop_e
  2115. .drive_loop_e_done:
  2116.         and     [ebx+dirinfo.first-dirinfo], 0
  2117.         mov     edi, edx
  2118.         xor     esi, esi
  2119.         add     ecx, edx
  2120. @@:
  2121.         and     dword [edi], 0
  2122.         mov     dword [edi+4], esi
  2123.         mov     esi, edi
  2124.         add     edi, 32+8
  2125.         cmp     edi, ecx
  2126.         jae     @f
  2127.         mov     [esi], edi
  2128.         jmp     @b
  2129. @@:
  2130.         mov     ecx, edx
  2131.         lea     edi, [ebp + panel1_dir - panel1_data]
  2132.         cmp     [ebp + panel1_hPlugin - panel1_data], 0
  2133.         jz      .find_cur_drive_loop
  2134.         mov     edi, [ebp + panel1_parents - panel1_data]
  2135.         add     edi, 8
  2136. .find_cur_drive_loop:
  2137.         push    edi
  2138.         lea     esi, [ecx+8]
  2139. @@:
  2140.         lodsb
  2141.         test    al, al
  2142.         jz      .cur_drive_found
  2143.         call    match_symbol
  2144.         jnz     @f
  2145.         inc     edi
  2146.         jmp     @b
  2147. @@:
  2148.         cmp     dword [ecx], 0
  2149.         jz      @f
  2150.         pop     edi
  2151.         mov     ecx, [ecx]
  2152.         jmp     .find_cur_drive_loop
  2153. @@:
  2154.         mov     ecx, edx
  2155. .cur_drive_found:
  2156.         pop     edi
  2157.         push    1
  2158.         push    aDrive
  2159.         push    ecx
  2160.         mov     eax, [ebp + panel1_height - panel1_data]
  2161.         sub     eax, 2
  2162.         jae     @f
  2163.         add     eax, 2
  2164. @@:
  2165.         push    eax
  2166.         push    [ebp + panel1_width - panel1_data]
  2167.         push    [ebp + panel1_top - panel1_data]
  2168.         push    [ebp + panel1_left - panel1_data]
  2169.         call    menu_centered_in
  2170.         cmp     eax, -1
  2171.         jnz     @f
  2172.         mov     ecx, edx
  2173.         call    pgfree
  2174.         ret
  2175. @@:
  2176.         push    eax
  2177.         push    edx
  2178.         call    close_plugin_panels
  2179.         pop     edx
  2180.         lea     edi, [ebp + panel1_dir - panel1_data]
  2181.         push    edi
  2182.         mov     esi, edi
  2183.         mov     edi, prev_dir
  2184.         mov     ecx, 1024/4
  2185.         rep     movsd
  2186.         pop     edi
  2187.         pop     esi
  2188.         add     esi, 8
  2189. @@:
  2190.         lodsb
  2191.         stosb
  2192.         test    al, al
  2193.         jnz     @b
  2194.         mov     ecx, edx
  2195.         call    pgfree
  2196.         call    read_folder
  2197.         jmp     .done_redraw
  2198. .shift_f5:
  2199. ; todo: copy to plugin panel
  2200.         cmp     [ebp + panel1_hPlugin - panel1_data], 0
  2201.         jz      @f
  2202.         ret
  2203. @@:
  2204.         mov     esi, ebp
  2205.         cmp     [ebp + panel1_selected_num - panel1_data], 0
  2206.         jnz     .f5_2
  2207.         call    get_curfile_folder_entry
  2208.         lea     esi, [ecx+40]
  2209.         mov     edi, CopyDestEditBuf
  2210.         mov     eax, CopyDestEditBuf.length
  2211.         stosd
  2212.         scasd
  2213.         xor     eax, eax
  2214.         stosd
  2215.         mov     edx, edi
  2216. @@:
  2217.         lodsb
  2218.         test    al, al
  2219.         jz      .f5_common
  2220.         stosb
  2221.         jmp     @b
  2222. .f5:
  2223. ; todo: copy to plugin panel
  2224.         mov     esi, ebp
  2225.         xor     esi, panel1_data xor panel2_data
  2226.         cmp     [esi + panel1_hPlugin - panel1_data], 0
  2227.         jz      .f5_2
  2228.         ret
  2229. .f5_2:
  2230.         add     esi, panel1_dir - panel1_data
  2231.         mov     edi, CopyDestEditBuf
  2232.         mov     eax, CopyDestEditBuf.length
  2233.         stosd
  2234.         scasd
  2235.         xor     eax, eax
  2236.         stosd
  2237.         mov     edx, edi
  2238. @@:
  2239.         lodsb
  2240.         test    al, al
  2241.         jz      @f
  2242.         cmp     edi, CopyDestEditBuf+12+511
  2243.         jae     .bigfoldername
  2244.         stosb
  2245.         jmp     @b
  2246. @@:
  2247.         mov     al, '/'
  2248.         stosb
  2249. .f5_common:
  2250.         mov     eax, [ebp + panel1_hPlugin - panel1_data]
  2251.         mov     [source_hModule], eax
  2252.         mov     eax, [ebp + panel1_hFile - panel1_data]
  2253.         mov     [source_hPlugin], eax
  2254.         mov     eax, left_dotdot_entry
  2255.         cmp     ebp, panel1_data
  2256.         jz      @f
  2257.         add     eax, right_dotdot_entry-left_dotdot_entry
  2258. @@:
  2259.         mov     [default_attr], eax
  2260.         mov     byte [edi], 0
  2261.         sub     edi, edx
  2262.         mov     [edx-8], edi
  2263.         mov     edi, CopySourceTextBuf
  2264.         mov     esi, aCopy1
  2265. @@:
  2266.         lodsb
  2267.         test    al, al
  2268.         jz      @f
  2269.         stosb
  2270.         jmp     @b
  2271. @@:
  2272.         mov     eax, [ebp + panel1_selected_num - panel1_data]
  2273.         test    eax, eax
  2274.         jz      .f5_noselected1
  2275.         mov     ebx, eax
  2276.         push    10
  2277.         pop     ecx
  2278.         push    -'0'
  2279. @@:
  2280.         xor     edx, edx
  2281.         div     ecx
  2282.         push    edx
  2283.         test    eax, eax
  2284.         jnz     @b
  2285. @@:
  2286.         pop     eax
  2287.         add     al, '0'
  2288.         jz      @f
  2289.         stosb
  2290.         jmp     @b
  2291. @@:
  2292. if lang eq ru
  2293.         mov     dword [edi], ' í«¥'
  2294.         mov     dword [edi+4], '¬¥­â'
  2295.         add     edi, 8
  2296.         cmp     ebx, 1
  2297.         jz      @f
  2298.         mov     al, ' '
  2299.         stosb
  2300.         cmp     ebx, 4
  2301.         jbe     @f
  2302.         mov     word [edi-1], '®¢'
  2303.         inc     edi
  2304. @@:
  2305. else
  2306.         mov     dword [edi], ' ite'
  2307.         mov     byte [edi+4], 'm'
  2308.         add     edi, 5
  2309.         cmp     ebx, 1
  2310.         jz      @f
  2311.         mov     al, 's'
  2312.         stosb
  2313. @@:
  2314. end if
  2315.         jmp     .f5_selected1
  2316. .f5_noselected1:
  2317.         mov     al, '"'
  2318.         stosb
  2319.         call    get_curfile_folder_entry
  2320.         lea     esi, [ecx+40]
  2321.         lea     eax, [esi+1]
  2322. @@:
  2323.         inc     esi
  2324.         cmp     byte [esi-1], 0
  2325.         jnz     @b
  2326.         sub     esi, eax
  2327.         xchg    eax, esi
  2328.         dec     esi
  2329.         mov     edx, [cur_width]
  2330.         sub     edx, 50
  2331.         sub     eax, edx
  2332.         jbe     @f
  2333.         add     esi, eax
  2334.         mov     al, '.'
  2335.         stosb
  2336.         stosb
  2337.         stosb
  2338. @@:
  2339.         lodsb
  2340.         test    al, al
  2341.         jz      @f
  2342.         stosb
  2343.         jmp     @b
  2344. @@:
  2345.         mov     al, '"'
  2346.         stosb
  2347. .f5_selected1:
  2348.         mov     esi, aCopy2
  2349. @@:
  2350.         lodsb
  2351.         stosb
  2352.         test    al, al
  2353.         jnz     @b
  2354.         mov     ebx, copy_dlgdata
  2355.         mov     eax, [cur_width]
  2356.         sub     eax, 12
  2357.         mov     [ebx + dlgtemplate.width], eax
  2358.         dec     eax
  2359.         dec     eax
  2360.         mov     [ebx - copy_dlgdata + copy_dlgdata.width2], eax
  2361.         mov     [ebx - copy_dlgdata + copy_dlgdata.width3], eax
  2362.         shr     eax, 1
  2363.         dec     eax
  2364.         dec     eax
  2365.         mov     [ebx - copy_dlgdata + copy_dlgdata.copy_x2], eax
  2366.         sub     eax, aCopyLength-1
  2367.         mov     [ebx - copy_dlgdata + copy_dlgdata.copy_x1], eax
  2368.         add     eax, aCopyLength+3
  2369.         mov     [ebx - copy_dlgdata + copy_dlgdata.cnl_x1], eax
  2370.         add     eax, aCancelBLength - 1
  2371.         mov     [ebx - copy_dlgdata + copy_dlgdata.cnl_x2], eax
  2372.         mov     byte [ebx - copy_dlgdata + copy_dlgdata.flags0], 0xC
  2373.         and     byte [ebx - copy_dlgdata + copy_dlgdata.flags1], not 4
  2374.         and     byte [ebx - copy_dlgdata + copy_dlgdata.flags2], not 4
  2375.         push    ebx
  2376.         call    DialogBox
  2377.         cmp     eax, copy_dlgdata.copy_btn
  2378.         jnz     .ret2
  2379. ; Š®¯¨à㥬
  2380.         mov     esi, CopyDestEditBuf+12
  2381.         mov     edi, esi
  2382.         xor     eax, eax
  2383.         or      ecx, -1
  2384.         repnz   scasb
  2385.         dec     edi
  2386.         dec     edi
  2387.         cmp     edi, esi
  2388.         jb      .ret2
  2389.         mov     [bEndSlash], 0
  2390.         cmp     byte [edi], '/'
  2391.         jnz     @f
  2392.         cmp     edi, esi
  2393.         jz      @f
  2394.         mov     byte [edi], 0
  2395.         dec     edi
  2396.         mov     [bEndSlash], 1
  2397. @@:
  2398. ; …᫨ ¯ãâì ­¥ ­ ç¨­ ¥âáï á® á«íè , áç¨â ¥¬ ¥£® ®â­®á¨â¥«ì­® ⥪ã饩 ¯ ¯ª¨
  2399.         cmp     byte [esi], '/'
  2400.         jz      .copy_absolute_path
  2401.         push    esi
  2402.         push    edi
  2403.         lea     edi, [ebp + panel1_dir - panel1_data]
  2404.         or      ecx, -1
  2405.         xor     eax, eax
  2406.         repnz   scasb
  2407.         not     ecx
  2408.         pop     edi
  2409.         push    edi
  2410.         add     edi, ecx
  2411.         cmp     edi, CopyDestEditBuf+12+513
  2412.         pop     edi
  2413.         jb      @f
  2414.         pop     esi
  2415.         jmp     .bigfilename
  2416. @@:
  2417.         lea     edx, [edi+2]
  2418.         sub     edx, esi
  2419.         lea     edi, [edi+ecx+1]
  2420.         xchg    ecx, edx
  2421.         std
  2422.         lea     esi, [esi+ecx-1]
  2423.         rep     movsb
  2424.         cld
  2425.         pop     edi
  2426.         lea     esi, [ebp + panel1_dir - panel1_data]
  2427.         push    edi
  2428.         mov     ecx, edx
  2429.         rep     movsb
  2430.         mov     byte [edi-1], '/'
  2431.         pop     esi
  2432. .copy_absolute_path:
  2433. ; ‘­ ç «  ᮧ¤ ñ¬ ¢á¥ ¢ë襫¥¦ é¨¥ ¯ ¯ª¨, ª®â®àë¥ ¥éñ ­¥ áãé¥áâ¢ãîâ
  2434. ; ®á«¥¤­¨© ¨§ í«¥¬¥­â®¢ ¬®¦¥â ¡ëâì ª ª ä ©«®¬, â ª ¨ ¯ ¯ª®©;
  2435. ; ä®àá¨à㥬 ¯ ¯ªã ¢ á«ãç ¥, ¥á«¨ å®âï ¡ë ®¤¨­ ¨§ ¨áâ®ç­¨ª®¢ ï¥âáï ¯ ¯ª®©
  2436.         xor     edx, edx
  2437.         cmp     [ebp + panel1_selected_num - panel1_data], 0
  2438.         jz      .f5_noselected2
  2439.         mov     ecx, [ebp + panel1_numfiles - panel1_data]
  2440.         mov     edi, [ebp + panel1_files - panel1_data]
  2441. .scanselected2:
  2442.         mov     eax, [edi]
  2443.         add     edi, 4
  2444.         test    byte [eax+303], 1
  2445.         jz      @f
  2446.         test    byte [eax], 10h
  2447.         jz      @f
  2448.         inc     edx
  2449. @@:
  2450.         loop    .scanselected2
  2451.         jmp     .f5_selected2
  2452. .f5_noselected2:
  2453.         call    get_curfile_folder_entry
  2454.         test    byte [ecx], 10h
  2455.         setnz   dl
  2456. .f5_selected2:
  2457.         xor     eax, eax
  2458.         mov     edi, esi
  2459. .countslashloop:
  2460.         cmp     byte [edi], '/'
  2461.         jnz     @f
  2462.         inc     eax
  2463.         mov     ecx, edi
  2464. @@:
  2465.         inc     edi
  2466.         cmp     byte [edi], 0
  2467.         jnz     .countslashloop
  2468.         mov     [bNeedRestoreName], 0
  2469. ; "/file-system/partition" folders already exist, so we don't need to create them
  2470.         cmp     eax, 2
  2471.         jbe     .createupdone
  2472. ; we interpret destination as folder if edx!=0 or bEndSlash!=0
  2473.         test    edx, edx
  2474.         jnz     @f
  2475.         cmp     [bEndSlash], 0
  2476.         jnz     @f
  2477.         mov     edi, ecx
  2478.         dec     eax
  2479. @@:
  2480.         mov     [attrinfo.name], esi
  2481.         mov     ecx, eax
  2482. ; ¨é¥¬ ¯®á«¥¤­îî ¯ ¯ªã, ª®â®à ï ¥éñ áãé¥áâ¢ã¥â
  2483. .createuploop1:
  2484.         cmp     eax, 2
  2485.         jbe     .createupdone1
  2486.         mov     dl, [edi]
  2487.         mov     byte [edi], 0
  2488.         push    eax
  2489.         push    70
  2490.         pop     eax
  2491.         mov     ebx, attrinfo
  2492.         int     0x40
  2493.         test    eax, eax
  2494.         pop     eax
  2495.         mov     byte [edi], dl
  2496.         jnz     .createupcont1
  2497.         test    byte [attrinfo.attr], 10h
  2498.         jnz     .createupdone1
  2499. ; the item required to be a folder, but is file
  2500.         push    aNotFolder
  2501.         push    esi
  2502.         mov     eax, esp
  2503.         push    ContinueBtn
  2504.         push    1
  2505.         push    eax
  2506.         push    2
  2507.         call    SayErr
  2508.         pop     eax
  2509.         pop     eax
  2510. .ret3:
  2511.         ret
  2512. .createupcont1:
  2513.         dec     eax
  2514. @@:
  2515.         dec     edi
  2516.         cmp     byte [edi], '/'
  2517.         jnz     @b
  2518.         jmp     .createuploop1
  2519. .createupdone1:
  2520. ; ᮧ¤ ñ¬ ¢á¥ ¯ ¯ª¨, ª®â®àë¥ ­ ¬ ­ã¦­ë
  2521.         cmp     eax, ecx
  2522.         jae     .createupdone
  2523. @@:
  2524.         inc     edi
  2525.         cmp     byte [edi], 0
  2526.         jz      @f
  2527.         cmp     byte [edi], '/'
  2528.         jnz     @b
  2529. @@:
  2530.         mov     dl, byte [edi]
  2531.         mov     byte [edi], 0
  2532.         push    eax
  2533.         push    RetryOrCancelBtn
  2534.         push    2
  2535.         call    makedir
  2536.         mov     byte [edi], dl
  2537.         mov     [bNeedRestoreName], 1
  2538.         pop     eax
  2539.         jnz     .ret3
  2540.         inc     eax
  2541.         jmp     .createupdone1
  2542. .createupdone:
  2543.         mov     dl, 1
  2544.         cmp     byte [edi], 1
  2545.         sbb     eax, -1
  2546.         cmp     eax, 2
  2547.         jbe     .docopy
  2548.         mov     [attrinfo.attr], 0      ; assume zero attributes if error
  2549.         push    70
  2550.         pop     eax
  2551.         mov     ebx, attrinfo
  2552.         int     0x40
  2553.         test    [attrinfo.attr], 10h
  2554.         setnz   dl
  2555. .docopy:
  2556.         call    get_curfile_folder_entry
  2557.         mov     eax, ecx
  2558.         cmp     [bNeedRestoreName], 0
  2559.         jz      @f
  2560.         cmp     [bEndSlash], 0
  2561.         jnz     @f
  2562.         cmp     [ebp + panel1_selected_num - panel1_data], 0
  2563.         jnz     @f
  2564.         test    byte [eax], 10h
  2565.         jz      @f
  2566.         mov     dl, 0
  2567. @@:
  2568. ; ­ ç¨­ ¥¬ ᮡá⢥­­® ª®¯¨à®¢ ­¨¥
  2569.         mov     [bDestIsFolder], dl
  2570.         mov     [copy_bSkipAll], 0
  2571.         mov     [copy_bSkipAll2], 0
  2572.         mov     [copy_bSkipAll3], 0
  2573.         test    [ebp + panel1_plugin_flags - panel1_data], 2
  2574.         jnz     .copy_GetFiles
  2575.         cmp     [ebp + panel1_selected_num - panel1_data], 0
  2576.         jnz     .f5_selected3
  2577.         call    copy_file
  2578. .copydone:
  2579.         push    ebp
  2580.         call    .ctrl_r
  2581.         pop     ebp
  2582.         xor     ebp, panel1_data xor panel2_data
  2583.         jmp     .ctrl_r
  2584. .f5_selected3:
  2585.         mov     ecx, [ebp + panel1_numfiles - panel1_data]
  2586.         mov     esi, [ebp + panel1_files - panel1_data]
  2587. .f5_selected_copyloop:
  2588.         lodsd
  2589.         test    byte [eax+303], 1
  2590.         jz      .f5_selected_copycont
  2591.         mov     [bDestIsFolder], dl
  2592.         call    copy_file
  2593.         ja      .f5_multiple_cancel
  2594.         and     byte [eax+303], not 1
  2595.         pushad
  2596.         call    draw_panel
  2597.         cmp     [bNeedRestoreName], 0
  2598.         jz      @f
  2599.         mov     esi, CopyDestEditBuf+12
  2600.         call    delete_last_name_from_end
  2601. @@:
  2602.         popad
  2603. .f5_selected_copycont:
  2604.         loop    .f5_selected_copyloop
  2605. .f5_multiple_cancel:
  2606.         jmp     .copydone
  2607. .copy_GetFiles:
  2608.         mov     ecx, [ebp + panel1_selected_num - panel1_data]
  2609.         cmp     ecx, 1
  2610.         adc     ecx, 0
  2611.         shl     ecx, 2
  2612.         call    xpgalloc
  2613.         test    eax, eax
  2614.         jnz     @f
  2615.         ret
  2616. @@:
  2617.         push    ebp eax ; save
  2618.         push    copy_AddDir     ; adddir
  2619.         push    copy_AddFile    ; addfile
  2620.         push    eax             ; items
  2621.         shr     ecx, 2
  2622.         push    ecx             ; NumItems
  2623.         push    [ebp + panel1_hFile - panel1_data]
  2624.         mov     edi, eax
  2625.         call    get_curfile_folder_entry
  2626.         mov     [edi], ecx
  2627.         cmp     [ebp + panel1_selected_num - panel1_data], 0
  2628.         jz      .cgf1
  2629.         mov     esi, [ebp + panel1_files - panel1_data]
  2630.         mov     ecx, [ebp + panel1_numfiles - panel1_data]
  2631. .cgf0:
  2632.         lodsd
  2633.         test    byte [eax+303], 1
  2634.         jz      @f
  2635.         stosd
  2636. @@:
  2637.         loop    .cgf0
  2638. .cgf1:
  2639.         mov     eax, [ebp + panel1_hPlugin - panel1_data]
  2640.         call    [eax+PluginInfo.GetFiles]
  2641.         pop     ecx ebp
  2642.         call    pgfree
  2643.         jmp     .copydone
  2644.  
  2645. .f3:
  2646.         mov     eax, [ebp + panel1_files - panel1_data]
  2647.         mov     ecx, [eax+ecx*4]
  2648.         test    byte [ecx], 10h
  2649.         jnz     .ret2
  2650.         lea     esi, [ebp + panel1_dir - panel1_data]
  2651.         xor     eax, eax
  2652.         call    view_file
  2653. .ret2:
  2654.         ret
  2655. .f4:
  2656.         call    edit_file
  2657.         ret
  2658. .f8_has_selected:
  2659.         mov     edi, saved_file_name+511
  2660.         mov     byte [edi], 0
  2661.         mov     eax, [ebp + panel1_selected_num - panel1_data]
  2662. if lang eq ru
  2663.         cmp     eax, 1
  2664.         jz      @f
  2665.         dec     edi
  2666.         mov     byte [edi], ' '
  2667.         cmp     eax, 4
  2668.         jbe     @f
  2669.         dec     edi
  2670.         mov     word [edi], '®¢'
  2671. @@:
  2672.         mov     dword [edi-4], '¬¥­â'
  2673.         mov     dword [edi-8], ' í«¥'
  2674.         sub     edi, 8
  2675. else
  2676.         cmp     eax, 1
  2677.         jz      @f
  2678.         dec     edi
  2679.         mov     byte [edi], 's'
  2680. @@:
  2681.         mov     dword [edi-4], 'item'
  2682.         mov     byte [edi-5], ' '
  2683.         sub     edi, 5
  2684. end if
  2685.         xor     edx, edx
  2686.         push    10
  2687.         pop     ecx
  2688. @@:
  2689.         div     ecx
  2690.         add     dl, '0'
  2691.         dec     edi
  2692.         mov     [edi], dl
  2693.         xor     edx, edx
  2694.         test    eax, eax
  2695.         jnz     @b
  2696.         push    edi
  2697.         push    aConfirmDeleteText
  2698.         mov     eax, esp
  2699.         push    DeleteOrCancelBtn
  2700.         push    2
  2701.         push    eax
  2702.         push    2
  2703.         push    aDeleteCaption
  2704.         call    Message
  2705.         add     esp, 8
  2706.         test    eax, eax
  2707.         jnz     .ret2
  2708.         mov     [del_bSkipAll], 0
  2709.         mov     ecx, [ebp + panel1_numfiles - panel1_data]
  2710.         jecxz   .ret2
  2711.         mov     esi, [ebp + panel1_files - panel1_data]
  2712. .f8_loop:
  2713.         lodsd
  2714.         test    byte [eax+303], 1
  2715.         jz      @f
  2716.         call    delete_file
  2717.         ja      .f8_multiple_cancel
  2718. @@:
  2719.         loop    .f8_loop
  2720. .f8_multiple_cancel:
  2721.         jmp     .copydone
  2722. .f8:
  2723. ; todo: delete files from plugin panel
  2724.         cmp     [ebp + panel1_hPlugin - panel1_data], 0
  2725.         jz      @f
  2726.         ret
  2727. @@:
  2728.         cmp     [ebp + panel1_selected_num - panel1_data], 0
  2729.         jnz     .f8_has_selected
  2730.         call    get_curfile_folder_entry
  2731.         cmp     word [ecx+40], '..'
  2732.         jnz     @f
  2733.         cmp     byte [ecx+42], 0
  2734.         jz      .f8_not_allowed
  2735. @@:
  2736.         cmp     [bConfirmDelete], 0
  2737.         jz      .f8_allowed
  2738.         lea     eax, [ecx+40]
  2739.         push    eax
  2740.         mov     esi, aConfirmDeleteText
  2741.         mov     edi, aConfirmDeleteTextBuf
  2742.         push    edi
  2743. @@:
  2744.         lodsb
  2745.         stosb
  2746.         test    al, al
  2747.         jnz     @b
  2748.         dec     edi
  2749.         mov     esi, aDeleteFolder
  2750.         test    byte [ecx], 10h
  2751.         jnz     @f
  2752.         mov     esi, aDeleteFile
  2753. @@:
  2754.         lodsb
  2755.         stosb
  2756.         test    al, al
  2757.         jnz     @b
  2758.         mov     eax, esp
  2759.         push    DeleteOrCancelBtn
  2760.         push    2
  2761.         push    eax
  2762.         push    2
  2763.         push    aDeleteCaption
  2764.         call    Message
  2765.         add     esp, 8
  2766.         test    eax, eax
  2767.         jz      .f8_allowed
  2768. .f8_not_allowed:
  2769.         ret
  2770. .f8_allowed:
  2771.         mov     [del_bSkipAll], 0
  2772.         mov     eax, ecx
  2773.         call    delete_file
  2774.         jmp     .copydone
  2775. .ctrl_r:
  2776. ; Rescan panel
  2777. ;       call    read_folder
  2778. ;       jmp     .done_redraw
  2779.         mov     eax, [ebp + panel1_index - panel1_data]
  2780.         push    eax
  2781.         call    get_curfile_name
  2782.         mov     esi, ecx
  2783.         mov     edi, saved_file_name
  2784. @@:
  2785.         lodsb
  2786.         stosb
  2787.         test    al, al
  2788.         jnz     @b
  2789. .ctrl_r.doread:
  2790.         push    [ebp + panel1_start - panel1_data]
  2791.         call    read_folder
  2792.         pop     [ebp + panel1_start - panel1_data]
  2793.         pop     [ebp + panel1_index - panel1_data]
  2794.         or      eax, -1
  2795. @@:
  2796.         inc     eax
  2797.         cmp     eax, [ebp + panel1_numfiles - panel1_data]
  2798.         jae     .ctrl_r.notfound
  2799.         mov     ecx, [ebp + panel1_files - panel1_data]
  2800.         mov     esi, [ecx+eax*4]
  2801.         add     esi, 40
  2802.         mov     edi, saved_file_name
  2803.         call    strcmpi
  2804.         jnz     @b
  2805. .ctrl_r.found:
  2806.         mov     [ebp + panel1_index - panel1_data], eax
  2807. .ctrl_r.notfound:
  2808.         mov     eax, [ebp + panel1_numfiles - panel1_data]
  2809.         dec     eax
  2810.         cmp     [ebp + panel1_index - panel1_data], eax
  2811.         jbe     @f
  2812.         mov     [ebp + panel1_index - panel1_data], eax
  2813. @@:
  2814.         mov     eax, [ebp + panel1_index - panel1_data]
  2815.         cmp     [ebp + panel1_start - panel1_data], eax
  2816.         jbe     @f
  2817.         mov     [ebp + panel1_start - panel1_data], eax
  2818. @@:
  2819.         inc     eax
  2820.         sub     eax, [ebp + panel1_colst - panel1_data]
  2821.         jae     @f
  2822.         xor     eax, eax
  2823. @@:
  2824.         cmp     [ebp + panel1_start - panel1_data], eax
  2825.         jae     @f
  2826.         mov     [ebp + panel1_start - panel1_data], eax
  2827. @@:
  2828.         mov     eax, [ebp + panel1_numfiles - panel1_data]
  2829.         sub     eax, [ebp + panel1_colst - panel1_data]
  2830.         jbe     @f
  2831.         cmp     [ebp + panel1_start - panel1_data], eax
  2832.         jbe     @f
  2833.         mov     [ebp + panel1_start - panel1_data], eax
  2834. @@:
  2835.         jmp     .done_redraw
  2836. .menu:
  2837. ; todo: context menu for plugin panel
  2838.         cmp     [ebp + panel1_hPlugin - panel1_data], 0
  2839.         jz      @f
  2840.         ret
  2841. @@:
  2842. ; display context menu
  2843. ; ignore folders
  2844.         call    get_curfile_folder_entry
  2845.         test    byte [ecx], 10h
  2846.         jz      @f
  2847. .menuret:
  2848.         ret
  2849. @@:
  2850.         call    find_extension
  2851.         jc      .menuret
  2852. ; known extension
  2853. @@:
  2854.         cmp     byte [edi], 0
  2855.         jz      .menuret
  2856.         cmp     byte [edi], ';'
  2857.         jz      @f
  2858.         inc     edi
  2859.         jmp     @b
  2860. @@:
  2861.         inc     edi
  2862. @@:
  2863.         inc     edi
  2864.         cmp     byte [edi-1], ' '
  2865.         jz      @b
  2866.         cmp     byte [edi-1], 9
  2867.         jz      @b
  2868.         dec     edi
  2869.         cmp     byte [edi], 0
  2870.         jz      .menuret
  2871.         mov     ecx, esi
  2872. @@:
  2873.         inc     ecx
  2874.         cmp     byte [ecx-1], 0
  2875.         jnz     @b
  2876.         sub     ecx, esi        ; ecx = ¤«¨­  ¨¬¥­¨ ä ©« +1 = ¤«¨­  § £®«®¢ª +1
  2877.         cmp     ecx, 15
  2878.         jb      @f
  2879.         mov     cl, 15
  2880. @@:
  2881.         xor     edx, edx
  2882.         xor     ebp, ebp
  2883.         push    edx
  2884. .menucreateloop:
  2885.         mov     eax, edi
  2886.         xor     ebx, ebx
  2887. @@:
  2888.         cmp     byte [edi], ','
  2889.         jz      @f
  2890.         cmp     byte [edi], bl
  2891.         jz      @f
  2892.         inc     edi
  2893.         jmp     @b
  2894. @@:
  2895.         xchg    bl, [edi]
  2896.         pushad
  2897.         push    nullstr
  2898.         push    1024
  2899.         push    saved_file_name
  2900.         push    eax
  2901.         push    aMenu
  2902.         push    app_path
  2903.         call    [ini.get_str]
  2904.         popad
  2905.         mov     [edi], bl
  2906.         mov     eax, saved_file_name
  2907. @@:
  2908.         cmp     byte [eax], 0
  2909.         jz      .menucreatecont
  2910.         cmp     byte [eax], ','
  2911.         jz      @f
  2912.         inc     eax
  2913.         jmp     @b
  2914. @@:
  2915.         mov     byte [eax], 0
  2916.         push    eax
  2917.         sub     eax, saved_file_name-1
  2918.         cmp     eax, ecx
  2919.         ja      @f
  2920.         mov     eax, ecx
  2921. @@:
  2922.         xchg    eax, [esp]
  2923.         inc     eax
  2924.         push    eax
  2925. @@:
  2926.         inc     eax
  2927.         cmp     byte [eax-1], 0
  2928.         jnz     @b
  2929.         sub     eax, [esp]
  2930.         add     [esp+4], eax
  2931.         pop     eax eax
  2932.         add     eax, 8
  2933.         add     ebp, eax
  2934.         push    ebp
  2935.         and     ebp, 0xFFF
  2936.         cmp     ebp, eax
  2937.         pop     ebp
  2938.         ja      @f
  2939.         push    eax
  2940.         xchg    edx, [esp+4]
  2941.         push    ecx
  2942.         mov     ecx, ebp
  2943.         call    xpgrealloc
  2944.         pop     ecx
  2945.         pop     edx
  2946.         xchg    edx, [esp]
  2947.         test    eax, eax
  2948.         xchg    eax, [esp]
  2949.         jz      .menucreated
  2950. @@:
  2951.         neg     eax
  2952.         add     eax, ebp
  2953.         add     eax, [esp]
  2954.         and     dword [eax], 0
  2955.         and     dword [eax+4], 0
  2956.         test    edx, edx
  2957.         jz      @f
  2958.         sub     eax, [esp]
  2959.         mov     [edx], eax
  2960.         add     eax, [esp]
  2961.         sub     edx, [esp]
  2962.         mov     [eax+4], edx
  2963. @@:
  2964.         mov     edx, eax
  2965.         push    esi edi
  2966.         mov     esi, saved_file_name
  2967.         lea     edi, [eax+8]
  2968. @@:
  2969.         lodsb
  2970.         stosb
  2971.         test    al, al
  2972.         jnz     @b
  2973.         push    esi
  2974.         sub     esi, saved_file_name
  2975.         sub     esi, ecx
  2976.         jae     .menunoadd
  2977.         neg     esi
  2978. @@:
  2979.         mov     byte [edi-1], ' '
  2980.         stosb
  2981.         dec     esi
  2982.         jnz     @b
  2983. .menunoadd:
  2984.         pop     esi
  2985. @@:
  2986.         lodsb
  2987.         stosb
  2988.         test    al, al
  2989.         jnz     @b
  2990.         pop     edi esi
  2991. .menucreatecont:
  2992.         inc     edi
  2993.         cmp     byte [edi-1], ','
  2994.         jz      .menucreateloop
  2995. .menucreated:
  2996.         test    edx, edx
  2997.         jz      .menuret_free
  2998.         and     dword [edx], 0
  2999.         pop     edx
  3000.         mov     ecx, edx
  3001.         add     [ecx], edx
  3002. @@:
  3003.         mov     ecx, [ecx]
  3004.         cmp     dword [ecx], 0
  3005.         jz      @f
  3006.         add     [ecx], edx
  3007.         add     [ecx+4], edx
  3008.         jmp     @b
  3009. @@:
  3010.         add     [ecx+4], edx
  3011.         push    edx
  3012.         push    1
  3013.         push    esi
  3014.         push    edx
  3015.         call    menu
  3016.         cmp     eax, -1
  3017.         jz      .menuret_free
  3018.         lea     edi, [eax+8]
  3019. @@:
  3020.         inc     edi
  3021.         cmp     byte [edi-1], 0
  3022.         jnz     @b
  3023.         mov     ebp, [active_panel]
  3024.         call    get_curfile_folder_entry
  3025.         call    .run_association2
  3026. .menuret_free:
  3027.         pop     ecx
  3028.         jmp     pgfree
  3029. .f7:
  3030.         mov     dword [CopyDestEditBuf], CopyDestEditBuf.length
  3031.         and     dword [CopyDestEditBuf+4], 0
  3032.         and     dword [CopyDestEditBuf+8], 0
  3033.         mov     byte [CopyDestEditBuf+12], 0
  3034.         mov     ebx, mkdir_dlgdata
  3035.         mov     eax, [cur_width]
  3036.         sub     eax, 12
  3037.         mov     [ebx + dlgtemplate.width], eax
  3038.         dec     eax
  3039.         dec     eax
  3040.         mov     [ebx - mkdir_dlgdata + mkdir_dlgdata.width2], eax
  3041.         shr     eax, 1
  3042.         dec     eax
  3043.         dec     eax
  3044.         mov     [ebx - mkdir_dlgdata + mkdir_dlgdata.cont_x2], eax
  3045.         sub     eax, a_ContinueLength-1
  3046.         mov     [ebx - mkdir_dlgdata + mkdir_dlgdata.cont_x1], eax
  3047.         add     eax, a_ContinueLength+3
  3048.         mov     [ebx - mkdir_dlgdata + mkdir_dlgdata.cnl_x1], eax
  3049.         add     eax, aCancelBLength - 1
  3050.         mov     [ebx - mkdir_dlgdata + mkdir_dlgdata.cnl_x2], eax
  3051.         mov     byte [ebx - mkdir_dlgdata + mkdir_dlgdata.flags0], 0xC
  3052.         and     byte [ebx - mkdir_dlgdata + mkdir_dlgdata.flags1], not 4
  3053.         and     byte [ebx - mkdir_dlgdata + mkdir_dlgdata.flags2], not 4
  3054.         push    ebx
  3055.         call    DialogBox
  3056.         cmp     eax, mkdir_dlgdata.cont_btn
  3057.         jnz     .ret2
  3058.         mov     esi, CopyDestEditBuf+12
  3059.         cmp     byte [esi], 0
  3060.         jz      .ret2
  3061.         cmp     byte [esi], '/'
  3062.         jz      .mkdir_absolute_path
  3063.         push    esi
  3064.         lea     edi, [ebp + panel1_dir - panel1_data]
  3065.         or      ecx, -1
  3066.         xor     eax, eax
  3067.         repnz   scasb
  3068.         not     ecx
  3069.         mov     edi, esi
  3070. @@:
  3071.         cmp     byte [edi+1], 0
  3072.         jz      @f
  3073.         inc     edi
  3074.         jmp     @b
  3075. @@:
  3076.         push    edi
  3077.         add     edi, ecx
  3078.         cmp     edi, CopyDestEditBuf+12+513
  3079.         pop     edi
  3080.         jb      @f
  3081.         pop     esi
  3082.         jmp     .bigfilename
  3083. @@:
  3084.         lea     edx, [edi+2]
  3085.         sub     edx, esi
  3086.         lea     edi, [edi+ecx+1]
  3087.         xchg    ecx, edx
  3088.         std
  3089.         lea     esi, [esi+ecx-1]
  3090.         rep     movsb
  3091.         cld
  3092.         pop     edi
  3093.         lea     esi, [ebp + panel1_dir - panel1_data]
  3094.         push    edi
  3095.         mov     ecx, edx
  3096.         rep     movsb
  3097.         mov     byte [edi-1], '/'
  3098.         pop     esi
  3099. .mkdir_absolute_path:
  3100.         push    RetryOrCancelBtn
  3101.         push    2
  3102.         call    makedir
  3103.         jmp     .copydone
  3104. .change_mode:
  3105.         dec     eax
  3106.         mov     [ebp + panel1_colmode - panel1_data], eax
  3107.         call    calc_colwidths
  3108.         jmp     draw_panel
  3109. .quick_jump:
  3110.         dec     eax
  3111.         cmp     al, 10
  3112.         jnz     @f
  3113.         xor     eax, eax
  3114. @@:
  3115.         mov     eax, [FolderShortcuts+eax*4]
  3116.         test    eax, eax
  3117.         jnz     @f
  3118.         ret
  3119. @@:
  3120.         push    eax
  3121.         call    close_plugin_panels
  3122.         lea     esi, [ebp + panel1_dir - panel1_data]
  3123.         push    esi
  3124.         mov     edi, prev_dir
  3125. @@:
  3126.         lodsb
  3127.         stosb
  3128.         test    al, al
  3129.         jnz     @b
  3130.         pop     edi esi
  3131. @@:
  3132.         lodsb
  3133.         stosb
  3134.         test    al, al
  3135.         jnz     @b
  3136.         jmp     .reread
  3137. .greyplus:
  3138.         push    0
  3139.         mov     ecx, aSelect
  3140.         jmp     @f
  3141. .greyminus:
  3142.         push    1
  3143.         mov     ecx, aDeselect
  3144. @@:
  3145.         mov     eax, mark_dlgdata
  3146.         mov     [eax+mark_dlgdata.title-mark_dlgdata], ecx
  3147.         mov     [eax+mark_dlgdata.flags-mark_dlgdata], 0xC
  3148.         mov     edi, enter_string_buf+12
  3149.         mov     dword [edi-12], 512
  3150.         mov     dword [edi-8], 1
  3151.         and     dword [edi-4], 0
  3152.         mov     word [edi], '*'
  3153.         push    eax
  3154.         call    DialogBox
  3155.         inc     eax
  3156.         jnz     @f
  3157. .noselect:
  3158.         pop     eax
  3159.         ret
  3160. @@:
  3161.         xor     eax, eax
  3162.         mov     esi, edi
  3163. @@:
  3164.         lodsb
  3165.         mov     al, [tolower_table+eax]
  3166.         mov     [esi-1], al
  3167.         test    al, al
  3168.         jnz     @b
  3169. @@:
  3170.         mov     ecx, [ebp + panel1_numfiles - panel1_data]
  3171.         mov     ebx, [ebp + panel1_files - panel1_data]
  3172.         jecxz   .noselect
  3173.         mov     eax, [ebx]
  3174.         cmp     word [eax+40], '..'
  3175.         jnz     .selectloop
  3176.         cmp     byte [eax+42], 0
  3177.         jnz     .selectloop
  3178.         dec     ecx
  3179.         jz      .noselect
  3180.         add     ebx, 4
  3181. .selectloop:
  3182.         xor     eax, eax
  3183.         mov     esi, [ebx]
  3184.         add     esi, 40
  3185.         mov     edx, lower_file_name-1
  3186. @@:
  3187.         lodsb
  3188.         inc     edx
  3189.         mov     al, [tolower_table+eax]
  3190.         mov     [edx], al
  3191.         test    al, al
  3192.         jnz     @b
  3193.         mov     esi, lower_file_name
  3194.         call    match_mask_rev_lowercase
  3195.         jc      @f
  3196.         mov     esi, [ebx]
  3197.         mov     eax, [esi+32]
  3198.         cmp     byte [esp], 0
  3199.         jz      .doselect
  3200.         test    byte [esi+303], 1
  3201.         jz      @f
  3202.         and     byte [esi+303], not 1
  3203.         sub     dword [ebp + panel1_selected_size - panel1_data], eax
  3204.         mov     eax, [esi+36]
  3205.         sbb     dword [ebp + panel1_selected_size+4 - panel1_data], eax
  3206.         dec     dword [ebp + panel1_selected_num - panel1_data]
  3207.         jmp     @f
  3208. .doselect:
  3209.         test    byte [esi+303], 1
  3210.         jnz     @f
  3211.         or      byte [esi+303], 1
  3212.         add     dword [ebp + panel1_selected_size - panel1_data], eax
  3213.         mov     eax, [esi+36]
  3214.         adc     dword [ebp + panel1_selected_size+4 - panel1_data], eax
  3215.         inc     dword [ebp + panel1_selected_num - panel1_data]
  3216. @@:
  3217.         add     ebx, 4
  3218.         dec     ecx
  3219.         jnz     .selectloop
  3220.         pop     eax
  3221.         jmp     .done_redraw
  3222. .greyasterisk:
  3223.         mov     ecx, [ebp + panel1_numfiles - panel1_data]
  3224.         mov     esi, [ebp + panel1_files - panel1_data]
  3225.         jecxz   .galoopdone
  3226. .galoop:
  3227.         lodsd
  3228.         cmp     word [eax+40], '..'
  3229.         jnz     @f
  3230.         cmp     byte [eax+42], 0
  3231.         jz      .gacont
  3232. @@:
  3233.         xor     byte [eax+303], 1
  3234.         mov     edx, [eax+32]
  3235.         test    byte [eax+303], 1
  3236.         jz      .gadel
  3237.         add     dword [ebp + panel1_selected_size - panel1_data], edx
  3238.         mov     edx, [eax+36]
  3239.         adc     dword [ebp + panel1_selected_size+4 - panel1_data], edx
  3240.         inc     dword [ebp + panel1_selected_num - panel1_data]
  3241.         jmp     .gacont
  3242. .gadel:
  3243.         sub     dword [ebp + panel1_selected_size - panel1_data], edx
  3244.         mov     edx, [eax+36]
  3245.         sbb     dword [ebp + panel1_selected_size+4 - panel1_data], edx
  3246.         dec     dword [ebp + panel1_selected_num - panel1_data]
  3247. .gacont:
  3248.         loop    .galoop
  3249. .galoopdone:
  3250.         jmp     .done_redraw
  3251.  
  3252. @@:
  3253.         call    close_plugin_panel
  3254. close_plugin_panels:
  3255.         cmp     [ebp + panel1_hPlugin - panel1_data], 0
  3256.         jnz     @b
  3257.         ret
  3258.  
  3259. close_plugin_panel:
  3260. ; close plugin and restore old directory
  3261.         mov     esi, [ebp + panel1_parents - panel1_data]
  3262.         add     esi, [ebp + panel1_parents_sz - panel1_data]
  3263. @@:
  3264.         dec     esi
  3265.         cmp     byte [esi-1], 0
  3266.         jnz     @b
  3267.         push    esi
  3268.         lea     edi, [ebp + panel1_dir - panel1_data]
  3269. @@:
  3270.         lodsb
  3271.         stosb
  3272.         test    al, al
  3273.         jnz     @b
  3274.         pop     esi
  3275.         sub     esi, 9
  3276.         mov     edx, [esi]      ; hPlugin
  3277.         mov     ebx, [esi+4]    ; hFile
  3278.         sub     esi, [ebp + panel1_parents - panel1_data]
  3279.         mov     [ebp + panel1_parents_sz - panel1_data], esi
  3280.         xchg    edx, [ebp + panel1_hPlugin - panel1_data]
  3281.         xchg    ebx, [ebp + panel1_hFile - panel1_data]
  3282.         push    edx ebx
  3283.         lea     ebx, [ebp + panel1_plugin_info - panel1_data]
  3284.         and     dword [ebx], 0
  3285.         mov     eax, [ebp + panel1_hPlugin - panel1_data]
  3286.         test    eax, eax
  3287.         jz      @f
  3288.         push    ebp
  3289.         push    ebx
  3290.         push    [ebp + panel1_hFile - panel1_data]
  3291.         call    [eax+PluginInfo.GetOpenPluginInfo]
  3292.         pop     ebp
  3293. @@:
  3294.         pop     ebx edx
  3295.  
  3296. close_handle_if_unused:
  3297. ; edx=hPlugin, ebx=hFile
  3298.         push    ebp
  3299.         xor     ecx, ecx
  3300. @@:
  3301.         mov     eax, [screens]
  3302.         mov     ebp, [eax+ecx*8+4]
  3303.         mov     eax, [eax+ecx*8]
  3304.         call    [eax+screen_vtable.IsHandleUsed]
  3305.         jz      .used
  3306.         inc     ecx
  3307.         cmp     ecx, [num_screens]
  3308.         jb      @b
  3309.         push    ebx
  3310.         call    [edx+PluginInfo.ClosePlugin]
  3311. .used:
  3312.         pop     ebp
  3313.         ret
  3314.  
  3315. panels_IsHandleUsed:
  3316. ; edx=hPlugin, ebx=hFile
  3317.         mov     ebp, panel1_data
  3318.         call    .1
  3319.         jz      .ret
  3320.         mov     ebp, panel2_data
  3321.  
  3322. .1:
  3323.         cmp     edx, [ebp+panel1_hPlugin-panel1_data]
  3324.         jnz     @f
  3325.         cmp     ebx, [ebp+panel1_hFile-panel1_data]
  3326.         jz      .ret
  3327. @@:
  3328.         mov     esi, [ebp + panel1_parents_sz - panel1_data]
  3329.         test    esi, esi
  3330.         jnz     @f
  3331.         inc     esi
  3332. .ret:
  3333.         ret
  3334. @@:
  3335.         add     esi, [ebp + panel1_parents - panel1_data]
  3336. @@:
  3337.         dec     esi
  3338.         cmp     byte [esi-1], 0
  3339.         jnz     @b
  3340.         sub     esi, 9
  3341.         cmp     edx, [esi]      ; hPlugin
  3342.         jnz     .no
  3343.         mov     ebx, [esi+4]    ; hFile
  3344.         jz      .ret
  3345. .no:
  3346.         cmp     esi, [ebp + panel1_parents - panel1_data]
  3347.         jnz     @b
  3348.         inc     esi
  3349.         ret
  3350.  
  3351. panels_OnExit:
  3352. ; close plugin panels
  3353.         mov     ebp, panel1_data
  3354.         call    close_plugin_panels
  3355.         mov     ebp, panel2_data
  3356.         call    close_plugin_panels
  3357.         ret
  3358.  
  3359. panels_OnRedraw:
  3360.         or      [cursor_x], -1
  3361.         or      [cursor_y], -1
  3362.         call    draw_cmdbar
  3363.         mov     ebp, panel1_data
  3364.         call    calc_colwidths
  3365.         call    draw_panel
  3366.         mov     ebp, panel2_data
  3367.         call    calc_colwidths
  3368.         call    draw_panel
  3369.         ret
  3370.  
  3371. init_console:
  3372.         mov     ecx, [console_data_ptr]
  3373.         call    pgfree
  3374.         mov     eax, [cur_width]
  3375.         mul     [cur_height]
  3376.         mov     ecx, eax
  3377.         push    ecx
  3378.         shl     ecx, 2
  3379.         call    pgalloc
  3380.         pop     ecx
  3381.         test    eax, eax
  3382.         jz      exit
  3383.         mov     [console_data_ptr], eax
  3384.         mov     edi, eax
  3385.         mov     ax, 0720h
  3386.         rep     stosw
  3387.         mov     [panel1_left], ecx
  3388.         mov     [panel1_top], ecx
  3389.         mov     [panel2_top], ecx
  3390.         mov     eax, [cur_width]
  3391.         inc     eax
  3392.         shr     eax, 1
  3393.         mov     [panel1_width], eax
  3394.         mov     [panel2_left], eax
  3395.         sub     eax, [cur_width]
  3396.         neg     eax
  3397.         mov     [panel2_width], eax
  3398.         mov     eax, [cur_height]
  3399.         dec     eax
  3400.         dec     eax
  3401.         mov     [panel1_height], eax
  3402.         mov     [panel2_height], eax
  3403.         ret
  3404.  
  3405. get_curfile_folder_entry:
  3406.         mov     ecx, [ebp + panel1_index - panel1_data]
  3407.         shl     ecx, 2
  3408.         add     ecx, [ebp + panel1_files - panel1_data]
  3409.         mov     ecx, [ecx]
  3410.         ret
  3411. get_curfile_name:
  3412.         call    get_curfile_folder_entry
  3413.         add     ecx, 40
  3414.         ret
  3415.  
  3416. quick_find:
  3417.         cmp     [ebp + panel1_numfiles - panel1_data], 0
  3418.         jz      .nof
  3419.         mov     ecx, [ebp + panel1_index - panel1_data]
  3420. .scanloop:
  3421.         mov     edi, ecx
  3422.         shl     edi, 2
  3423.         add     edi, [ebp + panel1_files - panel1_data]
  3424.         mov     edi, [edi]
  3425.         add     edi, 40
  3426.         mov     esi, quick_search_buf + 12
  3427. @@:
  3428.         lodsb
  3429.         test    al, al
  3430.         jz      .ok
  3431.         call    match_symbol
  3432.         jnz     .no
  3433.         inc     edi
  3434.         jmp     @b
  3435. .no:
  3436.         inc     ecx
  3437.         cmp     ecx, [ebp + panel1_numfiles - panel1_data]
  3438.         jb      @f
  3439.         xor     ecx, ecx
  3440. @@:
  3441.         cmp     ecx, [ebp + panel1_index - panel1_data]
  3442.         jnz     .scanloop
  3443. .nof:
  3444.         stc
  3445.         ret
  3446. .ok:
  3447.         cmp     ecx, [ebp + panel1_index - panel1_data]
  3448.         jz      .ret
  3449.         mov     [ebp + panel1_index - panel1_data], ecx
  3450.         mov     eax, [ebp + panel1_height - panel1_data]
  3451.         shr     eax, 1
  3452.         sub     ecx, eax
  3453.         jae     @f
  3454.         xor     ecx, ecx
  3455. @@:
  3456.         mov     eax, [ebp + panel1_numfiles - panel1_data]
  3457.         sub     eax, [ebp + panel1_colst - panel1_data]
  3458.         jnc     @f
  3459.         xor     eax, eax
  3460.         xor     ecx, ecx
  3461. @@:
  3462.         cmp     ecx, eax
  3463.         jb      @f
  3464.         mov     ecx, eax
  3465. @@:
  3466.         mov     [ebp + panel1_start - panel1_data], ecx
  3467.         call    draw_panel
  3468. .ret:
  3469.         clc
  3470.         ret
  3471.  
  3472. quick_find_next:
  3473.         cmp     [ebp + panel1_numfiles - panel1_data], 0
  3474.         jz      quick_find.nof
  3475.         mov     ecx, [ebp + panel1_index - panel1_data]
  3476.         jmp     quick_find.no
  3477.  
  3478. quick_find_prev:
  3479.         cmp     [ebp + panel1_numfiles - panel1_data], 0
  3480.         jz      quick_find.nof
  3481.         mov     ecx, [ebp + panel1_index - panel1_data]
  3482. .scanloop:
  3483.         dec     ecx
  3484.         jns     @f
  3485.         mov     ecx, [ebp + panel1_numfiles - panel1_data]
  3486.         dec     ecx
  3487. @@:
  3488.         cmp     ecx, [ebp + panel1_index - panel1_data]
  3489.         jz      quick_find.nof
  3490.         mov     edi, ecx
  3491.         shl     edi, 2
  3492.         add     edi, [ebp + panel1_files - panel1_data]
  3493.         mov     edi, [edi]
  3494.         add     edi, 40
  3495.         mov     esi, quick_search_buf + 12
  3496. @@:
  3497.         lodsb
  3498.         test    al, al
  3499.         jz      quick_find.ok
  3500.         call    match_symbol
  3501.         jnz     .scanloop
  3502.         inc     edi
  3503.         jmp     @b
  3504.  
  3505. panels_getname:
  3506. if lang eq ru
  3507.         mov     eax, ' ­¥'
  3508.         stosd
  3509.         mov     eax, '«¨  '
  3510.         stosd
  3511.         mov     eax, '    '
  3512.         stosd
  3513.         stosb
  3514. else
  3515.         mov     eax, 'Pane'
  3516.         stosd
  3517.         mov     eax, 'ls  '
  3518.         stosd
  3519.         mov     eax, '    '
  3520.         stosd
  3521.         stosb
  3522. end if
  3523.         sub     ecx, 13
  3524.         mov     ebp, [active_panel]
  3525.         push    3
  3526.         pop     edx
  3527.         cmp     [ebp + panel1_hPlugin - panel1_data], 0
  3528.         jz      .native
  3529.         mov     esi, [ebp + panel1_parents - panel1_data]
  3530.         add     esi, [ebp + panel1_parents_sz - panel1_data]
  3531. @@:
  3532.         dec     esi
  3533.         cmp     byte [esi-1], 0
  3534.         jz      @f
  3535.         cmp     byte [esi-1], '/'
  3536.         jnz     @b
  3537. @@:
  3538.         push    ecx edi
  3539.         shr     ecx, 1
  3540. @@:
  3541.         lodsb
  3542.         test    al, al
  3543.         jz      @f
  3544.         stosb
  3545.         loop    @b
  3546. @@:
  3547.         sub     edi, [esp]
  3548.         sub     [esp+4], edi
  3549.         add     [esp], edi
  3550.         pop     edi ecx
  3551.         lea     esi, [ebp + panel1_dir - panel1_data]
  3552.         cmp     byte [esi+1], 0
  3553.         jnz     @f
  3554.         inc     esi
  3555. @@:
  3556.         jmp     .main
  3557. .native:
  3558.         lea     esi, [ebp + panel1_dir - panel1_data]
  3559. @@:
  3560.         lodsb
  3561.         stosb
  3562.         dec     ecx
  3563.         test    al, al
  3564.         jz      @f
  3565.         cmp     al, '/'
  3566.         jnz     @b
  3567.         dec     edx
  3568.         jnz     @b
  3569. @@:
  3570.         test    al, al
  3571.         jnz     @f
  3572.         dec     esi
  3573.         dec     edi
  3574. @@:
  3575. .main:
  3576.         push    esi
  3577. @@:
  3578.         lodsb
  3579.         test    al, al
  3580.         jnz     @b
  3581.         dec     esi
  3582.         mov     ebx, esi
  3583.         sub     ebx, [esp]
  3584.         dec     esi
  3585.         push    esi
  3586.         mov     esi, [ebp + panel1_index - panel1_data]
  3587.         shl     esi, 2
  3588.         add     esi, [ebp + panel1_files - panel1_data]
  3589.         mov     esi, [esi]
  3590.         add     esi, 40
  3591.         push    esi
  3592. @@:
  3593.         lodsb
  3594.         test    al, al
  3595.         jnz     @b
  3596.         add     ebx, esi
  3597.         sub     ebx, [esp]
  3598.         dec     esi
  3599.         cmp     ebx, ecx
  3600.         jbe     @f
  3601.         mov     al, '.'
  3602.         stosb
  3603.         stosb
  3604.         stosb
  3605.         sub     ecx, 3
  3606.         mov     ebx, ecx
  3607. @@:
  3608.         add     edi, ebx
  3609.         inc     ecx
  3610.         std
  3611. @@:
  3612.         movsb
  3613.         dec     ecx
  3614.         jz      .nodir
  3615.         cmp     esi, [esp]
  3616.         jae     @b
  3617.         mov     esi, [esp+4]
  3618.         mov     al, '/'
  3619.         stosb
  3620.         dec     ecx
  3621.         jz      .nodir
  3622. @@:
  3623.         cmp     esi, [esp+8]
  3624.         jb      .nodir
  3625.         movsb
  3626.         loop    @b
  3627. .nodir:
  3628.         cld
  3629.         pop     eax
  3630.         pop     eax
  3631.         pop     eax
  3632.         ret
  3633.  
  3634. draw_window:
  3635.         push    12
  3636.         pop     eax
  3637.         push    1
  3638.         pop     ebx
  3639.         int     40h
  3640.         mov     al, 48
  3641.         mov     bl, 4
  3642.         int     40h
  3643.         mov     [skinh], eax
  3644.         mov     ebx, [cur_width]
  3645.         imul    ebx, font_width
  3646.         add     ebx, 100*65536 + 5*2-1
  3647.         mov     ecx, [cur_height]
  3648.         imul    ecx, font_height
  3649.         lea     ecx, [eax+ecx+5-1+100*65536]
  3650.         xor     eax, eax
  3651.         mov     edx, 0x53000000
  3652.         mov     edi, header
  3653.         int     40h
  3654.         mov     al, 13
  3655.         xor     edx, edx
  3656.         cmp     [fill_width], 0
  3657.         jz      @f
  3658.         mov     ebx, [wnd_width]
  3659.         sub     ebx, [fill_width]
  3660.         sub     ebx, 5-1
  3661.         shl     ebx, 16
  3662.         mov     bx, word [fill_width]
  3663.         mov     ecx, [skinh-2]
  3664.         mov     cx, word [wnd_height]
  3665.         sub     cx, word [skinh]
  3666.         sub     cx, 5-1
  3667.         int     0x40
  3668. @@:
  3669.         cmp     [fill_height], 0
  3670.         jz      @f
  3671.         xor     edx, edx
  3672.         mov     ebx, 50000h
  3673.         mov     bx, word [wnd_width]
  3674.         sub     ebx, 9
  3675.         mov     ecx, [wnd_height]
  3676.         sub     ecx, [fill_height]
  3677.         sub     ecx, 5-1
  3678.         shl     ecx, 16
  3679.         mov     cx, word [fill_height]
  3680.         int     0x40
  3681. @@:
  3682. ;        xor     ecx, ecx
  3683. ;        call    draw_image
  3684.         mov     al, 65
  3685.         mov     ebx, [MemForImage]
  3686.         test    ebx, ebx
  3687.         jz      @f
  3688.         mov     ecx, [cur_width]
  3689.         imul    ecx, font_width*10000h
  3690.         mov     cx, word [cur_height]
  3691.         imul    cx, font_height
  3692.         mov     edx, [skinh]
  3693.         add     edx, 5*10000h
  3694.         mov     esi, 8
  3695.         mov     edi, console_colors
  3696.         xor     ebp, ebp
  3697.         int     0x40
  3698. @@:
  3699.         mov     al, 12
  3700.         push    2
  3701.         pop     ebx
  3702.         int     40h
  3703.         ret
  3704.  
  3705. draw_image.nomem:
  3706.         mov     al, 13
  3707.         xor     edx, edx
  3708.         mov     ebx, [cur_width]
  3709.         imul    ebx, font_width
  3710.         add     ebx, 5*65536
  3711.         mov     ecx, [skinh-2]
  3712.         mov     cx, word [cur_height]
  3713.         imul    cx, font_height
  3714.         int     40h
  3715.         mov     al, 4
  3716.         mov     ebx, 32*65536+32
  3717.         mov     ecx, 0xFFFFFF
  3718.         mov     edx, nomem_draw
  3719.         push    nomem_draw.size
  3720.         pop     esi
  3721.         int     40h
  3722.         ret
  3723.  
  3724. draw_image:
  3725.         mov     [bMemForImageValidData], byte 1
  3726.         cmp     [MemForImage], 0
  3727.         jnz     .allocated
  3728. ; allocate memory for image
  3729.         mov     ecx, [cur_width]
  3730.         imul    ecx, [cur_height]
  3731.         imul    ecx, font_width*font_height
  3732.         call    pgalloc
  3733.         test    eax, eax
  3734.         jz      draw_image.nomem
  3735.         mov     [MemForImage], eax
  3736.         mov     [bMemForImageValidData], byte 0
  3737. .allocated:
  3738.         push    ebp
  3739.         and     [max_x], 0
  3740.         or      [min_x], -1
  3741.         and     [max_y], 0
  3742.         or      [min_y], -1
  3743.         mov     eax, [cursor_y]
  3744.         mul     [cur_width]
  3745.         add     eax, [cursor_x]
  3746.         add     eax, eax
  3747.         add     eax, [console_data_ptr]
  3748.         xchg    [cur_cursor_pos], eax
  3749.         mov     [old_cursor_pos], eax
  3750.         mov     edi, [MemForImage]
  3751.         mov     esi, [console_data_ptr]
  3752.         mov     ecx, [cur_height]
  3753. .lh:
  3754.         push    ecx
  3755.         mov     ecx, [cur_width]
  3756. .lw:
  3757.         push    ecx
  3758.         mov     eax, [cur_width]
  3759.         imul    eax, [cur_height]
  3760.         mov     ebx, [esi]
  3761.         cmp     [bMemForImageValidData], 0
  3762.         jz      @f
  3763.         cmp     esi, [cur_cursor_pos]
  3764.         jz      @f
  3765.         cmp     esi, [old_cursor_pos]
  3766.         jz      @f
  3767.         cmp     bx, [eax*2+esi]
  3768.         jnz     @f
  3769.         inc     esi
  3770.         inc     esi
  3771.         jmp     .skip_symbol
  3772. @@:
  3773.         mov     [eax*2+esi], bx
  3774.         cmp     ecx, [min_x]
  3775.         ja      @f
  3776.         mov     [min_x], ecx
  3777. @@:
  3778.         cmp     ecx, [max_x]
  3779.         jb      @f
  3780.         mov     [max_x], ecx
  3781. @@:
  3782.         mov     eax, [esp+4]
  3783.         mov     [min_y], eax
  3784.         cmp     eax, [max_y]
  3785.         jb      @f
  3786.         mov     [max_y], eax
  3787. @@:
  3788.         push    edi
  3789.         xor     eax, eax
  3790.         mov     al, [esi+1]
  3791.         and     al, 0xF
  3792.         mov     ebx, eax
  3793.         mov     al, [esi+1]
  3794.         shr     al, 4
  3795.         mov     ebp, eax
  3796.         sub     ebx, ebp
  3797.         lodsb
  3798.         inc     esi
  3799. if font_width > 8
  3800.         lea     edx, [eax+eax+font]
  3801. else
  3802.         lea     edx, [eax+font]
  3803. end if
  3804. .sh:
  3805.         mov     ecx, [edx]
  3806. repeat font_width
  3807.         shr     ecx, 1
  3808.         sbb     eax, eax
  3809.         and     eax, ebx
  3810.         add     eax, ebp
  3811.         mov     [edi+%-1], al
  3812. end repeat
  3813.         mov     eax, [cur_width]
  3814. ;        imul    eax, font_width
  3815. ;        add     edi, eax
  3816. if font_width = 6
  3817.         lea     eax, [eax*2+eax]
  3818.         lea     edi, [edi+eax*2]
  3819. else if font_width = 7
  3820.         lea     edi, [edi+eax*8]
  3821.         sub     edi, eax
  3822. else if font_width = 8
  3823.         lea     edi, [edi+eax*8]
  3824. else if font_width = 9
  3825.         lea     edi, [edi+eax*8]
  3826.         add     edi, eax
  3827. else if font_width = 10
  3828.         lea     eax, [eax*4+eax]
  3829.         lea     edi, [edi+eax*2]
  3830. else
  3831. Unknown font_width value!
  3832. end if
  3833. if font_width > 8
  3834.         add     edx, 256*2
  3835.         cmp     edx, font+256*2*font_height
  3836. else
  3837.         add     edx, 256
  3838.         cmp     edx, font+256*font_height
  3839. end if
  3840.         jb      .sh
  3841.         pop     edi
  3842. .skip_symbol:
  3843.         pop     ecx
  3844.         add     edi, font_width
  3845.         dec     ecx
  3846.         jnz     .lw
  3847.         mov     eax, [cur_width]
  3848.         imul    eax, (font_height-1)*font_width
  3849.         add     edi, eax
  3850.         pop     ecx
  3851.         dec     ecx
  3852.         jnz     .lh
  3853. ; cursor
  3854.         mov     eax, [cursor_y]
  3855.         inc     eax
  3856.         jz      .nocursor
  3857.         mul     [cur_width]
  3858.         imul    eax, font_height*font_width
  3859.         mov     edx, [cursor_x]
  3860.         inc     edx
  3861.         imul    edx, font_width
  3862.         add     eax, edx
  3863.         add     eax, [MemForImage]
  3864.         mov     edx, [cur_width]
  3865.         imul    edx, font_width
  3866.         neg     edx
  3867.         mov     ecx, [cursor_size]
  3868. .cursor_loop:
  3869.         push    ecx
  3870.         mov     ecx, font_width
  3871.         add     eax, edx
  3872.         push    eax
  3873. @@:
  3874. ;;        add     byte [eax-1], 0x10
  3875.         xor     byte [eax-1], 7
  3876.         sub     eax, 1
  3877.         loop    @b
  3878.         pop     eax
  3879.         pop     ecx
  3880.         loop    .cursor_loop
  3881. .nocursor:
  3882.         cmp     [min_y], -1
  3883.         jz      .nodraw
  3884.         mov     ecx, [cur_width]
  3885.         mov     ebx, [cur_height]
  3886.         mov     eax, ebx
  3887.         sub     ebx, [max_y]
  3888.         sub     eax, [min_y]
  3889.         sub     eax, ebx
  3890.         inc     eax
  3891.         imul    ebp, eax, font_height
  3892.         mov     edx, ecx
  3893.         sub     edx, [max_x]
  3894.         imul    edx, font_width
  3895.         mov     eax, edx
  3896.         shl     edx, 16
  3897.         imul    dx, bx, font_height
  3898.         imul    ebx, [cur_width]
  3899.         mov     ecx, [max_x]
  3900.         sub     ecx, [min_x]
  3901.         inc     ecx
  3902.         imul    ecx, font_width*10000h
  3903.         add     ecx, ebp
  3904.         imul    ebx, font_width*font_height
  3905.         add     ebx, [MemForImage]
  3906.         add     ebx, eax
  3907.         add     edx, [skinh]
  3908.         add     edx, 5*10000h
  3909.         imul    esi, [cur_width], font_width
  3910.         mov     ebp, ecx
  3911.         shr     ebp, 16
  3912.         sub     esi, ebp
  3913.         mov     ebp, esi
  3914.         push    65
  3915.         pop     eax
  3916.         mov     edi, console_colors
  3917.         push    8
  3918.         pop     esi
  3919.         int     40h
  3920. .nodraw:
  3921.         pop     ebp
  3922.         ret
  3923.  
  3924. get_console_ptr:
  3925. ; in: eax=x, edx=y
  3926. ; out: edi->console data
  3927.         push    edx
  3928.         imul    edx, [cur_width]
  3929.         add     edx, eax
  3930.         mov     edi, [console_data_ptr]
  3931.         lea     edi, [edi + edx*2]
  3932.         pop     edx
  3933.         ret
  3934.  
  3935. draw_keybar:
  3936.         pushad
  3937.         xor     eax, eax
  3938.         test    [ctrlstate], 3
  3939.         jz      @f
  3940.         inc     eax
  3941. @@:
  3942.         test    [ctrlstate], 0xC
  3943.         jz      @f
  3944.         or      al, 2
  3945. @@:
  3946.         test    [ctrlstate], 0x30
  3947.         jz      @f
  3948.         or      al, 4
  3949. @@:
  3950.         imul    eax, 6*12
  3951.         mov     esi, [active_screen_keybar]
  3952.         add     esi, eax
  3953.         xor     ecx, ecx
  3954.         inc     ecx
  3955.         xor     eax, eax
  3956.         mov     edx, [cur_height]
  3957.         dec     edx
  3958.         call    get_console_ptr
  3959.         push    6
  3960.         pop     ebx
  3961.         mov     eax, [cur_width]
  3962.         sub     eax, 11+9+3*2+6
  3963.         cmp     eax, 7*11
  3964.         jl      @f
  3965.         cdq
  3966.         mov     bl, 11
  3967.         div     ebx
  3968.         mov     ebx, eax
  3969. @@:
  3970.         xor     edx, edx
  3971. .l:
  3972.         add     edx, 7
  3973.         cmp     cl, 10
  3974.         jb      @f
  3975.         inc     edx
  3976. @@:
  3977.         cmp     edx, [cur_width]
  3978.         ja      .ret
  3979.         cmp     cl, 10
  3980.         jae     .twodig
  3981.         lea     eax, [ecx+'0']
  3982.         stosb
  3983.         mov     al, [keybar_number_color]
  3984.         stosb
  3985.         jmp     .cmn
  3986. .twodig:
  3987.         mov     al, cl
  3988.         cbw
  3989.         div     [_10]
  3990.         add     al, '0'
  3991.         stosb
  3992.         mov     al, [keybar_number_color]
  3993.         stosb
  3994.         xchg    al, ah
  3995.         add     al, '0'
  3996.         stosw
  3997. .cmn:
  3998.         mov     ah, [keybar_name_color]
  3999.         push    ecx
  4000.         mov     cl, 6
  4001. @@:
  4002.         lodsb
  4003.         stosw
  4004.         loop    @b
  4005.         mov     al, ' '
  4006.         lea     ecx, [ebx-6]
  4007.         cmp     byte [esp], 12
  4008.         jz      .ret_pop
  4009.         add     edx, ecx
  4010.         rep     stosw
  4011.         pop     ecx
  4012.         inc     edx
  4013.         cmp     edx, [cur_width]
  4014.         ja      .ret
  4015.         mov     ah, [keybar_bgr_color]
  4016.         stosw
  4017.         inc     ecx
  4018.         jmp     .l
  4019. .ret_pop:
  4020.         pop     ecx
  4021. .ret:
  4022.         cmp     byte [edi-2], ' '
  4023.         jnz     @f
  4024.         dec     edi
  4025.         dec     edi
  4026. @@:
  4027.         push    edi
  4028.         xor     eax, eax
  4029.         mov     edx, [cur_height]
  4030.         call    get_console_ptr
  4031.         mov     ecx, edi
  4032.         pop     edi
  4033.         sub     ecx, edi
  4034.         shr     ecx, 1
  4035.         mov     al, ' '
  4036.         mov     ah, [keybar_name_color]
  4037.         rep     stosw
  4038. .done:
  4039.         cmp     [bDisplayQuickSearch], 0
  4040.         jz      @f
  4041.         push    QuickSearchDlg
  4042.         call    DrawDialogBox
  4043. @@:
  4044.         popad
  4045.         ret
  4046.  
  4047. draw_cmdbar:
  4048.         mov     esi, [active_panel]
  4049.         add     esi, panel1_dir - panel1_data
  4050.         xor     eax, eax
  4051.         mov     edx, [cur_height]
  4052.         dec     edx
  4053.         dec     edx
  4054.         call    get_console_ptr
  4055.         mov     ah, [cmdbar_prefix_color]
  4056.         mov     ecx, [cur_width]
  4057.         dec     ecx
  4058. @@:
  4059.         lodsb
  4060.         test    al, al
  4061.         jz      @f
  4062.         stosw
  4063.         loop    @b
  4064. @@:
  4065.         mov     al, '>'
  4066.         stosw
  4067.         mov     al, ' '
  4068.         mov     ah, [cmdbar_normal_color]
  4069.         rep     stosw
  4070.         ret
  4071.  
  4072. draw_border:
  4073.         push    edi
  4074.         mov     al, 0xC9
  4075.         stosw
  4076.         mov     al, 0xCD
  4077.         lea     ecx, [ebx-2]
  4078.         rep     stosw
  4079.         mov     al, 0xBB
  4080.         stosw
  4081.         pop     edi
  4082.         add     edi, [cur_width]
  4083.         add     edi, [cur_width]
  4084.         lea     ecx, [edx-2]
  4085. .l:
  4086.         push    edi
  4087.         mov     al, 0xBA
  4088.         stosw
  4089.         mov     al, 0x20
  4090.         push    ecx
  4091.         lea     ecx, [ebx-2]
  4092.         rep     stosw
  4093.         pop     ecx
  4094.         mov     al, 0xBA
  4095.         stosw
  4096.         pop     edi
  4097.         add     edi, [cur_width]
  4098.         add     edi, [cur_width]
  4099.         loop    .l
  4100.         mov     al, 0xC8
  4101.         stosw
  4102.         mov     al, 0xCD
  4103.         lea     ecx, [ebx-2]
  4104.         rep     stosw
  4105.         mov     al, 0xBC
  4106.         stosw
  4107.         ret
  4108.  
  4109. calc_colwidths:
  4110. ; in: ebp->panel data
  4111.         imul    esi, [ebp + panel1_colmode - panel1_data], PanelMode.size
  4112.         add     esi, colmodes
  4113.         lodsd
  4114.         mov     ecx, eax
  4115.         lea     edx, [ecx-1]
  4116.         xor     ebx, ebx
  4117.         add     esi, PanelMode.ColumnWidths-4
  4118.         push    ecx esi
  4119.         xor     eax, eax
  4120. .loop:
  4121.         lodsb
  4122.         add     edx, eax
  4123.         cmp     al, 1
  4124.         adc     ebx, 0
  4125.         loop    .loop
  4126.         pop     esi ecx
  4127.         lea     edi, [ebp + panel1_colwidths - panel1_data]
  4128.         test    ebx, ebx
  4129.         jz      .loop2
  4130.         mov     eax, [ebp + panel1_width - panel1_data]
  4131.         dec     eax
  4132.         dec     eax
  4133.         sub     eax, edx
  4134.         jae     @f
  4135.         xor     eax, eax
  4136. @@:
  4137.         xor     edx, edx
  4138.         div     ebx
  4139.         test    eax, eax
  4140.         jnz     @f
  4141.         xor     edx, edx
  4142.         inc     eax
  4143. @@:
  4144.         push    eax
  4145. .loop2:
  4146.         movzx   eax, byte [esi]
  4147.         inc     esi
  4148.         test    eax, eax
  4149.         jnz     @f
  4150.         pop     eax
  4151.         push    eax
  4152.         dec     ebx
  4153.         cmp     ebx, edx
  4154.         jae     @f
  4155.         inc     eax
  4156. @@:
  4157.         stosd
  4158.         loop    .loop2
  4159.         pop     eax
  4160.         and     dword [edi], 0
  4161.         ret
  4162.  
  4163. GetPanelTitle_default:
  4164.         mov     edi, [esp+8]
  4165.         mov     ecx, 1024
  4166.         mov     esi, [esp+12]
  4167.         test    esi, esi
  4168.         jz      .nohost
  4169.         mov     edx, esi
  4170. @@:
  4171.         lodsb
  4172.         test    al, al
  4173.         jz      @f
  4174.         cmp     al, '/'
  4175.         jnz     @b
  4176.         mov     edx, esi
  4177.         jmp     @b
  4178. @@:
  4179.         mov     esi, edx
  4180. @@:
  4181.         lodsb
  4182.         stosb
  4183.         test    al, al
  4184.         loopnz  @b
  4185.         dec     edi
  4186.         inc     ecx
  4187. .nohost:
  4188.         mov     esi, [esp+16]
  4189.         cmp     word [esi], '/'
  4190.         jz      .nodir
  4191. @@:
  4192.         lodsb
  4193.         stosb
  4194.         test    al, al
  4195.         loopnz  @b
  4196.         dec     edi
  4197. .nodir:
  4198.         mov     byte [edi], 0
  4199.         ret     10h
  4200.  
  4201. draw_panel:
  4202.         mov     eax, [ebp + panel1_left - panel1_data]
  4203.         mov     edx, [ebp + panel1_top - panel1_data]
  4204.         call    get_console_ptr
  4205. ; draw border
  4206.         mov     ah, [panel_border_color]
  4207.         mov     ebx, [ebp + panel1_width - panel1_data]
  4208.         mov     edx, [ebp + panel1_height - panel1_data]
  4209.         call    draw_border
  4210.         push    eax
  4211.         mov     eax, [ebp + panel1_left - panel1_data]
  4212.         mov     edx, [ebp + panel1_top - panel1_data]
  4213.         add     edx, [ebp + panel1_height - panel1_data]
  4214.         sub     edx, 3
  4215.         call    get_console_ptr
  4216.         pop     eax
  4217.         mov     al, 0xC7
  4218.         stosw
  4219.         mov     al, 0xC4
  4220.         lea     ecx, [ebx-2]
  4221.         rep     stosw
  4222.         mov     al, 0xB6
  4223.         stosw
  4224.  
  4225.         imul    esi, [ebp + panel1_colmode - panel1_data], PanelMode.size
  4226.         add     esi, colmodes
  4227.         lodsd
  4228.         mov     ecx, eax        ; number of columns
  4229.         lea     ebx, [ebp + panel1_colwidths - panel1_data]
  4230.         mov     eax, [ebp + panel1_left - panel1_data]
  4231.         inc     eax
  4232.         mov     [column_left], eax
  4233.         mov     eax, [ebp + panel1_top - panel1_data]
  4234.         inc     eax
  4235.         mov     [column_top], eax
  4236.         mov     eax, [ebp + panel1_height - panel1_data]
  4237.         sub     eax, 4
  4238.         mov     [column_height], eax
  4239.         dec     eax
  4240.         mov     [ebp + panel1_colsz - panel1_data], eax
  4241.         and     [ebp + panel1_colst - panel1_data], 0
  4242.         mov     eax, [ebp + panel1_start - panel1_data]
  4243.         mov     [column_index], eax
  4244.         mov     [last_column_index], eax
  4245. .columns_loop:
  4246.         push    ecx
  4247.         mov     eax, [ebx]
  4248.         add     ebx, 4
  4249.         mov     [column_width], eax
  4250.         cmp     ecx, 1
  4251.         jz      .skip_right_border
  4252.         add     eax, [column_left]
  4253.         mov     edx, [ebp + panel1_top - panel1_data]
  4254.         call    get_console_ptr
  4255.         mov     ah, [panel_header_color]
  4256.         mov     al, 0xD1
  4257.         mov     [edi], ax
  4258.         add     edi, [cur_width]
  4259.         add     edi, [cur_width]
  4260.         mov     ecx, [column_height]
  4261.         mov     al, 0xB3
  4262. @@:
  4263.         mov     [edi], ax
  4264.         add     edi, [cur_width]
  4265.         add     edi, [cur_width]
  4266.         loop    @b
  4267.         mov     al, 0xC1
  4268.         stosw
  4269. .skip_right_border:
  4270.         mov     eax, [column_left]
  4271.         mov     edx, [column_top]
  4272.         call    get_console_ptr
  4273. ; § £®«®¢®ª á⮫¡æ 
  4274.         push    edi
  4275.         mov     edx, [esi]
  4276.         and     edx, 0xF
  4277.         mov     edx, [column_headers+edx*4]
  4278.         movzx   ecx, byte [edx]
  4279.         inc     edx
  4280.         cmp     ecx, [column_width]
  4281.         jb      @f
  4282.         mov     ecx, [column_width]
  4283. @@:
  4284.         push    ecx
  4285.         sub     ecx, [column_width]
  4286.         neg     ecx
  4287.         shr     ecx, 1
  4288.         mov     al, ' '
  4289.         mov     ah, [column_header_color]
  4290.         rep     stosw
  4291.         pop     ecx
  4292.         jecxz   .skipcopyhdr
  4293.         push    ecx
  4294. @@:
  4295.         mov     al, [edx]
  4296.         inc     edx
  4297.         stosw
  4298.         loop    @b
  4299.         pop     ecx
  4300. .skipcopyhdr:
  4301.         sub     ecx, [column_width]
  4302.         neg     ecx
  4303.         inc     ecx
  4304.         shr     ecx, 1
  4305.         mov     al, ' '
  4306.         rep     stosw
  4307.         pop     edi
  4308.         add     edi, [cur_width]
  4309.         add     edi, [cur_width]
  4310. ; á ¬ á⮫¡¥æ
  4311.         mov     eax, [esi]
  4312.         and     eax, 0xF
  4313.         push    ebx esi
  4314.         call    dword [draw_column_proc+eax*4]
  4315.         pop     esi ebx
  4316.         inc     esi
  4317.         mov     eax, [column_width]
  4318.         inc     eax
  4319.         add     [column_left], eax
  4320.         pop     ecx
  4321.         dec     ecx
  4322.         jnz     .columns_loop
  4323. ; ‡ £®«®¢®ª ¯ ­¥«¨ (⥪ãé ï ¯ ¯ª )
  4324.         lea     esi, [ebp + panel1_dir - panel1_data]
  4325.         mov     eax, [ebp + panel1_hPlugin - panel1_data]
  4326.         test    eax, eax
  4327.         jz      .native
  4328.         push    ebp
  4329.         push    esi
  4330.         mov     esi, [ebp + panel1_parents - panel1_data]
  4331.         add     esi, [ebp + panel1_parents_sz - panel1_data]
  4332. @@:
  4333.         dec     esi
  4334.         cmp     byte [esi-1], 0
  4335.         jnz     @b
  4336.         push    esi
  4337.         push    execdata
  4338.         push    [ebp + panel1_hFile - panel1_data]
  4339.         call    [eax+PluginInfo.GetPanelTitle]
  4340.         pop     ebp
  4341.         mov     esi, execdata
  4342. .native:
  4343.         mov     edi, cur_header
  4344.         mov     ecx, [ebp + panel1_width - panel1_data]
  4345.         sub     ecx, 6
  4346.         cmp     byte [esi], '/'
  4347.         jnz     .copy_rest
  4348.         dec     ecx
  4349.         movsb
  4350. @@:
  4351.         lodsb
  4352.         stosb
  4353.         dec     ecx
  4354.         test    al, al
  4355.         jz      .header_created
  4356.         cmp     al, '/'
  4357.         jnz     @b
  4358. .copy_rest:
  4359.         mov     edx, esi
  4360. @@:
  4361.         lodsb
  4362.         test    al, al
  4363.         jnz     @b
  4364.         sub     esi, edx
  4365.         dec     esi
  4366.         cmp     esi, ecx
  4367.         jbe     @f
  4368.         mov     word [edi], '..'
  4369.         mov     byte [edi+2], '.'
  4370.         add     edi, 3
  4371.         sub     ecx, 3
  4372.         add     edx, esi
  4373.         sub     edx, ecx
  4374. @@:
  4375.         mov     esi, edx
  4376. @@:
  4377.         lodsb
  4378.         stosb
  4379.         dec     ecx
  4380.         test    al, al
  4381.         jnz     @b
  4382. .header_created:
  4383.         mov     edx, [ebp + panel1_top - panel1_data]
  4384.         mov     eax, [ebp + panel1_left - panel1_data]
  4385.         shr     ecx, 1
  4386.         lea     eax, [eax+ecx+3]
  4387.         call    get_console_ptr
  4388.         mov     ah, [panel_active_header_color]
  4389.         cmp     ebp, [active_panel]
  4390.         jz      @f
  4391.         mov     ah, [panel_header_color]
  4392. @@:
  4393.         mov     al, ' '
  4394.         stosw
  4395.         mov     esi, cur_header
  4396. @@:
  4397.         lodsb
  4398.         test    al, al
  4399.         jz      @f
  4400.         stosw
  4401.         jmp     @b
  4402. @@:
  4403.         mov     al, ' '
  4404.         stosw
  4405.         mov     edx, [ebp + panel1_top - panel1_data]
  4406.         inc     edx
  4407.         mov     eax, [ebp + panel1_left - panel1_data]
  4408.         inc     eax
  4409.         call    get_console_ptr
  4410.         movzx   eax, [ebp + panel1_sortmode - panel1_data]
  4411.         mov     al, [compare_names+eax]
  4412.         stosb
  4413.         mov     eax, [ebp + panel1_selected_num - panel1_data]
  4414.         test    eax, eax
  4415.         jz      .skip_selected_info
  4416. ; ˆ­ä®à¬ æ¨ï ® ¢ë¤¥«¥­­ëå ä ©« å
  4417.         push    dword [ebp + panel1_selected_size+4 - panel1_data]
  4418.         push    dword [ebp + panel1_selected_size - panel1_data]
  4419.         call    fill_total_info
  4420.         mov     eax, [ebp + panel1_width - panel1_data]
  4421.         sub     eax, 2
  4422.         cmp     ecx, eax
  4423.         jbe     @f
  4424.         mov     ecx, eax
  4425.         mov     edi, saved_file_name+512
  4426.         sub     edi, eax
  4427.         mov     byte [edi], '.'
  4428.         mov     word [edi+1], '..'
  4429. @@:
  4430.         mov     esi, edi
  4431.         sub     eax, ecx
  4432.         shr     eax, 1
  4433.         inc     eax
  4434.         add     eax, [ebp + panel1_left - panel1_data]
  4435.         mov     edx, [ebp + panel1_top - panel1_data]
  4436.         add     edx, [ebp + panel1_height - panel1_data]
  4437.         sub     edx, 3
  4438.         call    get_console_ptr
  4439.         mov     ah, [panel_numselected_color]
  4440. @@:
  4441.         lodsb
  4442.         stosw
  4443.         loop    @b
  4444. .skip_selected_info:
  4445. ; ˆ­ä®à¬ æ¨ï ®¡ ®¡é¥¬ ç¨á«¥ ¨ à §¬¥à¥ ä ©«®¢ ¯ ­¥«¨
  4446.         mov     eax, [ebp + panel1_total_num - panel1_data]
  4447.         push    dword [ebp + panel1_total_size+4 - panel1_data]
  4448.         push    dword [ebp + panel1_total_size - panel1_data]
  4449.         call    fill_total_info
  4450.         mov     eax, [ebp + panel1_width - panel1_data]
  4451.         sub     eax, 2
  4452.         cmp     ecx, eax
  4453.         jbe     @f
  4454.         mov     ecx, eax
  4455.         mov     byte [edi+ecx-3], '.'
  4456.         mov     word [edi+ecx-2], '..'
  4457. @@:
  4458.         sub     eax, ecx
  4459.         shr     eax, 1
  4460.         inc     eax
  4461.         add     eax, [ebp + panel1_left - panel1_data]
  4462.         add     edx, [ebp + panel1_top - panel1_data]
  4463.         add     edx, [ebp + panel1_height - panel1_data]
  4464.         dec     edx
  4465.         mov     esi, edi
  4466.         call    get_console_ptr
  4467.         mov     ah, [panel_number_color]
  4468. @@:
  4469.         lodsb
  4470.         stosw
  4471.         loop    @b
  4472.         cmp     [ebp + panel1_numfiles - panel1_data], 0
  4473.         jz      .skip_curinfo
  4474. ; ˆ­ä®à¬ æ¨ï ® ⥪ã饬 ä ©«¥
  4475.         mov     ebx, [ebp + panel1_index - panel1_data]
  4476.         mov     eax, [ebp + panel1_files - panel1_data]
  4477.         mov     ebx, [eax+ebx*4]
  4478.         mov     eax, [ebp + panel1_left - panel1_data]
  4479.         add     eax, [ebp + panel1_width - panel1_data]
  4480.         dec     eax
  4481.         mov     edx, [ebp + panel1_top - panel1_data]
  4482.         add     edx, [ebp + panel1_height - panel1_data]
  4483.         dec     edx
  4484.         dec     edx
  4485.         call    get_console_ptr
  4486.         mov     ecx, [ebp + panel1_width - panel1_data]
  4487.         dec     ecx
  4488.         dec     ecx
  4489.         cmp     [ebp + panel1_colmode - panel1_data], 3
  4490.         jz      .show_curname
  4491. ; ‚à¥¬ï ¬®¤¨ä¨ª æ¨¨
  4492.         sub     edi, 5*2
  4493.         sub     ecx, 6
  4494.         mov     al, [ebx+24+2]
  4495.         aam
  4496.         or      ax, 0x3030
  4497.         mov     [edi], ah
  4498.         mov     [edi+2], al
  4499.         mov     [edi+4], byte ':'
  4500.         mov     al, [ebx+24+1]
  4501.         aam
  4502.         or      ax, 0x3030
  4503.         mov     [edi+6], ah
  4504.         mov     [edi+8], al
  4505.         mov     al, [panel_normal_color]
  4506.         mov     [edi+1], al
  4507.         mov     [edi+3], al
  4508.         mov     [edi+5], al
  4509.         mov     [edi+7], al
  4510.         mov     [edi+9], al
  4511.         dec     edi
  4512.         mov     [edi], al
  4513.         dec     edi
  4514.         mov     byte [edi], ' '
  4515. ; „ â  ¬®¤¨ä¨ª æ¨¨
  4516.         sub     edi, 8*2
  4517.         sub     ecx, 9
  4518.         mov     al, [ebx+28+0]
  4519.         aam
  4520.         or      ax, 0x3030
  4521.         mov     [edi], ah
  4522.         mov     [edi+2], al
  4523.         mov     [edi+4], byte '.'
  4524.         mov     al, [ebx+28+1]
  4525.         aam
  4526.         or      ax, 0x3030
  4527.         mov     [edi+6], ah
  4528.         mov     [edi+8], al
  4529.         mov     [edi+10], byte '.'
  4530.         mov     ax, [ebx+28+2]
  4531.         div     [_100]
  4532.         mov     al, ah
  4533.         aam
  4534.         or      ax, 0x3030
  4535.         mov     [edi+12], ah
  4536.         mov     [edi+14], al
  4537.         mov     al, [panel_normal_color]
  4538.         mov     [edi+1], al
  4539.         mov     [edi+3], al
  4540.         mov     [edi+5], al
  4541.         mov     [edi+7], al
  4542.         mov     [edi+9], al
  4543.         mov     [edi+11], al
  4544.         mov     [edi+13], al
  4545.         mov     [edi+15], al
  4546.         dec     edi
  4547.         mov     [edi], al
  4548.         dec     edi
  4549.         mov     [edi], byte ' '
  4550. ;  §¬¥à
  4551.         std
  4552.         mov     ah, [panel_normal_color]
  4553.         dec     edi
  4554.         dec     edi
  4555.         dec     ecx
  4556.         test    byte [ebx], 0x10
  4557.         jz      .size_file
  4558.         push    ecx
  4559.         mov     esi, aFolder+aFolder.size-1
  4560.         mov     ecx, aFolder.size
  4561.         cmp     word [ebx+40], '..'
  4562.         jnz     @f
  4563.         cmp     byte [ebx+42], 0
  4564.         jnz     @f
  4565.         mov     esi, aUp+aUp.size-1
  4566.         mov     cl, aUp.size
  4567. @@:
  4568.         sub     [esp], ecx
  4569. @@:
  4570.         lodsb
  4571.         stosw
  4572.         loop    @b
  4573.         pop     ecx
  4574.         jmp     .size_done
  4575. .size_file:
  4576.         mov     edx, [ebx+36]
  4577.         test    edx, edx
  4578.         jz      .size_less_4g
  4579.         cmp     edx, 10*256
  4580.         jae     .size_tera
  4581. ; ¢ £¨£ ¡ ©â å
  4582.         mov     al, 'G'
  4583.         shl     edx, 2
  4584.         jmp     .size_letter
  4585. .size_tera:
  4586. ; ¢ â¥à ¡ ©â å
  4587.         shr     edx, 8
  4588.         mov     al, 'T'
  4589.         jmp     .size_letter
  4590. .size_less_4g:
  4591.         mov     edx, [ebx+32]
  4592.         cmp     edx, 10*(1 shl 20)
  4593.         jae     .size_mega
  4594.         cmp     edx, 1 shl 20
  4595.         jb      .size_num
  4596.         shr     edx, 10
  4597.         mov     al, 'K'
  4598.         jmp     .size_letter
  4599. .size_mega:
  4600.         mov     al, 'M'
  4601.         shr     edx, 20
  4602. .size_letter:
  4603.         stosw
  4604.         dec     ecx
  4605.         mov     al, ' '
  4606.         stosw
  4607.         dec     ecx
  4608. .size_num:
  4609.         xchg    eax, edx
  4610.         xor     edx, edx
  4611.         div     [_10d]
  4612.         xchg    eax, edx
  4613.         add     al, '0'
  4614.         mov     ah, [panel_normal_color]
  4615.         stosw
  4616.         dec     ecx
  4617.         test    edx, edx
  4618.         jnz     .size_num
  4619. .size_done:
  4620.         cld
  4621. .show_curname:
  4622. ; ˆ¬ï
  4623.         sub     edi, ecx
  4624.         sub     edi, ecx
  4625.         lea     esi, [ebx+40]
  4626. @@:
  4627.         lodsb
  4628.         test    al, al
  4629.         jnz     @b
  4630.         sub     esi, ebx
  4631.         sub     esi, 41
  4632.         mov     ah, [panel_normal_color]
  4633.         cmp     esi, ecx
  4634.         lea     edx, [ebx+40]
  4635.         jbe     @f
  4636.         mov     al, '{'
  4637.         mov     [edi-2], ax
  4638.         add     edx, esi
  4639.         sub     edx, ecx
  4640. @@:
  4641.         mov     esi, edx
  4642. @@:
  4643.         lodsb
  4644.         test    al, al
  4645.         jz      @f
  4646.         stosw
  4647.         loop    @b
  4648. @@:
  4649.         mov     al, ' '
  4650.         rep     stosw
  4651. .skip_curinfo:
  4652.         call    draw_image
  4653.         ret
  4654.  
  4655. fill_total_info:
  4656.         mov     edi, saved_file_name+511
  4657.         mov     byte [edi], ' '
  4658. if lang eq ru
  4659.         mov     byte [edi-1], '¥'
  4660.         dec     edi
  4661.         cmp     eax, 1
  4662.         jz      @f
  4663.         mov     word [edi-1], ' å'
  4664.         dec     edi
  4665. @@:
  4666.         mov     dword [edi-4], 'ä ©«'
  4667.         mov     byte [edi-5], ' '
  4668.         sub     edi, 5
  4669. else
  4670.         cmp     eax, 1
  4671.         jz      @f
  4672.         dec     edi
  4673.         mov     byte [edi], 's'
  4674. @@:
  4675.         mov     dword [edi-4], 'file'
  4676.         mov     byte [edi-5], ' '
  4677.         sub     edi, 5
  4678. end if
  4679.         xor     edx, edx
  4680.         push    10
  4681.         pop     ecx
  4682. @@:
  4683.         div     ecx
  4684.         dec     edi
  4685.         add     dl, '0'
  4686.         mov     [edi], dl
  4687.         xor     edx, edx
  4688.         test    eax, eax
  4689.         jnz     @b
  4690. if lang eq ru
  4691.         mov     dword [edi-4], 'â ¢ '
  4692.         mov     dword [edi-8], ' ¡ ©'
  4693.         sub     edi, 8
  4694. else
  4695.         mov     dword [edi-4], ' in '
  4696.         mov     dword [edi-8], 'ytes'
  4697.         mov     word [edi-10], ' b'
  4698.         sub     edi, 10
  4699. end if
  4700.         lea     esi, [edi-3]
  4701.         mov     edx, [esp+8]
  4702.         mov     eax, [esp+4]
  4703. .selsizel:
  4704.         push    edx
  4705.         mov     ebx, edx
  4706.         xor     edx, edx
  4707.         add     ebx, ebx
  4708.         adc     edx, edx
  4709.         push    ebx
  4710.         push    edx
  4711.         add     ebx, ebx
  4712.         adc     edx, edx
  4713.         add     ebx, [esp+4]
  4714.         adc     edx, [esp]
  4715.         add     esp, 8
  4716.         add     eax, ebx
  4717.         adc     edx, 0
  4718.         div     ecx
  4719.         dec     edi
  4720.         cmp     edi, esi
  4721.         jae     @f
  4722.         mov     byte [edi], ','
  4723.         dec     edi
  4724.         sub     esi, 4
  4725. @@:
  4726.         pop     ebx
  4727.         add     dl, '0'
  4728.         mov     byte [edi], dl
  4729.         xchg    eax, ebx
  4730.         mul     [muldiv10]
  4731.         add     eax, ebx
  4732.         adc     edx, 0
  4733.         mov     ebx, eax
  4734.         or      ebx, edx
  4735.         jnz     .selsizel
  4736.         dec     edi
  4737.         mov     byte [edi], ' '
  4738.         mov     ecx, saved_file_name+512
  4739.         sub     ecx, edi
  4740.         ret     8
  4741.  
  4742. get_file_color:
  4743.         mov     ah, [esi + 6]
  4744.         cmp     ebp, [active_panel]
  4745.         jnz     @f
  4746.         cmp     ecx, [ebp + panel1_index - panel1_data]
  4747.         jnz     @f
  4748.         mov     ah, [esi + 7]
  4749. @@:
  4750.         test    byte [esi + 303], 1
  4751.         jnz     @f
  4752.         mov     ah, [esi + 4]
  4753.         cmp     ebp, [active_panel]
  4754.         jnz     @f
  4755.         cmp     ecx, [ebp + panel1_index - panel1_data]
  4756.         jnz     @f
  4757.         mov     ah, [esi + 5]
  4758. @@:
  4759.         ret
  4760.  
  4761. draw_name_column:
  4762.         mov     eax, [column_index]
  4763.         mov     [last_column_index], eax
  4764.         mov     edx, [ebp + panel1_numfiles - panel1_data]
  4765.         mov     ecx, [column_height]
  4766.         dec     ecx
  4767. .l:
  4768.         cmp     [column_index], edx
  4769.         jae     .ret
  4770.         push    ecx
  4771.         mov     ecx, [column_index]
  4772.         mov     esi, [ebp + panel1_files - panel1_data]
  4773.         mov     esi, [esi+ecx*4]
  4774.         mov     ebx, [esi]
  4775.         call    get_file_color
  4776.         add     esi, 40
  4777.         mov     ecx, [column_width]
  4778.         push    edi
  4779. @@:
  4780.         lodsb
  4781.         test    al, al
  4782.         jz      @f
  4783.         stosw
  4784.         loop    @b
  4785.         lodsb
  4786.         test    al, al
  4787.         jz      @f
  4788.         mov     byte [edi], '}'
  4789.         jmp     .continue
  4790. @@:
  4791.         test    bl, 10h
  4792.         jnz     .noalignext
  4793.         mov     ebx, [ebp + panel1_colmode - panel1_data]
  4794. ; sizeof(PanelMode) = 40
  4795.         lea     ebx, [ebx+ebx*4]
  4796.         cmp     [colmodes+ebx*8+PanelMode.bAlignExtensions], 0
  4797.         jz      .noalignext
  4798.         push    ecx
  4799.         sub     ecx, [column_width]
  4800.         neg     ecx
  4801.         jz      .noalignext2
  4802.         dec     esi
  4803. @@:
  4804.         dec     esi
  4805.         cmp     byte [esi], '.'
  4806.         loopnz  @b
  4807.         jnz     .noalignext2
  4808.         inc     esi
  4809.         sub     ecx, [column_width]
  4810.         neg     ecx
  4811.         sub     ecx, [esp]
  4812.         sub     edi, ecx
  4813.         sub     edi, ecx
  4814.         dec     ecx
  4815.         mov     ebx, [esp+4]
  4816.         cmp     ecx, 3
  4817.         ja      @f
  4818.         mov     cl, 3
  4819. @@:
  4820.         sub     ecx, [column_width]
  4821.         sub     ebx, edi
  4822.         sar     ebx, 1
  4823.         sub     ebx, ecx
  4824.         pop     ecx
  4825.         inc     ecx
  4826.         push    0
  4827.         cmp     ecx, ebx
  4828.         jbe     @f
  4829.         sub     ecx, ebx
  4830.         mov     [esp], ecx
  4831.         mov     ecx, ebx
  4832. @@:
  4833.         mov     al, ' '
  4834.         rep     stosw
  4835. @@:
  4836.         lodsb
  4837.         test    al, al
  4838.         jz      .noalignext2
  4839.         stosw
  4840.         jmp     @b
  4841. .noalignext2:
  4842.         pop     ecx
  4843. .noalignext:
  4844.         mov     al, ' '
  4845.         rep     stosw
  4846. .continue:
  4847.         pop     edi
  4848.         add     edi, [cur_width]
  4849.         add     edi, [cur_width]
  4850.         inc     [column_index]
  4851.         pop     ecx
  4852.         dec     ecx
  4853.         jnz     .l
  4854. .ret:
  4855.         mov     eax, [ebp + panel1_colsz - panel1_data]
  4856.         add     [ebp + panel1_colst - panel1_data], eax
  4857.         cmp     ebp, panel1_data
  4858.         jnz     .ret2
  4859. ; —¨á«® íªà ­®¢
  4860. ; calculate number of viewer and editor screens
  4861.         xor     ebx, ebx
  4862.         xor     edx, edx
  4863.         mov     ecx, [num_screens]
  4864.         mov     esi, [screens]
  4865. .3:
  4866.         lodsd
  4867.         cmp     eax, viewer_vtable
  4868.         jnz     @f
  4869.         inc     ebx
  4870. @@:
  4871.         cmp     eax, editor_vtable
  4872.         jnz     @f
  4873.         inc     edx
  4874. @@:
  4875.         lodsd
  4876.         loop    .3
  4877.         mov     eax, ebx
  4878.         mov     esi, edx
  4879.         or      eax, edx
  4880.         jz      .ret2
  4881.         xor     eax, eax
  4882.         xor     edx, edx
  4883.         call    get_console_ptr
  4884.         mov     al, '['
  4885.         stosb
  4886.         mov     al, [panel_nscreens_color]
  4887.         stosb
  4888.         xchg    eax, ebx
  4889. .5:
  4890.         push    -'0'
  4891. @@:
  4892.         xor     edx, edx
  4893.         div     [_10d]
  4894.         push    edx
  4895.         test    eax, eax
  4896.         jnz     @b
  4897. @@:
  4898.         pop     eax
  4899.         add     eax, '0'
  4900.         jz      @f
  4901.         stosb
  4902.         mov     al, bl
  4903.         stosb
  4904.         jmp     @b
  4905. @@:
  4906.         test    esi, esi
  4907.         jz      .4
  4908.         mov     al, '+'
  4909.         stosb
  4910.         mov     al, bl
  4911.         stosb
  4912.         xor     eax, eax
  4913.         xchg    eax, esi
  4914.         jmp     .5
  4915. .4:
  4916.         mov     al, ']'
  4917.         mov     ah, [panel_nscreens_color]
  4918.         stosw
  4919. .ret2:
  4920. draw_empty_column:
  4921.         ret
  4922.  
  4923. draw_size_column:
  4924.         add     edi, [column_width]
  4925.         add     edi, [column_width]
  4926.         dec     edi
  4927.         dec     edi
  4928.         std
  4929.         mov     ecx, [column_height]
  4930.         dec     ecx
  4931.         push    [last_column_index]
  4932. .l:
  4933.         mov     edx, [ebp + panel1_numfiles - panel1_data]
  4934.         cmp     [last_column_index], edx
  4935.         jae     .ret
  4936.         push    ecx
  4937.         push    edi
  4938.         mov     ecx, [last_column_index]
  4939.         mov     esi, [ebp + panel1_files - panel1_data]
  4940.         mov     esi, [esi+ecx*4]
  4941.         call    get_file_color
  4942.         mov     ecx, [column_width]
  4943. @@:
  4944.         mov     ebx, eax
  4945.         cmp     word [esi+40], '..'
  4946.         jnz     .nodotdot
  4947.         cmp     byte [esi+42], 0
  4948.         jnz     .nodotdot
  4949. if lang eq ru
  4950.         mov     al, 'å'
  4951.         stosw
  4952.         mov     al, 'à'
  4953.         stosw
  4954.         mov     al, '¥'
  4955.         stosw
  4956.         mov     al, '¢'
  4957.         stosw
  4958.         mov     al, '‚'
  4959.         stosw
  4960.         sub     ecx, 5
  4961. else
  4962.         mov     al, ' '
  4963.         stosw
  4964.         stosw
  4965.         mov     al, 'p'
  4966.         stosw
  4967.         mov     al, 'U'
  4968.         stosw
  4969.         sub     ecx, 4
  4970. end if
  4971.         jmp     .size_written
  4972. .nodotdot:
  4973.         test    byte [esi], 10h
  4974.         jz      .nofolder
  4975. if lang eq ru
  4976.         mov     al, ' '
  4977.         stosw
  4978.         mov     al, 'ª'
  4979.         stosw
  4980.         mov     al, '¯'
  4981.         stosw
  4982.         mov     al, ' '
  4983.         stosw
  4984.         mov     al, ''
  4985.         stosw
  4986.         sub     ecx, 5
  4987. else
  4988.         mov     al, 'r'
  4989.         stosw
  4990.         mov     al, 'e'
  4991.         stosw
  4992.         mov     al, 'd'
  4993.         stosw
  4994.         mov     al, 'l'
  4995.         stosw
  4996.         mov     al, 'o'
  4997.         stosw
  4998.         mov     al, 'F'
  4999.         stosw
  5000.         sub     ecx, 6
  5001. end if
  5002.         jmp     .size_written
  5003. .nofolder:
  5004.         mov     eax, [esi+32]
  5005.         mov     edx, [esi+36]
  5006.         test    edx, edx
  5007.         jz      .less_4G
  5008.         cmp     edx, 10000/4*1024
  5009.         jb      .giga
  5010.         mov     al, 'T'
  5011.         shr     edx, 10
  5012.         jmp     .write_letter
  5013. .giga:
  5014.         mov     al, 'G'
  5015.         shl     edx, 2
  5016.         jmp     .write_letter
  5017. .less_4G:
  5018.         mov     edx, eax
  5019.         cmp     eax, 1000000
  5020.         jb      .byte
  5021.         cmp     eax, 10000*1024
  5022.         jb      .kilo
  5023.         mov     al, 'M'
  5024.         shr     edx, 20
  5025.         jmp     .write_letter
  5026. .kilo:
  5027.         mov     al, 'K'
  5028.         shr     edx, 10
  5029. .write_letter:
  5030.         mov     ah, bh
  5031.         stosw
  5032.         mov     al, ' '
  5033.         stosw
  5034.         dec     ecx
  5035.         dec     ecx
  5036. .byte:
  5037.         xchg    eax, edx
  5038.         xor     edx, edx
  5039.         div     [_10d]
  5040.         xchg    eax, edx
  5041.         add     al, '0'
  5042.         mov     ah, bh
  5043.         stosw
  5044.         dec     ecx
  5045.         test    edx, edx
  5046.         jnz     .byte
  5047. .size_written:
  5048.         mov     eax, ebx
  5049.         test    ecx, ecx
  5050.         jle     @f
  5051.         mov     al, ' '
  5052.         rep     stosw
  5053. @@:
  5054.         mov     byte [edi+1], ah
  5055.         pop     edi
  5056.         add     edi, [cur_width]
  5057.         add     edi, [cur_width]
  5058.         inc     [last_column_index]
  5059.         pop     ecx
  5060.         dec     ecx
  5061.         jnz     .l
  5062. .ret:
  5063.         pop     [last_column_index]
  5064.         cld
  5065.         ret
  5066.  
  5067. draw_date_column:
  5068.         mov     ecx, [column_height]
  5069.         dec     ecx
  5070.         push    [last_column_index]
  5071. .l:
  5072.         mov     edx, [ebp + panel1_numfiles - panel1_data]
  5073.         cmp     [last_column_index], edx
  5074.         jae     .ret
  5075.         push    ecx
  5076.         push    edi
  5077.         mov     ecx, [last_column_index]
  5078.         mov     esi, [ebp + panel1_files - panel1_data]
  5079.         mov     esi, [esi+ecx*4]
  5080.         call    get_file_color
  5081.         mov     bh, ah
  5082.         mov     byte [edi-1], bh
  5083.         mov     al, [esi+28]
  5084.         aam
  5085.         add     eax, '00'
  5086.         push    eax
  5087.         mov     al, ah
  5088.         mov     ah, bh
  5089.         stosw
  5090.         pop     eax
  5091.         mov     ah, bh
  5092.         stosw
  5093.         mov     al, '.'
  5094.         stosw
  5095.         mov     al, [esi+29]
  5096.         aam
  5097.         add     eax, '00'
  5098.         push    eax
  5099.         mov     al, ah
  5100.         mov     ah, bh
  5101.         stosw
  5102.         pop     eax
  5103.         mov     ah, bh
  5104.         stosw
  5105.         mov     al, '.'
  5106.         stosw
  5107.         movzx   eax, word [esi+30]
  5108.         xor     edx, edx
  5109.         div     [_10d]
  5110.         xchg    eax, edx
  5111.         add     al, '0'
  5112.         mov     ah, bh
  5113.         mov     [edi+2], ax
  5114.         xchg    eax, edx
  5115.         xor     edx, edx
  5116.         div     [_10d]
  5117.         xchg    eax, edx
  5118.         add     al, '0'
  5119.         mov     ah, bh
  5120.         stosw
  5121.         pop     edi
  5122.         add     edi, [cur_width]
  5123.         add     edi, [cur_width]
  5124.         inc     [last_column_index]
  5125.         pop     ecx
  5126.         dec     ecx
  5127.         jnz     .l
  5128. .ret:
  5129.         pop     [last_column_index]
  5130.         cld
  5131.         ret
  5132.  
  5133. draw_time_column:
  5134.         mov     ecx, [column_height]
  5135.         dec     ecx
  5136.         push    [last_column_index]
  5137. .l:
  5138.         mov     edx, [ebp + panel1_numfiles - panel1_data]
  5139.         cmp     [last_column_index], edx
  5140.         jae     .ret
  5141.         push    ecx
  5142.         push    edi
  5143.         mov     ecx, [last_column_index]
  5144.         mov     esi, [ebp + panel1_files - panel1_data]
  5145.         mov     esi, [esi+ecx*4]
  5146.         call    get_file_color
  5147.         mov     bh, ah
  5148.         mov     byte [edi-1], bh
  5149.         mov     al, [esi+26]
  5150.         aam
  5151.         add     eax, '00'
  5152.         push    eax
  5153.         mov     al, ah
  5154.         mov     ah, bh
  5155.         stosw
  5156.         pop     eax
  5157.         mov     ah, bh
  5158.         stosw
  5159.         mov     al, ':'
  5160.         stosw
  5161.         mov     al, [esi+25]
  5162.         aam
  5163.         add     eax, '00'
  5164.         push    eax
  5165.         mov     al, ah
  5166.         mov     ah, bh
  5167.         stosw
  5168.         pop     eax
  5169.         mov     ah, bh
  5170.         stosw
  5171.         pop     edi
  5172.         add     edi, [cur_width]
  5173.         add     edi, [cur_width]
  5174.         inc     [last_column_index]
  5175.         pop     ecx
  5176.         dec     ecx
  5177.         jnz     .l
  5178. .ret:
  5179.         pop     [last_column_index]
  5180.         cld
  5181.         ret
  5182.  
  5183. ;insert_last_dot:
  5184. ;        push    eax esi
  5185. ;        mov     ah, 0
  5186. ;.loop:
  5187. ;        lodsb
  5188. ;        test    al, al
  5189. ;        jz      .done
  5190. ;        cmp     al, '.'
  5191. ;        jnz     .loop
  5192. ;        mov     ah, 1
  5193. ;        jmp     .loop
  5194. ;.done:
  5195. ;        test    ah, ah
  5196. ;        jnz     @f
  5197. ;        mov     byte [esi-1], '.'
  5198. ;        mov     byte [esi], 0
  5199. ;@@:
  5200. ;        pop     esi eax
  5201. ;        ret
  5202.  
  5203. ;delete_last_dot:
  5204. ;        push    esi
  5205. ;@@:
  5206. ;        cmp     byte [esi], 0
  5207. ;        jz      @f
  5208. ;        inc     esi
  5209. ;        jmp     @b
  5210. ;@@:
  5211. ;        cmp     byte [esi-1], '.'
  5212. ;        jnz     @f
  5213. ;        mov     byte [esi-1], 0
  5214. ;@@:     pop     esi
  5215. ;        ret
  5216.  
  5217. read_folder:
  5218.         mov     eax, [ebp + panel1_nfa - panel1_data]
  5219.         mov     [dirinfo.size], eax
  5220.         shl     eax, 2
  5221.         add     eax, [ebp + panel1_files - panel1_data]
  5222.         mov     [dirinfo.dirdata], eax
  5223.         lea     eax, [ebp + panel1_dir - panel1_data]
  5224.         mov     [dirinfo.name], eax
  5225.         xor     eax, eax
  5226.         mov     [ebp + panel1_total_num - panel1_data], eax
  5227.         mov     dword [ebp + panel1_total_size - panel1_data], eax
  5228.         mov     dword [ebp + panel1_total_size+4 - panel1_data], eax
  5229.         mov     [ebp + panel1_selected_num - panel1_data], eax
  5230.         mov     dword [ebp + panel1_selected_size - panel1_data], eax
  5231.         mov     dword [ebp + panel1_selected_size+4 - panel1_data], eax
  5232. .retry:
  5233.         mov     eax, [ebp + panel1_hPlugin - panel1_data]
  5234.         test    eax, eax
  5235.         jz      .native
  5236.         mov     ecx, [dirinfo.size]
  5237.         test    [ebp + panel1_plugin_flags - panel1_data], 1
  5238.         jz      @f
  5239.         dec     ecx     ; reserve one entry for '..'
  5240. @@:
  5241.         push    ebp
  5242.         push    [dirinfo.dirdata]
  5243.         push    ecx
  5244.         push    0
  5245.         push    [ebp + panel1_hFile - panel1_data]
  5246.         call    [eax + PluginInfo.ReadFolder]
  5247.         pop     ebp
  5248.         mov     ebx, [dirinfo.dirdata]
  5249.         mov     ebx, [ebx+4]
  5250.         jmp     .read
  5251. .native:
  5252.         push    70
  5253.         pop     eax
  5254.         mov     ebx, dirinfo
  5255.         int     40h
  5256. .read:
  5257.         test    eax, eax
  5258.         jz      .ok
  5259.         cmp     eax, 6
  5260.         jz      .ok
  5261. ; Failed to read folder, notify user
  5262.         cmp     [bSilentFolderMode], 0
  5263.         jnz     .dont_notify
  5264.         push    dword aContinue
  5265.         push    dword aRetry
  5266.         mov     edx, esp
  5267.         call    get_error_msg
  5268.         push    [dirinfo.name]
  5269.         push    dword aCannotReadFolder
  5270.         push    eax
  5271.         mov     eax, esp
  5272.         push    edx
  5273.         push    2
  5274.         push    eax
  5275.         push    3
  5276.         call    SayErr
  5277.         add     esp, 5*4
  5278.         test    eax, eax
  5279.         jz      .retry
  5280. .dont_notify:
  5281. ; If not on plugin panel, try to return to previous directory
  5282.         cmp     [ebp + panel1_hPlugin - panel1_data], 0
  5283.         jnz     @f
  5284.         mov     esi, prev_dir
  5285.         cmp     byte [esi], 0
  5286.         jz      @f
  5287.         lea     edi, [ebp + panel1_dir - panel1_data]
  5288.         mov     ecx, 1024/4
  5289.         rep     movsd
  5290.         mov     byte [prev_dir], 0
  5291.         ret
  5292. @@:
  5293.         mov     [bSilentFolderMode], 1  ; enter silent mode
  5294. ; Try to read parent folder
  5295.         mov     esi, [dirinfo.name]
  5296.         xor     edx, edx
  5297. .up1:
  5298.         lodsb
  5299.         test    al, al
  5300.         jz      .up1done
  5301.         cmp     al, '/'
  5302.         jnz     .up1
  5303.         inc     edx
  5304.         lea     edi, [esi-1]
  5305.         jmp     .up1
  5306. .up1done:
  5307.         cmp     [ebp + panel1_hPlugin - panel1_data], 0
  5308.         jz      .4
  5309.         cmp     edx, 1
  5310.         ja      .up
  5311. ; ç⥭¨¥ á ¯ ­¥«¨ ¯« £¨­  ®¡«®¬ «®áì ¯® ¯®«­®©
  5312. ; ¯à¨ í⮬ ¬ë 㦥 ¢ ª®à­¥
  5313. ; ¤¥« ¥¬ ¢¨¤, çâ® äã­ªæ¨ï ç⥭¨ï ¢¥à­ã«  0 í«¥¬¥­â®¢
  5314. ; (¥á«¨ ­ã¦¥­ ¢å®¤ "..", ®­ ¡ã¤¥â ¤®¡ ¢«¥­  ¢â®¬ â¨ç¥áª¨)
  5315.         xor     ebx, ebx        ; 0 items read
  5316.         mov     eax, [dirinfo.dirdata]
  5317.         mov     [eax+8], ebx    ; 0 items total
  5318.         jmp     .ok
  5319. .4:
  5320.         cmp     edx, 2
  5321.         jbe     .noup
  5322. .up:
  5323.         stosb
  5324.         jmp     read_folder
  5325. .noup:
  5326. ; There is no parent folder, and we are not on plugin panel
  5327. ; Try to read ramdisk
  5328.         mov     esi, [dirinfo.name]
  5329.         mov     edi, esi
  5330.         lodsd
  5331.         or      eax, 0x00202000
  5332.         cmp     eax, '/rd/'
  5333.         jnz     @f
  5334.         lodsw
  5335.         cmp     ax, '1'
  5336.         jz      .nosetrd
  5337. @@:
  5338.         mov     eax, '/rd/'
  5339.         stosd
  5340.         mov     ax, '1'
  5341.         stosw
  5342.         jmp     read_folder
  5343. .nosetrd:
  5344. ; „ ¦¥ à ¬¤¨áª ­¥ ¯à®ç¨â «áï. ‡­ ç¨â, ­¥ áã¤ì¡ ...
  5345.         and     dword [ebp + panel1_numfiles - panel1_data], 0
  5346.         and     dword [ebp + panel1_index - panel1_data], 0
  5347.         and     dword [ebp + panel1_start - panel1_data], 0
  5348.         mov     [bSilentFolderMode], 0  ; leave silent mode
  5349.         ret
  5350. .ok:
  5351.         mov     eax, [dirinfo.dirdata]
  5352.         cmp     [eax+8], ebx
  5353.         jz      .readdone
  5354.         push    dword [eax+8]
  5355.         mov     ecx, [ebp + panel1_files - panel1_data]
  5356.         call    pgfree
  5357.         pop     ecx
  5358.         add     ecx, 0xF
  5359.         and     ecx, not 0xF
  5360.         push    ecx
  5361.         imul    ecx, 4+304
  5362.         add     ecx, 32
  5363.         call    xpgalloc
  5364.         test    eax, eax
  5365.         jnz     .succ1
  5366.         pop     eax
  5367.         jmp     .readdone
  5368. .succ1:
  5369.         mov     [ebp + panel1_files - panel1_data], eax
  5370.         pop     [ebp + panel1_nfa - panel1_data]
  5371.         mov     [prev_dir], 0
  5372.         jmp     read_folder
  5373. .readdone:
  5374.         xor     edx, edx
  5375.         mov     [ebp + panel1_start - panel1_data], edx
  5376.         mov     [ebp + panel1_index - panel1_data], edx
  5377.         mov     [ebp + panel1_start - panel1_data], edx
  5378.         mov     edi, [ebp + panel1_files - panel1_data]
  5379.         mov     eax, [ebp + panel1_nfa - panel1_data]
  5380.         lea     eax, [edi + eax*4 + 32]
  5381.         mov     ecx, [eax-32+4]
  5382.         test    ecx, ecx
  5383.         jz      .loopdone
  5384. ; ˆ£­®à¨à㥬 ᯥ樠«ì­ë¥ ¢å®¤ë, ᮮ⢥âáâ¢ãî騥 ¯ ¯ª¥ '.' ¨ ¬¥âª¥ ⮬ 
  5385. .ptrinit:
  5386.         cmp     word [eax+40], '.'
  5387.         jz      .loopcont
  5388.         test    byte [eax], 8
  5389.         jnz     .loopcont
  5390.         mov     byte [eax+303], 0
  5391.         test    edx, edx
  5392.         jnz     .nodotdot
  5393.         cmp     word [eax+40], '..'
  5394.         jnz     .nodotdot
  5395.         cmp     byte [eax+42], 0
  5396.         jnz     .nodotdot
  5397.         mov     edx, eax
  5398.         push    edi
  5399. @@:
  5400.         cmp     edi, [ebp + panel1_files - panel1_data]
  5401.         jbe     @f
  5402.         push    dword [edi-4]
  5403.         pop     dword [edi]
  5404.         sub     edi, 4
  5405.         jmp     @b
  5406. @@:
  5407.         stosd
  5408.         pop     edi
  5409.         scasd
  5410.         jmp     .dotdot
  5411. .nodotdot:
  5412.         stosd
  5413.         xor     ebx, ebx
  5414.         test    byte [eax], 10h
  5415.         setz    bl
  5416.         add     [ebp + panel1_total_num - panel1_data], ebx
  5417.         mov     ebx, dword [eax+32]
  5418.         add     dword [ebp + panel1_total_size - panel1_data], ebx
  5419.         mov     ebx, dword [eax+36]
  5420.         adc     dword [ebp + panel1_total_size+4 - panel1_data], ebx
  5421. .dotdot:
  5422. ; ¯®¤á¢¥âª 
  5423. ;        call    insert_last_dot
  5424.         call    highlight_init
  5425. ;        call    delete_last_dot
  5426. .loopcont:
  5427.         add     eax, 304
  5428.         dec     ecx
  5429.         jnz     .ptrinit
  5430. .loopdone:
  5431.         push    edi
  5432.         sub     edi, [ebp + panel1_files - panel1_data]
  5433.         shr     edi, 2
  5434.         mov     [ebp + panel1_numfiles - panel1_data], edi
  5435.         pop     edi
  5436.         test    edx, edx
  5437.         jnz     @f
  5438.         test    [ebp + panel1_plugin_flags - panel1_data], 1
  5439.         jz      @f
  5440.         mov     ecx, [ebp + panel1_numfiles - panel1_data]
  5441.         inc     [ebp + panel1_numfiles - panel1_data]
  5442.         lea     esi, [edi-4]
  5443.         std
  5444.         rep     movsd
  5445.         cld
  5446.         mov     eax, left_dotdot_entry
  5447.         cmp     ebp, panel1_data
  5448.         jz      .zq
  5449.         add     eax, right_dotdot_entry-left_dotdot_entry
  5450. .zq:
  5451.         stosd
  5452.         call    highlight_init
  5453. @@:
  5454. ; ‘®àâ¨à®¢ª 
  5455. sort_files:
  5456.         movzx   eax, [ebp + panel1_sortmode - panel1_data]
  5457.         mov     ebx, [compare_fns + eax*4]
  5458. .mode:
  5459.         mov     edx, [ebp + panel1_files - panel1_data]
  5460.         mov     ecx, [ebp + panel1_numfiles - panel1_data]
  5461.         jecxz   .skip
  5462.         mov     eax, [edx]
  5463.         cmp     word [eax+40], '..'
  5464.         jnz     .nodotdot
  5465.         cmp     byte [eax+42], 0
  5466.         jnz     .nodotdot
  5467.         dec     ecx
  5468.         add     edx, 4
  5469. .nodotdot:
  5470.         call    sort
  5471. .skip:
  5472.         mov     [bSilentFolderMode], 0  ; leave silent mode
  5473.         ret
  5474.  
  5475. highlight_init:
  5476.         pushad
  5477.         mov     ebp, eax
  5478.         lea     esi, [ebp+40]
  5479.         mov     edi, lower_file_name
  5480.         mov     edx, edi
  5481.         xor     eax, eax
  5482. @@:
  5483.         lodsb
  5484.         mov     al, [tolower_table+eax]
  5485.         stosb
  5486.         test    al, al
  5487.         jnz     @b
  5488.         mov     esi, edx
  5489.         lea     edx, [edi-1]
  5490.         xor     ecx, ecx
  5491. .highlight_test_loop:
  5492.         mov     ebx, [highlight_groups+ecx*4]
  5493.         mov     al, [ebx + highlight.IncludeAttributes]
  5494.         mov     ah, [ebp]
  5495.         and     ah, al
  5496.         cmp     ah, al
  5497.         jnz     .highlight_test_failed
  5498.         lea     edi, [ebx + highlight.Mask]
  5499.         call    match_mask_rev_lowercase
  5500.         jc      .highlight_test_failed
  5501.         mov     ah, [ebx + highlight.NormalColor]
  5502.         test    ah, ah
  5503.         jnz     @f
  5504.         mov     ah, [panel_normal_color]
  5505. @@:
  5506.         mov     [ebp+4], ah
  5507.         mov     ah, [ebx + highlight.CursorColor]
  5508.         test    ah, ah
  5509.         jnz     @f
  5510.         mov     ah, [panel_cursor_color]
  5511. @@:
  5512.         mov     [ebp+5], ah
  5513.         mov     ah, [ebx + highlight.SelectedColor]
  5514.         test    ah, ah
  5515.         jnz     @f
  5516.         mov     ah, [panel_selected_color]
  5517. @@:
  5518.         mov     [ebp+6], ah
  5519.         mov     ah, [ebx + highlight.SelectedCursorColor]
  5520.         test    ah, ah
  5521.         jnz     @f
  5522.         mov     ah, [panel_selected_cursor_color]
  5523. @@:
  5524.         mov     [ebp+7], ah
  5525.         jmp     .doname
  5526. .highlight_test_failed:
  5527.         inc     ecx
  5528.         cmp     ecx, [highlight_num_groups]
  5529.         jb      .highlight_test_loop
  5530. .nohighlight:
  5531.         mov     ah, [panel_normal_color]
  5532.         mov     [ebp+4], ah
  5533.         mov     ah, [panel_cursor_color]
  5534.         mov     [ebp+5], ah
  5535.         mov     ah, [panel_selected_color]
  5536.         mov     [ebp+6], ah
  5537.         mov     ah, [panel_selected_cursor_color]
  5538.         mov     [ebp+7], ah
  5539. .doname:
  5540.         popad
  5541.         ret
  5542.  
  5543. compare_name:
  5544.         test    byte [esi], 10h
  5545.         jnz     .1dir
  5546.         test    byte [edi], 10h
  5547.         jnz     .greater
  5548. .eq1:
  5549.         add     esi, 40
  5550.         add     edi, 40
  5551.         jmp     strcmpi
  5552. .greater:
  5553.         test    esi, esi
  5554.         ret
  5555. .1dir:
  5556.         test    byte [edi], 10h
  5557.         jnz     .eq1
  5558. .less:
  5559.         xor     edi, edi
  5560.         stc
  5561.         ret
  5562.  
  5563. compare_name_rev:
  5564.         test    byte [esi], 10h
  5565.         jnz     .1dir
  5566.         test    byte [edi], 10h
  5567.         jnz     .greater
  5568. .eq1:
  5569.         add     esi, 40
  5570.         add     edi, 40
  5571.         xchg    esi, edi
  5572.         jmp     strcmpi
  5573. .greater:
  5574.         test    esi, esi
  5575.         ret
  5576. .1dir:
  5577.         test    byte [edi], 10h
  5578.         jnz     .eq1
  5579. .less:
  5580.         xor     edi, edi
  5581.         stc
  5582.         ret
  5583.  
  5584. strcmpi:
  5585.         push    eax
  5586. @@:
  5587.         lodsb
  5588.         call    match_symbol
  5589.         jnz     .ret
  5590.         inc     edi
  5591.         test    al, al
  5592.         jnz     @b
  5593. .ret:
  5594.         pop     eax
  5595.         ret
  5596.  
  5597. compare_ext:
  5598.         test    byte [esi], 10h
  5599.         jnz     .1dir
  5600.         test    byte [edi], 10h
  5601.         jnz     .greater
  5602. .eq1:
  5603.         add     esi, 40
  5604.         add     edi, 40
  5605.         push    esi edi
  5606.         call    seek_ext
  5607.         xchg    esi, edi
  5608.         call    seek_ext
  5609.         xchg    esi, edi
  5610.         call    strcmpi
  5611.         jnz     .ret
  5612.         pop     edi esi
  5613.         jmp     strcmpi
  5614. .ret:
  5615.         pop     edi esi
  5616.         ret
  5617. .greater:
  5618.         test    esi, esi
  5619.         ret
  5620. .1dir:
  5621.         test    byte [edi], 10h
  5622.         jnz     .eq1
  5623. .less:
  5624.         xor     edi, edi
  5625.         stc
  5626.         ret
  5627.  
  5628. compare_ext_rev:
  5629.         test    byte [esi], 10h
  5630.         jnz     .1dir
  5631.         test    byte [edi], 10h
  5632.         jnz     .greater
  5633. .eq1:
  5634.         add     esi, 40
  5635.         add     edi, 40
  5636.         push    esi edi
  5637.         call    seek_ext
  5638.         xchg    esi, edi
  5639.         call    seek_ext
  5640.         call    strcmpi
  5641.         jnz     .ret
  5642.         pop     edi esi
  5643.         xchg    esi, edi
  5644.         jmp     strcmpi
  5645. .ret:
  5646.         pop     edi esi
  5647.         ret
  5648. .greater:
  5649.         test    esi, esi
  5650.         ret
  5651. .1dir:
  5652.         test    byte [edi], 10h
  5653.         jnz     .eq1
  5654. .less:
  5655.         xor     edi, edi
  5656.         stc
  5657.         ret
  5658.  
  5659. seek_ext:
  5660.         push    eax
  5661.         xor     eax, eax
  5662. .l:
  5663.         inc     esi
  5664.         cmp     byte [esi-1], '.'
  5665.         jnz     @f
  5666.         mov     eax, esi
  5667. @@:
  5668.         cmp     byte [esi-1], 0
  5669.         jnz     .l
  5670.         test    eax, eax
  5671.         jnz     @f
  5672.         lea     eax, [esi-1]
  5673. @@:
  5674.         mov     esi, eax
  5675.         pop     eax
  5676.         ret
  5677.  
  5678. compare_modified:
  5679.         test    byte [esi], 10h
  5680.         jnz     .1dir
  5681.         test    byte [edi], 10h
  5682.         jnz     .greater
  5683. .eq1:
  5684.         push    edi
  5685.         mov     edi, [edi+28]
  5686.         cmp     edi, [esi+28]
  5687.         pop     edi
  5688.         jnz     @f
  5689.         push    edi
  5690.         mov     edi, [edi+24]
  5691.         cmp     edi, [esi+24]
  5692.         pop     edi
  5693.         jnz     @f
  5694.         add     esi, 40
  5695.         add     edi, 40
  5696.         jmp     strcmpi
  5697. @@:
  5698.         ret
  5699. .greater:
  5700.         test    esi, esi
  5701.         ret
  5702. .1dir:
  5703.         test    byte [edi], 10h
  5704.         jnz     .eq1
  5705. .less:
  5706.         xor     edi, edi
  5707.         stc
  5708.         ret
  5709.  
  5710. compare_modified_rev:
  5711.         test    byte [esi], 10h
  5712.         jnz     .1dir
  5713.         test    byte [edi], 10h
  5714.         jnz     .greater
  5715. .eq1:
  5716.         push    esi
  5717.         mov     esi, [esi+28]
  5718.         cmp     esi, [edi+28]
  5719.         pop     esi
  5720.         jnz     @f
  5721.         push    esi
  5722.         mov     esi, [esi+24]
  5723.         cmp     esi, [edi+24]
  5724.         pop     esi
  5725.         jnz     @f
  5726.         add     esi, 40
  5727.         add     edi, 40
  5728.         xchg    esi, edi
  5729.         jmp     strcmpi
  5730. @@:
  5731.         ret
  5732. .greater:
  5733.         test    esi, esi
  5734.         ret
  5735. .1dir:
  5736.         test    byte [edi], 10h
  5737.         jnz     .eq1
  5738. .less:
  5739.         xor     edi, edi
  5740.         stc
  5741.         ret
  5742.  
  5743. compare_size:
  5744.         test    byte [esi], 10h
  5745.         jnz     .1dir
  5746.         test    byte [edi], 10h
  5747.         jnz     .greater
  5748. .eq1:
  5749.         push    edi
  5750.         mov     edi, [edi+36]
  5751.         cmp     edi, [esi+36]
  5752.         pop     edi
  5753.         jnz     @f
  5754.         push    edi
  5755.         mov     edi, [edi+32]
  5756.         cmp     edi, [esi+32]
  5757.         pop     edi
  5758.         jnz     @f
  5759.         add     esi, 40
  5760.         add     edi, 40
  5761.         jmp     strcmpi
  5762. @@:
  5763.         ret
  5764. .greater:
  5765.         test    esi, esi
  5766.         ret
  5767. .1dir:
  5768.         test    byte [edi], 10h
  5769.         jnz     .eq1
  5770. .less:
  5771.         xor     edi, edi
  5772.         stc
  5773.         ret
  5774.  
  5775. compare_size_rev:
  5776.         test    byte [esi], 10h
  5777.         jnz     .1dir
  5778.         test    byte [edi], 10h
  5779.         jnz     .greater
  5780. .eq1:
  5781.         push    esi
  5782.         mov     esi, [esi+36]
  5783.         cmp     esi, [edi+36]
  5784.         pop     esi
  5785.         jnz     @f
  5786.         push    esi
  5787.         mov     esi, [esi+32]
  5788.         cmp     esi, [edi+32]
  5789.         pop     esi
  5790.         jnz     @f
  5791.         add     esi, 40
  5792.         add     edi, 40
  5793.         xchg    esi, edi
  5794.         jmp     strcmpi
  5795. @@:
  5796.         ret
  5797. .greater:
  5798.         test    esi, esi
  5799.         ret
  5800. .1dir:
  5801.         test    byte [edi], 10h
  5802.         jnz     .eq1
  5803. .less:
  5804.         xor     edi, edi
  5805.         stc
  5806.         ret
  5807.  
  5808. compare_unordered:
  5809.         cmp     esi, edi
  5810.         ret
  5811. compare_unordered_rev:
  5812.         cmp     edi, esi
  5813.         ret
  5814.  
  5815. compare_created:
  5816.         test    byte [esi], 10h
  5817.         jnz     .1dir
  5818.         test    byte [edi], 10h
  5819.         jnz     .greater
  5820. .eq1:
  5821.         push    edi
  5822.         mov     edi, [edi+12]
  5823.         cmp     edi, [esi+12]
  5824.         pop     edi
  5825.         jnz     @f
  5826.         push    edi
  5827.         mov     edi, [edi+8]
  5828.         cmp     edi, [esi+8]
  5829.         pop     edi
  5830.         jnz     @f
  5831.         add     esi, 40
  5832.         add     edi, 40
  5833.         jmp     strcmpi
  5834. @@:
  5835.         ret
  5836. .greater:
  5837.         test    esi, esi
  5838.         ret
  5839. .1dir:
  5840.         test    byte [edi], 10h
  5841.         jnz     .eq1
  5842. .less:
  5843.         xor     edi, edi
  5844.         stc
  5845.         ret
  5846.  
  5847. compare_created_rev:
  5848.         test    byte [esi], 10h
  5849.         jnz     .1dir
  5850.         test    byte [edi], 10h
  5851.         jnz     .greater
  5852. .eq1:
  5853.         push    esi
  5854.         mov     esi, [esi+12]
  5855.         cmp     esi, [edi+12]
  5856.         pop     esi
  5857.         jnz     @f
  5858.         push    esi
  5859.         mov     esi, [esi+8]
  5860.         cmp     esi, [edi+8]
  5861.         pop     esi
  5862.         jnz     @f
  5863.         add     esi, 40
  5864.         add     edi, 40
  5865.         xchg    esi, edi
  5866.         jmp     strcmpi
  5867. @@:
  5868.         ret
  5869. .greater:
  5870.         test    esi, esi
  5871.         ret
  5872. .1dir:
  5873.         test    byte [edi], 10h
  5874.         jnz     .eq1
  5875. .less:
  5876.         xor     edi, edi
  5877.         stc
  5878.         ret
  5879.  
  5880. compare_accessed:
  5881.         test    byte [esi], 10h
  5882.         jnz     .1dir
  5883.         test    byte [edi], 10h
  5884.         jnz     .greater
  5885. .eq1:
  5886.         push    edi
  5887.         mov     edi, [edi+20]
  5888.         cmp     edi, [esi+20]
  5889.         pop     edi
  5890.         jnz     @f
  5891.         push    edi
  5892.         mov     edi, [edi+16]
  5893.         cmp     edi, [esi+16]
  5894.         pop     edi
  5895.         jnz     @f
  5896.         add     esi, 40
  5897.         add     edi, 40
  5898.         jmp     strcmpi
  5899. @@:
  5900.         ret
  5901. .greater:
  5902.         test    esi, esi
  5903.         ret
  5904. .1dir:
  5905.         test    byte [edi], 10h
  5906.         jnz     .eq1
  5907. .less:
  5908.         xor     edi, edi
  5909.         stc
  5910.         ret
  5911.  
  5912. compare_accessed_rev:
  5913.         test    byte [esi], 10h
  5914.         jnz     .1dir
  5915.         test    byte [edi], 10h
  5916.         jnz     .greater
  5917. .eq1:
  5918.         push    esi
  5919.         mov     esi, [esi+20]
  5920.         cmp     esi, [edi+20]
  5921.         pop     esi
  5922.         jnz     @f
  5923.         push    esi
  5924.         mov     esi, [esi+16]
  5925.         cmp     esi, [edi+16]
  5926.         pop     esi
  5927.         jnz     @f
  5928.         add     esi, 40
  5929.         add     edi, 40
  5930.         xchg    esi, edi
  5931.         jmp     strcmpi
  5932. @@:
  5933.         ret
  5934. .greater:
  5935.         test    esi, esi
  5936.         ret
  5937. .1dir:
  5938.         test    byte [edi], 10h
  5939.         jnz     .eq1
  5940. .less:
  5941.         xor     edi, edi
  5942.         stc
  5943.         ret
  5944.  
  5945. ReadFolder_default:
  5946.         mov     eax, 2
  5947.         ret     10h
  5948.  
  5949. if 0
  5950. ; Following subroutines work, but are slow
  5951. match_mask:
  5952. ; in: esi->name, edi->mask
  5953. ; out: CF clear <=> match
  5954.         pusha
  5955.         xchg    esi, edi
  5956. .main_cycle:
  5957.         push    esi
  5958. @@:
  5959.         lodsb
  5960.         test    al, al
  5961.         jz      @f
  5962.         cmp     al, ','
  5963.         jz      @f
  5964.         cmp     al, '|'
  5965.         jnz     @b
  5966. @@:
  5967.         mov     [esi-1], byte 0
  5968.         xchg    esi, [esp]
  5969.         call    match_single_mask
  5970.         pop     esi
  5971.         mov     [esi-1], al
  5972.         jnc     .found
  5973.         cmp     al, ','
  5974.         jz      .main_cycle
  5975. .done_fail:
  5976.         stc
  5977.         popa
  5978.         ret
  5979. .found:
  5980.         test    al, al
  5981.         jz      .done_succ
  5982.         cmp     al, '|'
  5983.         jz      .test_exclude
  5984.         lodsb
  5985.         jmp     .found
  5986. .done_succ:
  5987.         clc
  5988.         popa
  5989.         ret
  5990. .test_exclude:
  5991.         push    esi
  5992. @@:
  5993.         lodsb
  5994.         test    al, al
  5995.         jz      @f
  5996.         cmp     al, ','
  5997.         jnz     @b
  5998. @@:
  5999.         mov     byte [esi-1], 0
  6000.         xchg    esi, [esp]
  6001.         call    match_single_mask
  6002.         pop     esi
  6003.         mov     [esi-1], al
  6004.         jnc     .done_fail
  6005.         test    al, al
  6006.         jz      .done_succ
  6007.         jmp     .test_exclude
  6008.  
  6009. match_single_mask:
  6010. ; in: esi->mask, edi->name
  6011. ; out: CF clear <=> match
  6012.         pusha
  6013. .mask_symbol:
  6014.         lodsb
  6015.         test    al, al
  6016.         jz      .mask_done
  6017.         cmp     al, '*'
  6018.         jz      .asterisk
  6019.         cmp     al, '?'
  6020.         jz      .quest
  6021.         cmp     al, '['
  6022.         jz      .list
  6023.         call    match_symbol
  6024.         jnz     .done_fail
  6025.         inc     edi
  6026.         jmp     .mask_symbol
  6027. .done_fail:
  6028.         stc
  6029.         popa
  6030.         ret
  6031. .mask_done:
  6032.         scasb
  6033.         jnz     .done_fail
  6034. .done_succ:
  6035.         clc
  6036.         popa
  6037.         ret
  6038. .quest:
  6039.         mov     al, 0
  6040.         scasb
  6041.         jz      .done_fail
  6042.         jmp     .mask_symbol
  6043. .list:
  6044.         lodsb
  6045.         cmp     al, ']'
  6046.         jz      .done_fail
  6047.         cmp     byte [esi+1], '-'
  6048.         jz      .range
  6049.         call    match_symbol
  6050.         jnz     .list
  6051. .listok:
  6052.         inc     edi
  6053. @@:
  6054.         lodsb
  6055.         cmp     al, ']'
  6056.         jnz     @b
  6057.         jmp     .mask_symbol
  6058. .range:
  6059.         call    match_symbol
  6060.         ja      @f
  6061.         mov     al, [esi+2]
  6062.         call    match_symbol
  6063.         jae     .listok
  6064. @@:
  6065.         inc     esi
  6066.         jmp     .list
  6067. .asterisk:
  6068.         cmp     byte [esi], 0
  6069.         jz      .done_succ
  6070.         cmp     byte [esi], '?'
  6071.         jnz     @f
  6072.         mov     al, 0
  6073.         scasb
  6074.         jz      .done_fail
  6075.         inc     esi
  6076.         jmp     .asterisk
  6077. @@:
  6078.         cmp     byte [esi], '['
  6079.         jz      .asterisk_common
  6080. ; the mask is ...*<normal-symbol>...
  6081. .asterisk_normal:
  6082.         mov     al, [esi]
  6083. @@:
  6084.         cmp     byte [edi], 0
  6085.         jz      .done_fail
  6086.         call    match_symbol
  6087.         jz      @f
  6088.         inc     edi
  6089.         jmp     @b
  6090. @@:
  6091.         inc     edi
  6092.         inc     esi
  6093.         call    match_single_mask
  6094.         jnc     .done_succ
  6095.         dec     esi
  6096.         jmp     .asterisk_normal
  6097. .asterisk_common:
  6098.         push    edi
  6099. @@:
  6100.         call    match_single_mask
  6101.         jnc     @f
  6102.         mov     al, 0
  6103.         scasb
  6104.         jnz     @b
  6105.         pop     edi
  6106.         jmp     .done_fail
  6107. @@:
  6108.         pop     edi
  6109.         jmp     .done_succ
  6110.  
  6111. match_mask_rev:
  6112. ; in: esi->name, edx->end of name, edi->mask
  6113. ; out: CF clear <=> match
  6114.         pusha
  6115.         xchg    esi, edx
  6116.         xchg    esi, edi
  6117. .main_cycle:
  6118.         mov     ecx, esi
  6119. @@:
  6120.         lodsb
  6121.         test    al, al
  6122.         jz      @f
  6123.         cmp     al, ','
  6124.         jz      @f
  6125.         cmp     al, '|'
  6126.         jnz     @b
  6127. @@:
  6128.         dec     esi
  6129.         mov     [esi], byte 0
  6130.         call    match_single_mask_rev2
  6131.         mov     [esi], al
  6132.         inc     esi
  6133.         jnc     .found
  6134.         cmp     al, ','
  6135.         jz      .main_cycle
  6136. .done_fail:
  6137.         stc
  6138.         popa
  6139.         ret
  6140. .found:
  6141.         test    al, al
  6142.         jz      .done_succ
  6143.         cmp     al, '|'
  6144.         jz      .test_exclude
  6145.         lodsb
  6146.         jmp     .found
  6147. .done_succ:
  6148.         clc
  6149.         popa
  6150.         ret
  6151. .test_exclude:
  6152.         mov     ecx, esi
  6153. @@:
  6154.         lodsb
  6155.         test    al, al
  6156.         jz      @f
  6157.         cmp     al, ','
  6158.         jnz     @b
  6159. @@:
  6160.         dec     esi
  6161.         mov     byte [esi], 0
  6162.         call    match_single_mask_rev2
  6163.         mov     [esi], al
  6164.         inc     esi
  6165.         jnc     .done_fail
  6166.         test    al, al
  6167.         jz      .done_succ
  6168.         jmp     .test_exclude
  6169.  
  6170. match_single_mask_rev2:
  6171.         pusha
  6172.         jmp     match_single_mask_rev.mask_symbol
  6173. match_single_mask_rev:
  6174. ; in: esi->mask, edi->end of name, edx->start of name
  6175. ; out: CF clear <=> match
  6176.         pusha
  6177.         mov     ecx, esi
  6178. @@:
  6179.         lodsb
  6180.         test    al, al
  6181.         jnz     @b
  6182.         dec     esi
  6183. ; esi->end of mask, ecx->start of mask
  6184. .mask_symbol:
  6185.         dec     esi
  6186.         cmp     esi, ecx
  6187.         jb      .mask_done
  6188.         mov     al, [esi]
  6189.         cmp     al, '*'
  6190.         jz      .asterisk
  6191.         cmp     al, '?'
  6192.         jz      .quest
  6193.         cmp     al, ']'
  6194.         jz      .list
  6195.         dec     edi
  6196.         cmp     edi, edx
  6197.         jb      .done_fail
  6198.         call    match_symbol
  6199.         jz      .mask_symbol
  6200. .done_fail:
  6201.         stc
  6202.         popa
  6203.         ret
  6204. .mask_done:
  6205.         cmp     edi, edx
  6206.         jnz     .done_fail
  6207. .done_succ:
  6208.         clc
  6209.         popa
  6210.         ret
  6211. .quest:
  6212.         dec     edi
  6213.         cmp     edi, edx
  6214.         jb      .done_fail
  6215.         jmp     .mask_symbol
  6216. .list:
  6217.         dec     edi
  6218.         cmp     edi, edx
  6219.         jb      .done_fail
  6220. .list_check:
  6221.         dec     esi
  6222.         cmp     esi, ecx
  6223.         jbe     .done_fail
  6224.         mov     al, [esi]
  6225.         cmp     al, '['
  6226.         jz      .done_fail
  6227.         cmp     byte [esi-1], '-'
  6228.         jz      .range
  6229.         call    match_symbol
  6230.         jnz     .list_check
  6231. .listok:
  6232. @@:
  6233.         dec     esi
  6234.         cmp     esi, ecx
  6235.         jb      .done_fail
  6236.         cmp     byte [esi], '['
  6237.         jnz     @b
  6238.         jmp     .mask_symbol
  6239. .range:
  6240.         call    match_symbol
  6241.         jb      @f
  6242.         mov     al, [esi-2]
  6243.         call    match_symbol
  6244.         jbe     .listok
  6245. @@:
  6246.         dec     esi
  6247.         dec     esi
  6248.         jmp     .list_check
  6249. .asterisk:
  6250.         cmp     esi, ecx
  6251.         jz      .done_succ
  6252.         cmp     byte [esi-1], '?'
  6253.         jnz     @f
  6254.         cmp     edi, edx
  6255.         jz      .done_fail
  6256.         dec     esi
  6257.         jmp     .asterisk
  6258. @@:
  6259.         cmp     byte [esi-1], ']'
  6260.         jz      .asterisk_common
  6261. ; the mask is ...<normal-symbol>*...
  6262. .asterisk_normal:
  6263.         mov     al, [esi-1]
  6264. @@:
  6265.         cmp     edi, edx
  6266.         jz      .done_fail
  6267.         call    match_symbol
  6268.         jz      @f
  6269.         dec     edi
  6270.         jmp     @b
  6271. @@:
  6272.         dec     edi
  6273.         dec     esi
  6274.         call    match_single_mask_rev2
  6275.         jnc     .done_succ
  6276.         inc     esi
  6277.         jmp     .asterisk_normal
  6278. .asterisk_common:
  6279.         push    edi
  6280. @@:
  6281.         call    match_single_mask_rev2
  6282.         jnc     @f
  6283.         dec     edi
  6284.         cmp     edi, edx
  6285.         jae     @b
  6286.         pop     edi
  6287.         jmp     .done_fail
  6288. @@:
  6289.         pop     edi
  6290.         jmp     .done_succ
  6291. end if
  6292.  
  6293. ;tolower:
  6294. ;        push    ecx
  6295. ;        movzx   ecx, al
  6296. ;        mov     al, [tolower_table+ecx]
  6297. ;        pop     ecx
  6298. ;        ret
  6299.  
  6300. match_symbol:
  6301. ; in: al,[edi]=symbols
  6302. ; out: flags as 'cmp al,[edi]'
  6303.         push    eax ecx
  6304.         movzx   ecx, al
  6305.         mov     al, [tolower_table+ecx]
  6306.         movzx   ecx, byte [edi]
  6307.         cmp     al, [tolower_table+ecx]
  6308.         pop     ecx eax
  6309.         ret
  6310.  
  6311. match_mask_rev_lowercase:
  6312. ; in: esi->name, edx->end of name, edi->mask
  6313. ; out: CF clear <=> match
  6314.         pusha
  6315.         xchg    esi, edx
  6316.         xchg    esi, edi
  6317. .main_cycle:
  6318.         mov     ecx, esi
  6319. @@:
  6320.         lodsb
  6321.         test    al, al
  6322.         jz      @f
  6323.         cmp     al, ','
  6324.         jz      @f
  6325.         cmp     al, ';'
  6326.         jz      @f
  6327.         cmp     al, '|'
  6328.         jnz     @b
  6329. @@:
  6330.         dec     esi
  6331.         mov     [esi], byte 0
  6332.         call    match_single_mask_rev_lowercase
  6333.         mov     [esi], al
  6334.         inc     esi
  6335.         jnc     .found
  6336.         cmp     al, ','
  6337.         jz      .main_cycle
  6338.         cmp     al, ';'
  6339.         jz      .main_cycle
  6340. .done_fail:
  6341.         stc
  6342.         popa
  6343.         ret
  6344. .found:
  6345.         test    al, al
  6346.         jz      .done_succ
  6347.         cmp     al, '|'
  6348.         jz      .test_exclude
  6349.         lodsb
  6350.         jmp     .found
  6351. .done_succ:
  6352.         clc
  6353.         popa
  6354.         ret
  6355. .test_exclude:
  6356.         mov     ecx, esi
  6357. @@:
  6358.         lodsb
  6359.         test    al, al
  6360.         jz      @f
  6361.         cmp     al, ','
  6362.         jz      @f
  6363.         cmp     al, ';'
  6364.         jnz     @b
  6365. @@:
  6366.         dec     esi
  6367.         mov     byte [esi], 0
  6368.         call    match_single_mask_rev_lowercase
  6369.         mov     [esi], al
  6370.         inc     esi
  6371.         jnc     .done_fail
  6372.         test    al, al
  6373.         jz      .done_succ
  6374.         jmp     .test_exclude
  6375.  
  6376. match_single_mask_rev_lowercase:
  6377. ; in: esi->end of mask, ecx->start of mask, edi->end of name, edx->start of name
  6378. ; out: CF clear <=> match
  6379.         push    esi edi eax
  6380. .mask_symbol:
  6381.         dec     esi
  6382.         cmp     esi, ecx
  6383.         jb      .mask_done
  6384.         mov     al, [esi]
  6385.         cmp     al, '*'
  6386.         jz      .asterisk
  6387.         cmp     al, '?'
  6388.         jz      .quest
  6389.         cmp     al, ']'
  6390.         jz      .list
  6391.         dec     edi
  6392.         cmp     edi, edx
  6393.         jb      .done_fail
  6394.         cmp     al, [edi]
  6395.         jz      .mask_symbol
  6396. .done_fail:
  6397.         stc
  6398.         pop     eax edi esi
  6399.         ret
  6400. .mask_done:
  6401.         cmp     edi, edx
  6402.         jnz     .done_fail
  6403. .done_succ:
  6404.         clc
  6405.         pop     eax edi esi
  6406.         ret
  6407. .quest:
  6408.         dec     edi
  6409.         cmp     edi, edx
  6410.         jb      .done_fail
  6411.         jmp     .mask_symbol
  6412. .list:
  6413.         dec     edi
  6414.         cmp     edi, edx
  6415.         jb      .done_fail
  6416. .list_check:
  6417.         dec     esi
  6418.         cmp     esi, ecx
  6419.         jbe     .done_fail
  6420.         mov     al, [esi]
  6421.         cmp     al, '['
  6422.         jz      .done_fail
  6423.         cmp     byte [esi-1], '-'
  6424.         jz      .range
  6425.         cmp     al, [edi]
  6426.         jnz     .list_check
  6427. .listok:
  6428. @@:
  6429.         dec     esi
  6430.         cmp     esi, ecx
  6431.         jb      .done_fail
  6432.         cmp     byte [esi], '['
  6433.         jnz     @b
  6434.         jmp     .mask_symbol
  6435. .range:
  6436.         cmp     al, [edi]
  6437.         jb      @f
  6438.         mov     al, [esi-2]
  6439.         cmp     al, [edi]
  6440.         jbe     .listok
  6441. @@:
  6442.         dec     esi
  6443.         dec     esi
  6444.         jmp     .list_check
  6445. .asterisk:
  6446.         cmp     esi, ecx
  6447.         jz      .done_succ
  6448.         cmp     byte [esi-1], '?'
  6449.         jnz     @f
  6450.         cmp     edi, edx
  6451.         jz      .done_fail
  6452.         dec     esi
  6453.         jmp     .asterisk
  6454. @@:
  6455.         cmp     byte [esi-1], ']'
  6456.         jz      .asterisk_common
  6457. ; the mask is ...<normal-symbol>*...
  6458. .asterisk_normal:
  6459.         mov     al, [esi-1]
  6460. @@:
  6461.         cmp     edi, edx
  6462.         jz      .done_fail
  6463.         cmp     al, [edi]
  6464.         jz      @f
  6465.         dec     edi
  6466.         jmp     @b
  6467. @@:
  6468.         dec     edi
  6469.         dec     esi
  6470.         call    match_single_mask_rev_lowercase
  6471.         jnc     .done_succ
  6472.         inc     esi
  6473.         jmp     .asterisk_normal
  6474. .asterisk_common:
  6475.         push    edi
  6476. @@:
  6477.         call    match_single_mask_rev_lowercase
  6478.         jnc     @f
  6479.         dec     edi
  6480.         cmp     edi, edx
  6481.         jae     @b
  6482.         pop     edi
  6483.         jmp     .done_fail
  6484. @@:
  6485.         pop     edi
  6486.         jmp     .done_succ
  6487.  
  6488. find_extension:
  6489.         lea     esi, [ecx+40]
  6490.         push    esi
  6491. @@:
  6492.         lodsb
  6493.         test    al, al
  6494.         jnz     @b
  6495. @@:
  6496.         dec     esi
  6497.         cmp     byte [esi], '.'
  6498.         jz      .found_ext
  6499.         cmp     esi, [esp]
  6500.         ja      @b
  6501. ; empty extension
  6502.         pop     esi
  6503.         stc
  6504.         ret
  6505. .found_ext:
  6506.         inc     esi
  6507.         mov     edi, [associations]
  6508.         test    edi, edi
  6509.         jz      .notfound
  6510. .find_loop:
  6511.         push    esi edi
  6512.         call    strcmpi
  6513.         pop     edi esi
  6514.         pushf
  6515. @@:
  6516.         inc     edi
  6517.         cmp     byte [edi-1], 0
  6518.         jnz     @b
  6519.         popf
  6520.         jz      .found
  6521. @@:
  6522.         inc     edi
  6523.         cmp     byte [edi-1], 0
  6524.         jnz     @b
  6525.         cmp     byte [edi], 0
  6526.         jnz     .find_loop
  6527. .notfound:
  6528. ; unknown extension
  6529.         stc
  6530. .found:
  6531.         pop     esi
  6532.         ret
  6533.  
  6534. header  db      'Kolibri Far ',version,0
  6535.  
  6536. nomem_draw      db      'No memory for redraw.',0
  6537. .size = $ - nomem_draw
  6538.  
  6539. def_left_dir    db      '/rd/1',0
  6540. def_right_dir   db      '/hd0/1',0
  6541.  
  6542. bSilentFolderMode db    1
  6543.  
  6544. bQuickSearchMode db     0
  6545. bDisplayQuickSearch db  0
  6546.  
  6547. if lang eq ru
  6548. aFolder         db      ' ¯ª '
  6549. .size = $-aFolder
  6550. aUp             db      '‚¢¥àå'
  6551. .size = $-aUp
  6552. aDrive          db      '„¨áª',0
  6553. aScreens        db      'ªà ­ë',0
  6554. else
  6555. aFolder         db      'Folder'
  6556. .size = $-aFolder
  6557. aUp             db      'Up'
  6558. .size = $-aUp
  6559. aDrive          db      'Drive',0
  6560. aScreens        db      'Screens',0
  6561. end if
  6562.  
  6563. align 4
  6564. _10d dd 10
  6565. _100d dd 100
  6566. muldiv10 dd 429496729
  6567. _10 db 10
  6568. _100 db 100
  6569.  
  6570. fpu_cw  dw      000011100111111b
  6571.  
  6572. keybar_panels:
  6573. if lang eq ru
  6574. ; ¡¥§ ª« ¢¨è-¬®¤¨ä¨ª â®à®¢
  6575.         db      '®¬®éì'
  6576.         db      '®«ì§Œ'
  6577.         db      'à®á¬ '
  6578.         db      '¥¤ ªâ'
  6579.         db      'Š®¯¨à '
  6580.         db      '¥à¥­ '
  6581.         db      ' ¯ª  '
  6582.         db      '“¤ «¥­'
  6583.         db      'Š®­äŒ­'
  6584.         db      '‚ë室 '
  6585.         db      'Œ®¤ã«¨'
  6586.         db      'ªà ­ë'
  6587. ; Shift
  6588.         db      '„®¡ ¢«'
  6589.         db      ' á¯ ª'
  6590.         db      '€à劮¬'
  6591.         db      '¥¤ ª.'
  6592.         db      'Š®¯¨à '
  6593.         db      '¥à¥¨¬'
  6594.         db      '      '
  6595.         db      '“¤ «¥­'
  6596.         db      '‘®åà ­'
  6597.         db      '®á«¤­'
  6598.         db      'ƒà㯯ë'
  6599.         db      '‚ë¡à ­'
  6600. ; Ctrl
  6601.         db      '‹¥¢ ï '
  6602.         db      'à ¢ ï'
  6603.         db      'ˆ¬ï   '
  6604.         db      ' áè¨à'
  6605.         db      'Œ®¤¨ä '
  6606.         db      ' §¬¥à'
  6607.         db      '¥á®àâ'
  6608.         db      '‘®§¤ ­'
  6609.         db      '„®áâã¯'
  6610.         db      'Ž¯¨á ­'
  6611.         db      '‚« ¤¥«'
  6612.         db      '‘®àâ  '
  6613. ; Ctrl+Shift
  6614.         db      '      '
  6615.         db      '      '
  6616.         db      'à®á¬ '
  6617.         db      '¥¤ ªâ'
  6618.         db      '      '
  6619.         db      '      '
  6620.         db      '      '
  6621.         db      '      '
  6622.         db      '      '
  6623.         db      '      '
  6624.         db      '      '
  6625.         db      '      '
  6626. ; Alt
  6627.         db      '‹¥¢ ï '
  6628.         db      'à ¢ ï'
  6629.         db      '‘¬®âà.'
  6630.         db      '¥¤ ª.'
  6631.         db      '¥ç âì'
  6632.         db      '‘¢ï§ì '
  6633.         db      'ˆáª âì'
  6634.         db      'ˆáâ®à '
  6635.         db      '‚¨¤¥® '
  6636.         db      '„¥à¥¢®'
  6637.         db      'ˆáâà '
  6638.         db      'ˆá⏠¯'
  6639. ; Alt+Shift
  6640.         db      '      '
  6641.         db      '      '
  6642.         db      '      '
  6643.         db      '      '
  6644.         db      '      '
  6645.         db      '      '
  6646.         db      '      '
  6647.         db      '      '
  6648.         db      'Š®­ä«'
  6649.         db      '      '
  6650.         db      '      '
  6651.         db      '      '
  6652. ; Alt+Ctrl
  6653. times 12 db     '      '
  6654. ; Alt+Ctrl+Shift
  6655. times 12 db     '      '
  6656. else
  6657. ; No modificators
  6658.         db      'Help  '
  6659.         db      'UserMn'
  6660.         db      'View  '
  6661.         db      'Edit  '
  6662.         db      'Copy  '
  6663.         db      'RenMov'
  6664.         db      'MkFold'
  6665.         db      'Delete'
  6666.         db      'ConfMn'
  6667.         db      'Quit  '
  6668.         db      'Plugin'
  6669.         db      'Screen'
  6670. ; Shift
  6671.         db      'Add   '
  6672.         db      'Extrct'
  6673.         db      'ArcCmd'
  6674.         db      'Edit..'
  6675.         db      'Copy  '
  6676.         db      'Rename'
  6677.         db      '      '
  6678.         db      'Delete'
  6679.         db      'Save  '
  6680.         db      'Last  '
  6681.         db      'Group '
  6682.         db      'SelUp '
  6683. ; Ctrl
  6684.         db      'Left  '
  6685.         db      'Right '
  6686.         db      'Name  '
  6687.         db      'Extens'
  6688.         db      'Modifn'
  6689.         db      'Size  '
  6690.         db      'Unsort'
  6691.         db      'Creatn'
  6692.         db      'Access'
  6693.         db      'Descr '
  6694.         db      'Owner '
  6695.         db      'Sort  '
  6696. ; Ctrl+Shift
  6697.         db      '      '
  6698.         db      '      '
  6699.         db      'View  '
  6700.         db      'Edit  '
  6701.         db      '      '
  6702.         db      '      '
  6703.         db      '      '
  6704.         db      '      '
  6705.         db      '      '
  6706.         db      '      '
  6707.         db      '      '
  6708.         db      '      '
  6709. ; Alt
  6710.         db      'Left  '
  6711.         db      'Right '
  6712.         db      'View..'
  6713.         db      'Edit..'
  6714.         db      'Print '
  6715.         db      'MkLink'
  6716.         db      'Find  '
  6717.         db      'Histry'
  6718.         db      'Video '
  6719.         db      'Tree  '
  6720.         db      'ViewHs'
  6721.         db      'FoldHs'
  6722. ; Alt+Shift
  6723.         db      '      '
  6724.         db      '      '
  6725.         db      '      '
  6726.         db      '      '
  6727.         db      '      '
  6728.         db      '      '
  6729.         db      '      '
  6730.         db      '      '
  6731.         db      'ConfPl'
  6732.         db      '      '
  6733.         db      '      '
  6734.         db      '      '
  6735. ; Alt+Ctrl
  6736. times 12 db     '      '
  6737. ; Alt+Ctrl+Shift
  6738. times 12 db     '      '
  6739. end if
  6740.  
  6741. keybar_viewer:
  6742. if lang eq ru
  6743. ; ¡¥§ ª« ¢¨è-¬®¤¨ä¨ª â®à®¢
  6744.         db      '®¬®éì'
  6745.         db      ' §¢¥à'
  6746.         db      '‚ë室 '
  6747.         db      'Š®¤   '
  6748.         db      '      '
  6749.         db      '¥¤ ªâ'
  6750.         db      '®¨áª '
  6751. keybar_cp:
  6752.         db      'cp1251'
  6753.         db      '      '
  6754.         db      '‚ë室 '
  6755.         db      'Œ®¤ã«¨'
  6756.         db      'ªà ­ë'
  6757. ; Shift
  6758.         db      '      '
  6759.         db      '‘«®¢  '
  6760.         db      '      '
  6761.         db      '      '
  6762.         db      '      '
  6763.         db      '      '
  6764.         db      '„ «ìè¥'
  6765.         db      '’ ¡«¨æ'
  6766.         db      '      '
  6767.         db      '      '
  6768.         db      '      '
  6769.         db      '      '
  6770. ; Ctrl
  6771.         db      '      '
  6772.         db      '      '
  6773.         db      '      '
  6774.         db      '      '
  6775.         db      '      '
  6776.         db      '      '
  6777.         db      '      '
  6778.         db      '      '
  6779.         db      '      '
  6780.         db      '®§¨æ '
  6781.         db      '      '
  6782.         db      '      '
  6783. ; Ctrl+Shift
  6784.         db      '      '
  6785.         db      '      '
  6786.         db      '      '
  6787.         db      '      '
  6788.         db      '      '
  6789.         db      '      '
  6790.         db      '      '
  6791.         db      '      '
  6792.         db      '      '
  6793.         db      '      '
  6794.         db      '      '
  6795.         db      '      '
  6796. ; Alt
  6797.         db      '      '
  6798.         db      '      '
  6799.         db      '      '
  6800.         db      '      '
  6801.         db      '¥ç âì'
  6802.         db      '      '
  6803.         db      ' § ¤ '
  6804.         db      '¥à¥©â'
  6805.         db      '‚¨¤¥® '
  6806.         db      '      '
  6807.         db      'ˆáâà '
  6808.         db      '      '
  6809. ; Alt+Shift
  6810.         db      '      '
  6811.         db      '      '
  6812.         db      '      '
  6813.         db      '      '
  6814.         db      '      '
  6815.         db      '      '
  6816.         db      '      '
  6817.         db      '      '
  6818.         db      'Š®­ä¨£'
  6819.         db      '      '
  6820.         db      '      '
  6821.         db      '      '
  6822. ; Alt+Ctrl
  6823. times 12 db     '      '
  6824. ; Alt+Ctrl+Shift
  6825. times 12 db     '      '
  6826. else
  6827. ; No modificators
  6828.         db      'Help  '
  6829.         db      'Unwrap'
  6830.         db      'Quit  '
  6831.         db      'Hex   '
  6832.         db      '      '
  6833.         db      'Edit  '
  6834.         db      'Search'
  6835. keybar_cp:
  6836.         db      'cp1251'
  6837.         db      '      '
  6838.         db      'Quit  '
  6839.         db      'Plugin'
  6840.         db      'Screen'
  6841. ; Shift
  6842.         db      '      '
  6843.         db      'WWrap '
  6844.         db      '      '
  6845.         db      '      '
  6846.         db      '      '
  6847.         db      '      '
  6848.         db      'Next  '
  6849.         db      'Table '
  6850.         db      '      '
  6851.         db      '      '
  6852.         db      '      '
  6853.         db      '      '
  6854. ; Ctrl
  6855.         db      '      '
  6856.         db      '      '
  6857.         db      '      '
  6858.         db      '      '
  6859.         db      '      '
  6860.         db      '      '
  6861.         db      '      '
  6862.         db      '      '
  6863.         db      '      '
  6864.         db      'GoFile'
  6865.         db      '      '
  6866.         db      '      '
  6867. ; Ctrl+Shift
  6868.         db      '      '
  6869.         db      '      '
  6870.         db      '      '
  6871.         db      '      '
  6872.         db      '      '
  6873.         db      '      '
  6874.         db      '      '
  6875.         db      '      '
  6876.         db      '      '
  6877.         db      '      '
  6878.         db      '      '
  6879.         db      '      '
  6880. ; Alt
  6881.         db      '      '
  6882.         db      '      '
  6883.         db      '      '
  6884.         db      '      '
  6885.         db      'Print '
  6886.         db      '      '
  6887.         db      'Prev  '
  6888.         db      'Goto  '
  6889.         db      'Video '
  6890.         db      '      '
  6891.         db      'ViewHs'
  6892.         db      '      '
  6893. ; Alt+Shift
  6894.         db      '      '
  6895.         db      '      '
  6896.         db      '      '
  6897.         db      '      '
  6898.         db      '      '
  6899.         db      '      '
  6900.         db      '      '
  6901.         db      '      '
  6902.         db      'Config'
  6903.         db      '      '
  6904.         db      '      '
  6905.         db      '      '
  6906. ; Alt+Ctrl
  6907. times 12 db     '      '
  6908. ; Alt+Ctrl+Shift
  6909. times 12 db     '      '
  6910. end if
  6911.  
  6912. keybar_editor:
  6913. if lang eq ru
  6914. ; ¡¥§ ª« ¢¨è-¬®¤¨ä¨ª â®à®¢
  6915.         db      '®¬®éì'
  6916.         db      '‘®åà ­'
  6917.         db      '      '
  6918.         db      '      '
  6919.         db      '      '
  6920.         db      'à®á¬ '
  6921.         db      '®¨áª '
  6922. keybar_cp2:
  6923.         db      'cp1251'
  6924.         db      '      '
  6925.         db      '‚ë室 '
  6926.         db      'Œ®¤ã«¨'
  6927.         db      'ªà ­ë'
  6928. ; Shift
  6929.         db      '      '
  6930.         db      '‘®åà.¢'
  6931.         db      '      '
  6932.         db      '¥¤ ª.'
  6933.         db      '      '
  6934.         db      '      '
  6935.         db      '„ «ìè¥'
  6936.         db      '’ ¡«¨æ'
  6937.         db      '      '
  6938.         db      '‘åà‚ëå'
  6939.         db      '      '
  6940.         db      '      '
  6941. ; Ctrl
  6942.         db      '      '
  6943.         db      '      '
  6944.         db      '      '
  6945.         db      '      '
  6946.         db      '      '
  6947.         db      '      '
  6948.         db      '‡ ¬¥­ '
  6949.         db      '      '
  6950.         db      '      '
  6951.         db      '®§¨æ '
  6952.         db      '      '
  6953.         db      '      '
  6954. ; Ctrl+Shift
  6955.         db      '      '
  6956.         db      '      '
  6957.         db      '      '
  6958.         db      '      '
  6959.         db      '      '
  6960.         db      '      '
  6961.         db      '      '
  6962.         db      '      '
  6963.         db      '      '
  6964.         db      '      '
  6965.         db      '      '
  6966.         db      '      '
  6967. ; Alt
  6968.         db      '      '
  6969.         db      '      '
  6970.         db      '      '
  6971.         db      '      '
  6972.         db      '¥ç âì'
  6973.         db      '      '
  6974.         db      '      '
  6975.         db      '‘âப '
  6976.         db      '‚¨¤¥® '
  6977.         db      '      '
  6978.         db      'ˆáâà '
  6979.         db      '      '
  6980. ; Alt+Shift
  6981.         db      '      '
  6982.         db      '      '
  6983.         db      '      '
  6984.         db      '      '
  6985.         db      '      '
  6986.         db      '      '
  6987.         db      '      '
  6988.         db      '      '
  6989.         db      'Š®­ä¨£'
  6990.         db      '      '
  6991.         db      '      '
  6992.         db      '      '
  6993. ; Alt+Ctrl
  6994. times 12 db     '      '
  6995. ; Alt+Ctrl+Shift
  6996. times 12 db     '      '
  6997. else
  6998. ; No modificators
  6999.         db      'Help  '
  7000.         db      'Save  '
  7001.         db      '      '
  7002.         db      '      '
  7003.         db      '      '
  7004.         db      'View  '
  7005.         db      'Search'
  7006. keybar_cp2:
  7007.         db      'cp1251'
  7008.         db      '      '
  7009.         db      'Quit  '
  7010.         db      'Plugin'
  7011.         db      'Screen'
  7012. ; Shift
  7013.         db      '      '
  7014.         db      'SaveAs'
  7015.         db      '      '
  7016.         db      'Edit..'
  7017.         db      '      '
  7018.         db      '      '
  7019.         db      'Next  '
  7020.         db      'Table '
  7021.         db      '      '
  7022.         db      'SaveQ '
  7023.         db      '      '
  7024.         db      '      '
  7025. ; Ctrl
  7026.         db      '      '
  7027.         db      '      '
  7028.         db      '      '
  7029.         db      '      '
  7030.         db      '      '
  7031.         db      '      '
  7032.         db      'Replac'
  7033.         db      '      '
  7034.         db      '      '
  7035.         db      'GoFile'
  7036.         db      '      '
  7037.         db      '      '
  7038. ; Ctrl+Shift
  7039.         db      '      '
  7040.         db      '      '
  7041.         db      '      '
  7042.         db      '      '
  7043.         db      '      '
  7044.         db      '      '
  7045.         db      '      '
  7046.         db      '      '
  7047.         db      '      '
  7048.         db      '      '
  7049.         db      '      '
  7050.         db      '      '
  7051. ; Alt
  7052.         db      '      '
  7053.         db      '      '
  7054.         db      '      '
  7055.         db      '      '
  7056.         db      'Print '
  7057.         db      '      '
  7058.         db      '      '
  7059.         db      'Goto  '
  7060.         db      'Video '
  7061.         db      '      '
  7062.         db      'ViewHs'
  7063.         db      '      '
  7064. ; Alt+Shift
  7065.         db      '      '
  7066.         db      '      '
  7067.         db      '      '
  7068.         db      '      '
  7069.         db      '      '
  7070.         db      '      '
  7071.         db      '      '
  7072.         db      '      '
  7073.         db      'Config'
  7074.         db      '      '
  7075.         db      '      '
  7076.         db      '      '
  7077. ; Alt+Ctrl
  7078. times 12 db     '      '
  7079. ; Alt+Ctrl+Shift
  7080. times 12 db     '      '
  7081. end if
  7082.  
  7083.         align   4
  7084. cur_width       dd      80
  7085. cur_height      dd      25
  7086. saved_width     dd      -1
  7087. saved_height    dd      -1
  7088. fill_width      dd      0
  7089. fill_height     dd      0
  7090. max_width = 256
  7091. max_height = 256
  7092. console_data_ptr dd     0
  7093.  
  7094. cursor_x        dd      -1
  7095. cursor_y        dd      -1
  7096. cursor_size     dd      cursor_normal_size
  7097. cur_cursor_pos  dd      -1
  7098. old_cursor_pos  dd      -1
  7099.  
  7100. idle_interval   dd      -1
  7101.  
  7102. active_panel    dd      panel1_data
  7103.  
  7104. associations    dd      0
  7105. associations_size dd    1               ; terminating zero
  7106. associations_allocated dd 0x1000        ; start with one page
  7107.  
  7108. console_colors  dd      0x000000, 0x000080, 0x008000, 0x008080
  7109.                 dd      0x800000, 0x800080, 0x808000, 0xC0C0C0
  7110.                 dd      0x808080, 0x0000FF, 0x00FF00, 0x00FFFF
  7111.                 dd      0xFF0000, 0xFF00FF, 0xFFFF00, 0xFFFFFF
  7112.  
  7113. compare_fns     dd      compare_name
  7114.                 dd      compare_name_rev
  7115.                 dd      compare_ext
  7116.                 dd      compare_ext_rev
  7117.                 dd      compare_modified
  7118.                 dd      compare_modified_rev
  7119.                 dd      compare_size
  7120.                 dd      compare_size_rev
  7121.                 dd      compare_unordered
  7122.                 dd      compare_unordered_rev
  7123.                 dd      compare_created
  7124.                 dd      compare_created_rev
  7125.                 dd      compare_accessed
  7126.                 dd      compare_accessed_rev
  7127.  
  7128. ctrlkey_tests   dd      ctrlkey_test0
  7129.                 dd      ctrlkey_test1
  7130.                 dd      ctrlkey_test2
  7131.                 dd      ctrlkey_test3
  7132.                 dd      ctrlkey_test4
  7133. ctrlkey_tests_num = 5
  7134.  
  7135. virtual at 0
  7136. screen_vtable:
  7137.         .OnRedraw       dd      ?
  7138.         .OnActivate     dd      ?
  7139.         .OnIdle         dd      ?
  7140.         .OnKey          dd      ?
  7141.         .keybar         dd      ?
  7142.         .getname        dd      ?
  7143.         .OnExit         dd      ?
  7144.         .IsHandleUsed   dd      ?
  7145. end virtual
  7146.  
  7147. panels_vtable:
  7148.         dd      panels_OnRedraw
  7149.         dd      0
  7150.         dd      0
  7151.         dd      panels_OnKey
  7152.         dd      keybar_panels
  7153.         dd      panels_getname
  7154.         dd      panels_OnExit
  7155.         dd      panels_IsHandleUsed
  7156.  
  7157. viewer_vtable:
  7158.         dd      viewer_OnRedraw
  7159.         dd      0
  7160.         dd      0
  7161.         dd      viewer_OnKey
  7162.         dd      keybar_viewer
  7163.         dd      viewer_getname
  7164.         dd      viewer_OnExit
  7165.         dd      viewer_IsHandleUsed
  7166.  
  7167. editor_vtable:
  7168.         dd      editor_OnRedraw
  7169.         dd      0
  7170.         dd      0
  7171.         dd      editor_OnKey
  7172.         dd      keybar_editor
  7173.         dd      editor_getname
  7174.         dd      editor_OnExit
  7175.         dd      editor_IsHandleUsed
  7176.  
  7177. filesearch_vtable:
  7178.         dd      filesearch_OnRedraw
  7179.         dd      filesearch_OnActivate
  7180.         dd      filesearch_OnIdle
  7181.         dd      filesearch_OnKey
  7182.         dd      0
  7183.         dd      filesearch_getname
  7184.         dd      filesearch_OnExit
  7185.         dd      filesearch_IsHandleUsed
  7186.  
  7187. ; additions to this table require changes in tools.inc::get_error_msg
  7188. errors1:
  7189.         dd      error0msg
  7190.         dd      error1msg
  7191.         dd      error2msg
  7192.         dd      error3msg
  7193.         dd      error4msg
  7194.         dd      error5msg
  7195.         dd      error6msg
  7196.         dd      error7msg
  7197.         dd      error8msg
  7198.         dd      error9msg
  7199.         dd      error10msg
  7200.         dd      error11msg
  7201. errors2:
  7202.         dd      error30msg
  7203.         dd      error31msg
  7204.         dd      error32msg
  7205.  
  7206. encodings:
  7207. .cp866 = 0
  7208. .cp1251 = 1
  7209. .koi8r = 2
  7210. .unicode = 3
  7211.  
  7212. .names:
  7213.         db      'cp866   '
  7214.         db      'cp1251  '
  7215.         db      'koi8-r  '
  7216.         db      'Unicode '
  7217.  
  7218. .tables:
  7219. ; cp866 - trivial map
  7220.         times 128 db %+127
  7221. ; cp1251
  7222.         db      0x3F,0x3F,0x27,0x3F,0x22,0x3A,0xC5,0xD8,0x3F,0x25,0x3F,0x3C,0x3F,0x3F,0x3F,0x3F
  7223.         db      0x3F,0x27,0x27,0x22,0x22,0x07,0x2D,0x2D,0x3F,0x54,0x3F,0x3E,0x3F,0x3F,0x3F,0x3F
  7224.         db      0xFF,0xF6,0xF7,0x3F,0xFD,0x3F,0xB3,0x15,0xF0,0x63,0xF2,0x3C,0xBF,0x2D,0x52,0xF4
  7225.         db      0xF8,0x2B,0x49,0x69,0x3F,0xE7,0x14,0xFA,0xF1,0xFC,0xF3,0x3E,0x3F,0x3F,0x3F,0xF5
  7226.         times 0x30 db %-1+0x80
  7227.         times 0x10 db %-1+0xE0
  7228. ; koi8-r
  7229.         db      0xC4,0xB3,0xDA,0xBF,0xC0,0xD9,0xC3,0xB4,0xC2,0xC1,0xC5,0xDF,0xDC,0xDB,0xDD,0xDE
  7230.         db      0xB0,0xB1,0xB2,0xF4,0xFE,0xF9,0xFB,0xF7,0xF3,0xF2,0xFF,0xF5,0xF8,0xFD,0xFA,0xF6
  7231.         db      0xCD,0xBA,0xD5,0xF1,0xD6,0xC9,0xB8,0xB7,0xBB,0xD4,0xD3,0xC8,0xBE,0xBD,0xBC,0xC6
  7232.         db      0xC7,0xCC,0xB5,0xF0,0xB6,0xB9,0xD1,0xD2,0xCB,0xCF,0xD0,0xCA,0xD8,0xD7,0xCE,0xFC
  7233.         db      0xEE,0xA0,0xA1,0xE6,0xA4,0xA5,0xE4,0xA3,0xE5,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE
  7234.         db      0xAF,0xEF,0xE0,0xE1,0xE2,0xE3,0xA6,0xA2,0xEC,0xEB,0xA7,0xE8,0xED,0xE9,0xE7,0xEA
  7235.         db      0x9E,0x80,0x81,0x96,0x84,0x85,0x94,0x83,0x95,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E
  7236.         db      0x8F,0x9F,0x90,0x91,0x92,0x93,0x86,0x82,0x9C,0x9B,0x87,0x98,0x9D,0x99,0x97,0x9A
  7237.  
  7238. .menu:
  7239.         db      .cp866
  7240. .menu.1:
  7241.         dd      .menu.2
  7242.         dd      0
  7243. if lang eq ru
  7244.         db      '&DOS ⥪áâ (cp866)',0
  7245. else
  7246.         db      '&DOS text (cp866)',0
  7247. end if
  7248.         db      .cp1251
  7249. .menu.2:
  7250.         dd      .menu.3
  7251.         dd      .menu.1
  7252. if lang eq ru
  7253.         db      '&Windows ⥪áâ (cp1251)',0
  7254. else
  7255.         db      '&Windows text (cp1251)',0
  7256. end if
  7257.         db      .koi8r
  7258. .menu.3:
  7259.         dd      .menu.4
  7260.         dd      .menu.2
  7261. if lang eq ru
  7262.         db      '&Linux ⥪áâ (koi8-r)',0
  7263. else
  7264.         db      '&Linux text (koi8-r)',0
  7265. end if
  7266.         db      .unicode
  7267. .menu.4:
  7268.         dd      0
  7269.         dd      .menu.3
  7270.         db      '&Unicode',0
  7271.  
  7272. active_screen   dd      0
  7273. viewer_tabsize  dd      8
  7274. editor_tabsize  dd      8
  7275.  
  7276. ascii2scan:
  7277.         times 32 db 0
  7278.         db      0x39,0x02,0x03,0x04,0x05,0x06,0x08,0x28,0x0A,0x0B,0x09,0x0D,0x33,0x0C,0x34,0x35
  7279.         db      0x0B,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x27,0x27,0x33,0x0D,0x34,0x35
  7280.         db      0x03,0x1E,0x30,0x2E,0x20,0x12,0x21,0x22,0x23,0x17,0x24,0x25,0x26,0x32,0x31,0x18
  7281.         db      0x19,0x10,0x13,0x1F,0x14,0x16,0x2F,0x11,0x2D,0x15,0x2C,0x1A,0x2B,0x1B,0x07,0x0C
  7282.         db      0x29,0x1E,0x30,0x2E,0x20,0x12,0x21,0x22,0x23,0x17,0x24,0x25,0x26,0x32,0x31,0x18
  7283.         db      0x19,0x10,0x13,0x1F,0x14,0x16,0x2F,0x11,0x2D,0x15,0x2C,0x1A,0x2B,0x1B,0x29,0x00
  7284.         db      0x21,0x33,0x20,0x16,0x26,0x14,0x27,0x19,0x30,0x10,0x13,0x25,0x2F,0x15,0x24,0x22
  7285.         db      0x23,0x2E,0x31,0x12,0x1E,0x1A,0x11,0x2D,0x17,0x18,0x1B,0x1F,0x32,0x28,0x34,0x2C
  7286.         db      0x21,0x33,0x20,0x16,0x26,0x14,0x27,0x19,0x30,0x10,0x13,0x25,0x2F,0x15,0x24,0x22
  7287.         times 48 db 0
  7288.         db      0x23,0x2E,0x31,0x12,0x1E,0x1A,0x11,0x2D,0x17,0x18,0x1B,0x1F,0x32,0x28,0x34,0x2C
  7289.         db      0x29,0x29,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
  7290. scan2ascii:
  7291.         db      0,0,'1234567890-=',0,0
  7292.         db      'qwertyuiop[]',0,0,'as'
  7293.         db      'dfghjkl;',27h,'`',0,'\zxcv'
  7294.         db      'bnm,./',0,0,0,' ',0,0,0,0,0,0
  7295.  
  7296. ; Š« ¢¨è­ë¥ á®ç¥â ­¨ï
  7297. ; db scancode, reserved
  7298. ; dw ctrlstate
  7299. ; dd handler
  7300. ; ctrlstate: ¬« ¤è¨¥ 4 ¡¨â  - ¤«ï Shift, á«¥¤ãî騥 - ¤«ï Ctrl, á«¥¤ãî騥 - ¤«ï Alt
  7301. ; 0 = ­¨ ®¤­  ª« ¢¨è  ­¥ ­ ¦ â 
  7302. ; 1 = ஢­® ®¤­  ­ ¦ â 
  7303. ; 2 = ®¡¥ ­ ¦ âë
  7304. ; 3 = «¥¢ ï ­ ¦ â , ¯à ¢ ï ­¥â
  7305. ; 4 = ¯à ¢ ï ­ ¦ â , «¥¢ ï ­¥â
  7306. panels_ctrlkeys:
  7307.         dw      0x48, 0
  7308.         dd      panels_OnKey.up
  7309.         dw      0x50, 0
  7310.         dd      panels_OnKey.down
  7311.         dw      0x4B, 0
  7312.         dd      panels_OnKey.left
  7313.         dw      0x4D, 0
  7314.         dd      panels_OnKey.right
  7315.         dw      0x51, 0
  7316.         dd      panels_OnKey.pgdn
  7317.         dw      0x49, 0
  7318.         dd      panels_OnKey.pgup
  7319.         dw      0xF, 0
  7320.         dd      panels_OnKey.tab
  7321.         dw      0x47, 0
  7322.         dd      panels_OnKey.home
  7323.         dw      0x4F, 0
  7324.         dd      panels_OnKey.end
  7325.         dw      0x1C, 0
  7326.         dd      panels_OnKey.enter
  7327.         dw      0x3D, 0
  7328.         dd      panels_OnKey.f3
  7329.         dw      0x3E, 0
  7330.         dd      panels_OnKey.f4
  7331.         dw      0x3F, 0
  7332.         dd      panels_OnKey.f5
  7333.         dw      0x3F, 1
  7334.         dd      panels_OnKey.shift_f5
  7335.         dw      0x41, 0
  7336.         dd      panels_OnKey.f7
  7337.         dw      0x41, 0x100
  7338.         dd      panels_OnKey.alt_f7
  7339.         dw      0x42, 0
  7340.         dd      panels_OnKey.f8
  7341.         dw      0x43, 0x100
  7342.         dd      alt_f9
  7343.         dw      0x44, 0
  7344.         dd      exit
  7345.         dw      0x5D, 0
  7346.         dd      panels_OnKey.menu
  7347. repeat 9-3+1
  7348.         dw      0x3D+%-1, 0x10
  7349.         dd      panels_OnKey.ctrl_f39
  7350. end repeat
  7351.         dw      0x3B, 0x100
  7352.         dd      panels_OnKey.alt_f12
  7353.         dw      0x3C, 0x100
  7354.         dd      panels_OnKey.alt_f12
  7355.         dw      0x58, 0
  7356.         dd      F12
  7357.         dw      0x13, 0x10
  7358.         dd      panels_OnKey.ctrl_r
  7359.         dw      2, 0x30
  7360.         dd      panels_OnKey.change_mode
  7361.         dw      3, 0x30
  7362.         dd      panels_OnKey.change_mode
  7363.         dw      4, 0x30
  7364.         dd      panels_OnKey.change_mode
  7365.         dw      5, 0x30
  7366.         dd      panels_OnKey.change_mode
  7367. repeat 10
  7368.         dw      %+1, 0x40
  7369.         dd      panels_OnKey.quick_jump
  7370. end repeat
  7371.         dw      0x52, 0
  7372.         dd      panels_OnKey.insert
  7373.         dw      0x4E, 0
  7374.         dd      panels_OnKey.greyplus
  7375.         dw      0x4A, 0
  7376.         dd      panels_OnKey.greyminus
  7377.         dw      0x37, 0
  7378.         dd      panels_OnKey.greyasterisk
  7379.         db      0
  7380.  
  7381. viewer_ctrlkeys:
  7382.         dw      1, 0
  7383.         dd      viewer_OnKey.exit
  7384.         dw      0x51, 0
  7385.         dd      viewer_OnKey.pgdn
  7386.         dw      0x49, 0
  7387.         dd      viewer_OnKey.pgup
  7388.         dw      0x50, 0
  7389.         dd      viewer_OnKey.down
  7390.         dw      0x48, 0
  7391.         dd      viewer_OnKey.up
  7392.         dw      0x4B, 0
  7393.         dd      viewer_OnKey.left
  7394.         dw      0x4B, 0x10
  7395.         dd      viewer_OnKey.ctrl_left
  7396.         dw      0x4B, 0x11
  7397.         dd      viewer_OnKey.ctrl_shift_left
  7398.         dw      0x4C, 0
  7399.         dd      viewer_OnKey.exit
  7400.         dw      0x4D, 0
  7401.         dd      viewer_OnKey.right
  7402.         dw      0x4D, 0x10
  7403.         dd      viewer_OnKey.ctrl_right
  7404.         dw      0x4D, 0x11
  7405.         dd      viewer_OnKey.ctrl_shift_right
  7406.         dw      0x3C, 0
  7407.         dd      viewer_OnKey.f2
  7408.         dw      0x3D, 0
  7409.         dd      viewer_OnKey.exit
  7410.         dw      0x3E, 0
  7411.         dd      viewer_OnKey.f4
  7412.         dw      0x41, 0
  7413.         dd      viewer_OnKey.f7
  7414.         dw      0x41, 1
  7415.         dd      viewer_OnKey.shift_f7
  7416.         dw      0x42, 0
  7417.         dd      viewer_OnKey.f8
  7418.         dw      0x42, 1
  7419.         dd      viewer_OnKey.shift_f8
  7420.         dw      0x44, 0
  7421.         dd      viewer_OnKey.exit
  7422.         dw      0x47, 0
  7423.         dd      viewer_OnKey.home
  7424.         dw      0x4F, 0
  7425.         dd      viewer_OnKey.end
  7426.         dw      0x58, 0
  7427.         dd      F12
  7428.         dw      0x43, 0x100
  7429.         dd      alt_f9
  7430.         db      0
  7431.  
  7432. editor_ctrlkeys:
  7433.         dw      1, 0
  7434.         dd      editor_OnKey.exit_confirm
  7435.         dw      0x0E, 0
  7436.         dd      editor_OnKey.backspace
  7437.         dw      0x3C, 0
  7438.         dd      editor_OnKey.f2
  7439.         dw      0x41, 0
  7440.         dd      editor_OnKey.f7
  7441.         dw      0x41, 1
  7442.         dd      editor_OnKey.shift_f7
  7443.         dw      0x43, 0x100
  7444.         dd      alt_f9
  7445.         dw      0x44, 0
  7446.         dd      editor_OnKey.exit_confirm
  7447.         dw      0x44, 1
  7448.         dd      editor_OnKey.exit_save
  7449.         dw      0x47, 0
  7450.         dd      editor_OnKey.home
  7451.         dw      0x48, 0
  7452.         dd      editor_OnKey.up
  7453.         dw      0x49, 0
  7454.         dd      editor_OnKey.pgup
  7455.         dw      0x4B, 0
  7456.         dd      editor_OnKey.left
  7457.         dw      0x4D, 0
  7458.         dd      editor_OnKey.right
  7459.         dw      0x4F, 0
  7460.         dd      editor_OnKey.end
  7461.         dw      0x50, 0
  7462.         dd      editor_OnKey.down
  7463.         dw      0x51, 0
  7464.         dd      editor_OnKey.pgdn
  7465.         dw      0x52, 0
  7466.         dd      editor_OnKey.ins
  7467.         dw      0x53, 0
  7468.         dd      editor_OnKey.del
  7469.         dw      0x58, 0
  7470.         dd      F12
  7471.         db      0
  7472.  
  7473. dirinfo:
  7474.                 dd      1
  7475. .first          dd      0
  7476.                 dd      0
  7477. .size           dd      300
  7478. .dirdata        dd      0
  7479.                 db      0
  7480. .name           dd      0
  7481.  
  7482. readinfo:
  7483.                 dd      0
  7484. .first          dq      0
  7485. .size           dd      0
  7486. .data           dd      0
  7487.                 db      0
  7488. .name           dd      0
  7489.  
  7490. writeinfo:
  7491. .code           dd      2
  7492. .first          dq      0
  7493. .size           dd      0
  7494. .data           dd      0
  7495.                 db      0
  7496. .name           dd      0
  7497.  
  7498. attrinfo:
  7499.                 dd      5
  7500.                 dd      0
  7501.                 dd      0
  7502.                 dd      0
  7503.                 dd      .attr
  7504.                 db      0
  7505. .name           dd      0
  7506.  
  7507. delinfo:
  7508.                 dd      8
  7509.                 dd      0
  7510.                 dd      0
  7511.                 dd      0
  7512.                 dd      0
  7513.                 db      0
  7514.                 dd      execdata
  7515.  
  7516. mkdirinfo:
  7517.                 dd      9
  7518.                 dd      0
  7519.                 dd      0
  7520.                 dd      0
  7521.                 dd      0
  7522.                 db      0
  7523.                 dd      CopyDestEditBuf+12
  7524.  
  7525. if lang eq ru
  7526. compare_names   db      '¨ˆà¬Œ €­á‘¤„'
  7527. else
  7528. compare_names   db      'nNxXmMsSuUcCaA'
  7529. end if
  7530.  
  7531. ; ‡¤¥áì ­ ç¨­ îâáï ª®­ä¨£ãà æ¨®­­ë¥ ¤ ­­ë¥ - ¢ ⥪ã饩 ॠ«¨§ æ¨¨ ®­¨ § è¨âë ¢ ¡¨­ à­¨ª
  7532.  
  7533. ;  ­¥«ì
  7534. panel_normal_color      db      1Bh
  7535. panel_selected_color    db      1Eh
  7536. panel_border_color      db      1Bh
  7537. panel_cursor_color      db      30h
  7538. panel_selected_cursor_color db  3Eh
  7539. panel_header_color      db      1Bh
  7540. panel_active_header_color db    30h
  7541. column_header_color     db      1Eh
  7542. panel_number_color      db      1Bh
  7543. panel_numselected_color db      3Eh
  7544. panel_nscreens_color    db      0Bh
  7545. ; „¨ «®£¨
  7546. dialog_colors:
  7547. dialog_main_color       db      70h
  7548. dialog_border_color     db      70h
  7549. dialog_header_color     db      70h
  7550. dialog_edit_color       db      30h
  7551. dialog_unmodified_edit_color db 38h
  7552. dialog_normal_btn_color db      70h
  7553. dialog_selected_btn_color db    30h
  7554. dialog_list_color       db      70h
  7555. dialog_selected_list_color db   0Fh
  7556. dialog_scroll_list_color db     70h
  7557. ; à¥¤ã¯à¥¦¤¥­¨ï ¨ ®è¨¡ª¨
  7558. warning_colors:
  7559. ; !!! ¤®«¦­ë ¡ëâì ⥠¦¥ ¯®«ï ¨ ¢ ⮬ ¦¥ ¯®à浪¥, çâ® ¨ ¤«ï ®¡ëç­ëå ¤¨ «®£®¢ !!!
  7560. warning_main_color      db      4Fh
  7561. warning_border_color    db      4Fh
  7562. warning_header_color    db      4Fh
  7563. warning_edit_color      db      30h
  7564. warning_unmodified_edit_color db 38h
  7565. warning_normal_btn_color db     4Fh
  7566. warning_selected_btn_color db   70h
  7567. warning_list_color      db      3Fh
  7568. warning_selected_list_color db  70h
  7569. warning_scroll_list_color db    3Fh
  7570. ; Œ¥­î
  7571. menu_normal_color       db      3Fh
  7572. menu_selected_color     db      0Fh
  7573. menu_highlight_color    db      3Eh
  7574. menu_selected_highlight_color db 0Eh
  7575. menu_border_color       db      3Fh
  7576. menu_header_color       db      3Fh
  7577. menu_scrollbar_color    db      3Fh
  7578. ; ‹¨­¥©ª  ª« ¢¨è
  7579. keybar_number_color     db      7
  7580. keybar_name_color       db      30h
  7581. keybar_bgr_color        db      7
  7582. ; Š®¬ ­¤­ ï áâப 
  7583. cmdbar_normal_color     db      7
  7584. cmdbar_prefix_color     db      7
  7585. ; à®á¬®âà騪
  7586. view_normal_color       db      1Bh
  7587. view_selected_color     db      30h
  7588. view_status_color       db      30h
  7589. view_arrows_color       db      1Eh
  7590. ; ¥¤ ªâ®à
  7591. edit_normal_color       db      1Bh
  7592. edit_status_color       db      30h
  7593.  
  7594. ; ®¤á¢¥âª  ä ©«®¢
  7595. highlight_num_groups    dd      10
  7596. highlight_groups        dd      highlight_group0
  7597.                 dd      highlight_group1
  7598.                 dd      highlight_group2
  7599.                 dd      highlight_group3
  7600.                 dd      highlight_group4
  7601.                 dd      highlight_group5
  7602.                 dd      highlight_group6
  7603.                 dd      highlight_group7
  7604.                 dd      highlight_group8
  7605.                 dd      highlight_group9
  7606.  
  7607. ; ”®à¬ â ®¯¨á ­¨ï £àã¯¯ë ¯®¤á¢¥âª¨:
  7608. virtual at 0
  7609. highlight:
  7610.         .IncludeAttributes      db ?
  7611.         .NormalColor            db ?
  7612.         .CursorColor            db ?
  7613.         .SelectedColor          db ?
  7614.         .SelectedCursorColor    db ?
  7615.         .Mask:                  ; ASCIIZ-string
  7616. end virtual
  7617.  
  7618. ; all highlight masks must be in lowercase!
  7619. highlight_group0:
  7620.         db      2
  7621.         db      13h, 38h, 0, 0
  7622.         db      '*',0
  7623. highlight_group1:
  7624.         db      4
  7625.         db      13h, 38h, 0, 0
  7626.         db      '*',0
  7627. highlight_group2:
  7628.         db      10h
  7629.         db      1Fh, 3Fh, 0, 0
  7630.         db      '*|..',0
  7631. highlight_group3:
  7632.         db      10h
  7633.         db      0, 0, 0, 0
  7634.         db      '..',0
  7635. highlight_group4:
  7636.         db      0
  7637.         db      1Ah, 3Ah, 0, 0
  7638.         db      '*.exe,*.com,*.bat,*.cmd,*.kex',0
  7639. highlight_group5:
  7640.         db      0
  7641.         db      1Ah, 3Ah, 0, 0
  7642.         db      '*|*.*,readme,makefile',0
  7643. highlight_group6:
  7644.         db      0
  7645.         db      1Dh, 3Dh, 0, 0
  7646.         db      '*.rar,*.zip,*.[zj],*.[bg7]z,*.[bg]zip,*.tar,*.t[ag]z,*.ar[cj],*.r[0-9][0-9],'
  7647.         db      '*.a[0-9][0-9],*.bz2,*.cab,*.msi,*.jar,*.lha,*.lzh,*.ha,*.ac[bei],*.pa[ck],'
  7648.         db      '*.rk,*.cpio,*.rpm,*.zoo,*.hqx,*.sit,*.ice,*.uc2,*.ain,*.imp,*.777,*.ufa,*.boa,'
  7649.         db      '*.bs[2a],*.sea,*.hpk,*.ddi,*.x2,*.rkv,*.[lw]sz,*.h[ay]p,*.lim,*.sqz,*.chz',0
  7650. highlight_group7:
  7651.         db      0
  7652.         db      16h, 36h, 0, 0
  7653.         db      '*.bak,*.tmp',0
  7654. highlight_group8:
  7655.         db      0
  7656.         db      17h, 37h, 0, 0
  7657.         db      '*.asm,*.inc',0
  7658. highlight_group9:
  7659.         db      10h
  7660.         db      1Fh, 3Fh, 0, 0
  7661.         db      '*',0
  7662.  
  7663. bConfirmDelete  db      1
  7664. bConfirmDeleteIncomplete db 0
  7665.  
  7666. FolderShortcuts dd      0,0,0,0,0,0,0,0,0,0
  7667.  
  7668. ; ‡¤¥áì § ª ­ç¨¢ îâáï ª®­ä¨£ãà æ¨®­­ë¥ ¤ ­­ë¥
  7669.  
  7670. bWasE0          db      0
  7671. ctrlstate       db      0
  7672. MemForImage     dd      0
  7673. restore_semicolon dd    0
  7674. bForHex         db      0
  7675.  
  7676. align   4
  7677. ; ‘®®¡é¥­¨¥ ® ®¡«®¬¥ ¯à¨ ¢ë¤¥«¥­¨¨ ¯ ¬ïâ¨
  7678. nomem_dlgdata:
  7679.         dd      2
  7680.         dd      -1
  7681.         dd      -1
  7682.         dd      12
  7683.         dd      2
  7684.         dd      1
  7685.         dd      1
  7686.         dd      aError
  7687.         rb      8
  7688.         dd      0
  7689.         dd      0
  7690.         dd      2
  7691. ; áâப  "No memory"
  7692.         dd      1
  7693.         dd      1,0,10,0
  7694.         dd      aNoMemory
  7695.         dd      1
  7696. ; ª­®¯ª  "Ok"
  7697.         dd      2
  7698.         dd      4,1,7,1
  7699.         dd      aOk
  7700.         dd      0xD
  7701.  
  7702. ; ¤¨ «®£ ª®¯¨à®¢ ­¨ï
  7703. copy_dlgdata:
  7704.         dd      1
  7705. .x      dd      -1
  7706. .y      dd      -1
  7707. .width  dd      ?
  7708. .height dd      4
  7709.         dd      4
  7710.         dd      2
  7711.         dd      aCopyCaption
  7712. .main_color db ?
  7713. .border_color db ?
  7714. .header_color db ?
  7715.         db      0
  7716.         dd      ?
  7717.         dd      0
  7718.         dd      0
  7719.         dd      4
  7720. ; áâப  'Š®¯¨à®¢ âì "%s" ¢:'
  7721.         dd      1
  7722.         dd      1,0
  7723. .width2 dd      ?
  7724.         dd      0
  7725.         dd      CopySourceTextBuf
  7726.         dd      0
  7727. ; ¯®«¥ । ªâ¨à®¢ ­¨ï á ¨¬¥­¥¬ ä ©« /¯ ¯ª¨ ­ §­ ç¥­¨ï
  7728.         dd      3
  7729.         dd      1,1
  7730. .width3 dd      ?
  7731.         dd      1
  7732.         dd      CopyDestEditBuf
  7733. .flags0 dd      0
  7734. ; ª­®¯ª  "ª®¯¨à®¢ âì"
  7735. .copy_btn:
  7736.         dd      2
  7737. .copy_x1 dd     ?
  7738.         dd      3
  7739. .copy_x2 dd     ?
  7740.         dd      3
  7741.         dd      aCopy
  7742. .flags1 dd      18h
  7743. ; ª­®¯ª  "®â¬¥­¨âì"
  7744.         dd      2
  7745. .cnl_x1 dd      ?
  7746.         dd      3
  7747. .cnl_x2 dd      ?
  7748.         dd      3
  7749.         dd      aCancelB
  7750. .flags2 dd      8
  7751.  
  7752. mkdir_dlgdata:
  7753.         dd      1
  7754.         dd      -1, -1
  7755. .width  dd      ?
  7756. .height dd      4
  7757.         dd      4, 2
  7758.         dd      aMkDirCaption
  7759.         dd      ?, ?
  7760.         dd      0
  7761.         dd      0
  7762.         dd      4
  7763. ; ‘âப  "‘®§¤ âì ¯ ¯ªã"
  7764.         dd      1
  7765.         dd      1,0,aMkDirLen,0
  7766.         dd      aMkDir
  7767.         dd      0
  7768. ; ¯®«¥ । ªâ¨à®¢ ­¨ï á ¨¬¥­¥¬ ᮧ¤ ¢ ¥¬®© ¯ ¯ª¨
  7769.         dd      3
  7770.         dd      1,1
  7771. .width2 dd      ?
  7772.         dd      1
  7773.         dd      CopyDestEditBuf
  7774. .flags0 dd      0xC
  7775. ; ª­®¯ª  "à®¤®«¦¨âì"
  7776. .cont_btn:
  7777.         dd      2
  7778. .cont_x1 dd     ?
  7779.         dd      3
  7780. .cont_x2 dd     ?
  7781.         dd      3
  7782.         dd      a_Continue
  7783. .flags1 dd      18h
  7784. ; ª­®¯ª  "®â¬¥­¨âì"
  7785.         dd      2
  7786. .cnl_x1 dd      ?
  7787.         dd      3
  7788. .cnl_x2 dd      ?
  7789.         dd      3
  7790.         dd      aCancelB
  7791. .flags2 dd      8
  7792.  
  7793. ; ¤¨ «®£ ¢ë¤¥«¥­¨ï/á­ïâ¨ï
  7794. mark_dlgdata:
  7795.         dd      1
  7796.         dd      -1, -1
  7797.         dd      37, 1
  7798.         dd      4, 2
  7799. .title  dd      ?
  7800.         dd      ?, ?
  7801.         dd      0, 0
  7802.         dd      1
  7803. ; ¯®«¥ । ªâ¨à®¢ ­¨ï
  7804.         dd      3
  7805.         dd      1, 0, 35, 0
  7806.         dd      enter_string_buf
  7807. .flags  dd      ?
  7808.  
  7809. ; ¤¨ «®£ ¡ëáâண® ¯®¨áª  ¢ ¯ ­¥«¨ (Alt+¡ãª¢ë)
  7810. QuickSearchDlg:
  7811.         dd      5
  7812. .x      dd      ?
  7813. .y      dd      ?
  7814.         dd      20, 1
  7815.         dd      1, 1
  7816.         dd      aSearch
  7817.         dd      ?, ?
  7818.         dd      0, 0
  7819.         dd      1
  7820. ; ¯®«¥ । ªâ¨à®¢ ­¨ï
  7821.         dd      3
  7822.         dd      1, 0, 18, 0
  7823.         dd      quick_search_buf
  7824.         dd      1Ch
  7825.  
  7826. ; ¤¨ «®£ ¯®¨áª  ¢ ä ©«¥ ¤«ï ¯à®á¬®âà騪  ¨ । ªâ®à 
  7827. find_in_file_dlgdata:
  7828.         dd      1
  7829. .x      dd      -1
  7830. .y      dd      -1
  7831. .width  dd      ?
  7832. .height dd      7
  7833.         dd      4, 2
  7834.         dd      aSearch
  7835.         dd      ?, ?
  7836.         dd      0, 0
  7837.         dd      8
  7838. ; ‘âப  "ˆáª âì"
  7839.         dd      1
  7840.         dd      1,0,aSearchForLen,0
  7841.         dd      aSearchFor
  7842.         dd      0
  7843. ; ¯®«¥ । ªâ¨à®¢ ­¨ï á ⥪á⮬ ¤«ï ¯®¨áª 
  7844.         dd      3
  7845.         dd      1,1
  7846. .width2 dd      ?
  7847.         dd      1
  7848.         dd      SearchStringEditBuf
  7849. .flags0 dd      0xC
  7850. ; £®à¨§®­â «ì­ë© à §¤¥«¨â¥«ì
  7851.         dd      4
  7852.         dd      -1,2
  7853.         dd      -1,2
  7854.         dd      0
  7855.         dd      0
  7856. ; ä« ¦®ª "“ç¨â뢠âì ॣ¨áâà"
  7857.         dd      5
  7858.         dd      1,3
  7859.         dd      -1,3
  7860.         dd      aCaseSensitive
  7861. .flags_case dd  18h     ; default: search is case sensitive
  7862. ; ä« ¦®ª "’®«ìª® æ¥«ë¥ á«®¢ "
  7863.         dd      5
  7864.         dd      1,4
  7865.         dd      -1,4
  7866.         dd      aWholeWords
  7867. .flags_whole dd 8       ; default: do NOT search whole words only
  7868. ; £®à¨§®­â «ì­ë© à §¤¥«¨â¥«ì
  7869.         dd      4
  7870.         dd      -1,5
  7871.         dd      -1,5
  7872.         dd      0
  7873.         dd      0
  7874. ; ª­®¯ª  "ˆáª âì"
  7875. .search_btn:
  7876.         dd      2
  7877. .search_x1 dd   ?
  7878.         dd      6
  7879. .search_x2 dd   ?
  7880.         dd      6
  7881.         dd      aSearchB
  7882. .flags1 dd      18h
  7883. ; ª­®¯ª  "®â¬¥­¨âì"
  7884.         dd      2
  7885. .cnl_x1 dd      ?
  7886.         dd      6
  7887. .cnl_x2 dd      ?
  7888.         dd      6
  7889.         dd      aCancelB
  7890. .flags2 dd      8
  7891.  
  7892. ; ¯¥à¢ë© ¤¨ «®£ ¯®¨áª  ¢ ä ©« å (§ ¯à®á)
  7893. filesearch_query_template:
  7894.         dd      1
  7895. .x      dd      ?
  7896. .y      dd      ?
  7897. .width  dd      ?
  7898. .height dd      9
  7899.         dd      4, 2
  7900.         dd      aFileSearch
  7901.         dd      ?
  7902.         dd      0
  7903.         dd      0, 0
  7904.         dd      10
  7905. ; áâப -¯à¨£« è¥­¨¥ ¤«ï ¢¢®¤  ¬ áª¨
  7906.         dd      1
  7907.         dd      1,0,aFileMasksLen,0
  7908.         dd      aFileMasks
  7909.         dd      0
  7910. ; ¯®«¥ ¢¢®¤  ¤«ï ¬ áª¨
  7911.         dd      3
  7912.         dd      1, 1
  7913. .width2 dd      ?
  7914.         dd      1
  7915. .editptr1 dd    ?
  7916.         dd      0xC
  7917. ; áâப -¯à¨£« è¥­¨¥ ¤«ï ⥪áâ  ¯®¨áª 
  7918.         dd      1
  7919.         dd      1,2,aContainingTextLen,2
  7920.         dd      aContainingText
  7921.         dd      0
  7922. ; ¯®«¥ ¢¢®¤  ¤«ï ⥪áâ  ¯®¨áª 
  7923.         dd      3
  7924.         dd      1, 3
  7925. .width3 dd      ?
  7926.         dd      3
  7927. .editptr2 dd    ?
  7928.         dd      8
  7929. ; £®à¨§®­â «ì­ë© à §¤¥«¨â¥«ì
  7930.         dd      4
  7931.         dd      -1,4
  7932.         dd      -1,4
  7933.         dd      0
  7934.         dd      0
  7935. ; ä« ¦®ª "“ç¨â뢠âì ॣ¨áâà"
  7936.         dd      5
  7937.         dd      1,5
  7938.         dd      -1,5
  7939.         dd      aCaseSensitive
  7940. .flags_case dd  ?       ; will be initialized from find_in_file_dlgdata
  7941. ; ä« ¦®ª "’®«ìª® æ¥«ë¥ á«®¢ "
  7942.         dd      5
  7943.         dd      1,6
  7944.         dd      -1,6
  7945.         dd      aWholeWords
  7946. .flags_whole dd ?       ; will be initialized from find_in_file_dlgdata
  7947. ; £®à¨§®­â «ì­ë© à §¤¥«¨â¥«ì
  7948.         dd      4
  7949.         dd      -1,7
  7950.         dd      -1,7
  7951.         dd      0
  7952.         dd      0
  7953. ; ª­®¯ª  "ˆáª âì"
  7954. .search_btn:
  7955.         dd      2
  7956. .search_x1 dd   ?
  7957.         dd      8
  7958. .search_x2 dd   ?
  7959.         dd      8
  7960.         dd      aSearchB
  7961.         dd      18h
  7962. ; ª­®¯ª  "®â¬¥­¨âì"
  7963.         dd      2
  7964. .cnl_x1 dd      ?
  7965.         dd      8
  7966. .cnl_x2 dd      ?
  7967.         dd      8
  7968.         dd      aCancelB
  7969.         dd      8
  7970. .size = $ - filesearch_query_template
  7971.  
  7972. ; ¢â®à®© ¤¨ «®£ ¯®¨áª  ¢ ä ©« å (᪠­¨à®¢ ­¨¥)
  7973. filesearch_search_template:
  7974.         dd      1
  7975. .x      dd      ?
  7976. .y      dd      ?
  7977. .width  dd      ?
  7978. .height dd      ?
  7979.         dd      4, 2
  7980. .caption dd     ?
  7981.         dd      ?
  7982.         dd      0
  7983.         dd      0, 0
  7984.         dd      9
  7985. ; ᯨ᮪ ­ ©¤¥­­ëå ä ©«®¢
  7986.         dd      6
  7987.         dd      0, 0
  7988. .width1 dd      ?
  7989. .height1 dd     ?
  7990. .data1  dd      ?
  7991.         dd      0
  7992. ; £®à¨§®­â «ì­ë© à §¤¥«¨â¥«ì
  7993.         dd      4
  7994.         dd      -1
  7995. .y2     dd      ?
  7996.         dd      -1
  7997.         dd      ?
  7998.         dd      0, 0
  7999. ; áâப  "®¨áª <string> ¢:" «¨¡® "®¨áª § ª®­ç¥­..."
  8000.         dd      1
  8001.         dd      1
  8002. .y3     dd      ?
  8003. .width3 dd      ?
  8004.         dd      ?
  8005. .data3  dd      ?
  8006.         dd      0
  8007. ; áâப  á ⥪ã饩 ¯ ¯ª®©
  8008.         dd      1
  8009. .x4     dd      ?
  8010. .y4     dd      ?
  8011. .width4 dd      ?
  8012.         dd      ?
  8013. .data4  dd      ?
  8014.         dd      0
  8015. ; £®à¨§®­â «ì­ë© à §¤¥«¨â¥«ì
  8016.         dd      4
  8017.         dd      -1
  8018. .y5     dd      ?
  8019.         dd      -1
  8020.         dd      ?
  8021.         dd      0, 0
  8022. ; ª­®¯ª¨
  8023. .btn1:
  8024.         dd      2
  8025. .btn1x1 dd      ?
  8026. .btn1y  dd      ?
  8027. .btn1x2 dd      ?
  8028.         dd      ?
  8029.         dd      aNewSearch
  8030.         dd      8
  8031. .btn2:
  8032.         dd      2
  8033. .btn2x1 dd      ?
  8034. .btn2y  dd      ?
  8035. .btn2x2 dd      ?
  8036.         dd      ?
  8037.         dd      aGoto
  8038.         dd      1Ch
  8039. .btn3:
  8040.         dd      2
  8041. .btn3x1 dd      ?
  8042. .btn3y  dd      ?
  8043. .btn3x2 dd      ?
  8044.         dd      ?
  8045.         dd      aView
  8046.         dd      8
  8047. .btn4:
  8048.         dd      2
  8049. .btn4x1 dd      ?
  8050. .btn4y  dd      ?
  8051. .btn4x2 dd      ?
  8052.         dd      ?
  8053.         dd      aCancelB2
  8054.         dd      8
  8055. .size = $ - filesearch_search_template
  8056.  
  8057. RetryOrCancelBtn:
  8058.         dd      aRetry
  8059.         dd      a_Cancel
  8060. DeleteOrKeepBtn:
  8061.         dd      a_Delete
  8062.         dd      aKeep
  8063. RetryOrIgnoreBtn:
  8064.         dd      aRetry
  8065.         dd      aIgnore
  8066. DeleteOrCancelBtn:
  8067.         dd      a_Delete
  8068.         dd      a_Cancel
  8069. DeleteErrorBtn:
  8070.         dd      aRetry
  8071. SkipOrCancelBtn:
  8072.         dd      aSkip
  8073.         dd      aSkipAll
  8074.         dd      a_Cancel
  8075. ContinueBtn:
  8076.         dd      aContinue
  8077. EditorExitBtn:
  8078.         dd      aSave
  8079.         dd      aDontSave
  8080.         dd      aContinueEdit
  8081. YesOrNoBtn:
  8082.         dd      aYes
  8083.         dd      aNo
  8084.  
  8085. aCannotOpenFile_ptr     dd      aCannotOpenFile
  8086. aCannotCreateThread_ptr dd      aCannotCreateThread
  8087. ConfirmCancelMsg        dd      aConfirmCancel
  8088. EditConfigErr_ptr:
  8089.         dd      aEditConfigErr1
  8090.         dd      aEditConfigErr2
  8091. if lang eq ru
  8092. aDeleteCaption          db      '“¤ «¥­¨¥',0
  8093. aConfirmDeleteText      db      '‚ë å®â¨â¥ 㤠«¨âì',0
  8094. aDeleteFolder           db      ' ¯ ¯ªã',0
  8095. aConfirmDeleteTextMax = $ - aConfirmDeleteText - 2
  8096. aDeleteFile             db      ' ä ©«',0
  8097. aCancelB                db      '[ Žâ¬¥­¨âì ]',0
  8098. aCancelBLength = $ - aCancelB - 1
  8099. aCancelB2               db      '[ Žâ¬¥­  ]',0
  8100. aCancelB2Length = $ - aCancelB2 - 1
  8101. aCopyCaption            db      'Š®¯¨à®¢ ­¨¥',0
  8102. aCopy                   db      '[ Š®¯¨à®¢ âì ]',0
  8103. aCopyLength = $ - aCopy - 1
  8104. a_Continue              db      '[ à®¤®«¦¨âì ]',0
  8105. a_ContinueLength = $ - a_Continue - 1
  8106. aCopy1                  db      'Š®¯¨à®¢ âì ',0
  8107. aCopy2                  db      ' ¢:',0
  8108. aError                  db      'Žè¨¡ª ',0
  8109. aContinue               db      'à®¤®«¦¨âì',0
  8110. aRetry                  db      '®¢â®à¨âì',0
  8111. a_Cancel                db      'Žâ¬¥­¨âì',0
  8112. a_Delete                db      '“¤ «¨âì',0
  8113. aSkip                   db      'à®¯ãáâ¨âì',0
  8114. aSkipAll                db      'à®¯ãáâ¨âì ¢á¥',0
  8115. aYes                    db      '„ ',0
  8116. aNo                     db      '¥â',0
  8117. error0msg               db      '‘âà ­­®... ¥â ®è¨¡ª¨',0
  8118. error1msg               db      '‘âà ­­®... ¥ ®¯à¥¤¥«¥­  ¡ §  ¨/¨«¨ à §¤¥« ¦ñá⪮£® ¤¨áª ',0
  8119. error2msg               db      '”ã­ªæ¨ï ­¥ ¯®¤¤¥à¦¨¢ ¥âáï ¤«ï ¤ ­­®© ä ©«®¢®© á¨á⥬ë',0
  8120. error3msg               db      '¥¨§¢¥áâ­ ï ä ©«®¢ ï á¨á⥬ ',0
  8121. error4msg               db      '‘âà ­­®... Žè¨¡ª  4',0
  8122. error5msg               db      '” ©« ­¥ ­ ©¤¥­',0
  8123. error6msg               db      '” ©« § ª®­ç¨«áï',0
  8124. error7msg               db      '‘âà ­­®... “ª § â¥«ì ¢­¥ ¯ ¬ï⨠¯à¨«®¦¥­¨ï',0
  8125. error8msg               db      '„¨áª § ¯®«­¥­',0
  8126. error9msg               db      '” ©«®¢ ï áâàãªâãà  à §àã襭 ',0
  8127. error10msg              db      '„®áâ㯠§ ¯à¥éñ­',0
  8128. error11msg              db      'Žè¨¡ª  ãáâனá⢠',0
  8129. error30msg              db      '¥¤®áâ â®ç­® ¯ ¬ïâ¨',0
  8130. error31msg              db      '” ©« ­¥ ï¥âáï ¨á¯®«­ï¥¬ë¬',0
  8131. error32msg              db      '‘«¨èª®¬ ¬­®£® ¯à®æ¥áᮢ',0
  8132. aUnknownError           db      '¥¨§¢¥áâ­ë© ª®¤ ®è¨¡ª¨: ',0
  8133. aCannotReadFolder       db      '¥ ¬®£ã ¯à®ç¨â âì ¯ ¯ªã',0
  8134. aRunError               db      'Žè¨¡ª  ¯à¨ § ¯ã᪥ ¯à®£à ¬¬ë:',0
  8135. aFileNameTooBig         db      '®«­®¥ ¨¬ï ä ©«  ᫨誮¬ ¤«¨­­®¥',0
  8136. aFolderNameTooBig       db      '®«­®¥ ¨¬ï ¯ ¯ª¨ ᫨誮¬ ¤«¨­­®¥',0
  8137. aCmdLineTooBig          db      'Š®¬ ­¤­ ï áâப  ¯à¥¢ë蠥⠣࠭¨æã OS ¢ 256 ᨬ¢®«®¢',0
  8138. aCannotCopyToSelf       db      '” ©« ­¥ ¬®¦¥â ¡ëâì ᪮¯¨à®¢ ­ ¢ á ¬®£® ᥡï',0
  8139. aCannotReadFile         db      '¥ ¬®£ã ¯à®ç¨â âì ä ©«',0
  8140. aIncompleteFile         db      'ë« ¯®«ã祭 ­¥¯®«­ë© ä ©«. “¤ «¨âì ¥£®?',0
  8141. aKeep                   db      'Žáâ ¢¨âì',0
  8142. aCannotWriteFile        db      '¥ ¬®£ã § ¯¨á âì ¢ ä ©«',0
  8143. aCannotDeleteFile       db      '¥ ¬®£ã 㤠«¨âì ä ©«',0
  8144. aCannotDeleteFolder     db      '¥ ¬®£ã 㤠«¨âì ¯ ¯ªã',0
  8145. aNotFolder              db      '­¥ ï¥âáï ¯ ¯ª®©',0
  8146. aIgnore                 db      'ˆ£­®à¨à®¢ âì',0
  8147. aMkDirCaption           db      '‘®§¤ ­¨¥ ¯ ¯ª¨',0
  8148. aMkDir                  db      '‘®§¤ âì ¯ ¯ªã',0
  8149. aMkDirLen = $ - aMkDir - 1
  8150. aCannotMakeFolder       db      '¥ ¬®£ã ᮧ¤ âì ¯ ¯ªã',0
  8151. aName                   db      3,'ˆ¬ï'
  8152. aSize                   db      6,' §¬¥à'
  8153. aDate                   db      4,'„ â '
  8154. aTime                   db      5,'‚६ï'
  8155. aCannotLoadDLL          db      '¥ ¬®£ã § £à㧨âì DLL',0
  8156. aCannotLoadPlugin       db      '¥ ¬®£ã § £à㧨âì ¯« £¨­',0
  8157. aInvalidDLL             db      '” ©« ­¥ ­ ©¤¥­ ¨«¨ ¨¬¥¥â ­¥¢¥à­ë© ä®à¬ â',0
  8158. aMissingExport          db      '¥®¡å®¤¨¬ ï äã­ªæ¨ï ­¥ ­ ©¤¥­ ',0
  8159. aInitFailed             db      'Žè¨¡ª  ¯à¨ ¨­¨æ¨ «¨§ æ¨¨',0
  8160. aIncompatibleVersion    db      '¥á®¢¬¥á⨬ ï ¢¥àá¨ï',0
  8161. aTables                 db      '’ ¡«¨æë',0
  8162. aSelect                 db      '®¬¥â¨âì',0
  8163. aDeselect               db      '‘­ïâì',0
  8164. aCannotOpenFile         db      'Žè¨¡ª  ¯à¨ ®âªàë⨨ ä ©« ',0
  8165. aCannotCreateThread     db      'Žè¨¡ª  ¯à¨ ᮧ¤ ­¨¨ ¯®â®ª ',0
  8166. aCannotSetFolder        db      '¥ ¬®£ã § ©â¨ ¢ ¯ ¯ªã',0
  8167. aSearch                 db      '®¨áª',0
  8168. aSearchB                db      '[ ˆáª âì ]',0
  8169. aSearchBLength = $ - aSearchB - 1
  8170. aSearchFor              db      'ˆáª âì',0
  8171. aSearchForLen = $ - aSearchFor - 1
  8172. aCaseSensitive          db      '“ç¨â뢠âì ॣ¨áâà',0
  8173. aWholeWords             db      '’®«ìª® æ¥«ë¥ á«®¢ ',0
  8174. aReverseSearch          db      'Ž¡à â­ë© ¯®¨áª',0
  8175. aStringNotFound         db      '‘âப  ­¥ ­ ©¤¥­ ',0
  8176. aFileSearch             db      '®¨áª ä ©« ',0
  8177. aFileMasks              db      'Ž¤­  ¨«¨ ­¥áª®«ìª® ¬ á®ª ä ©«®¢:',0
  8178. aFileMasksLen = $ - aFileMasks - 1
  8179. aContainingText         db      '‘®¤¥à¦ é¨å ⥪áâ:',0
  8180. aContainingTextLen = $ - aContainingText - 1
  8181. aSearchingIn            db      '®¨áª "" ¢:',0
  8182. aSearchingInLen = $ - aSearchingIn - 1
  8183. aSearchDone             db      '®¨áª § ª®­ç¥­.  ©¤¥­® ? ä ©«(®¢)',0
  8184. aSearchDoneLen = $ - aSearchDone - 1
  8185. aNewSearch              db      '[ ®¢ë© ¯®¨áª ]',0
  8186. aNewSearchLen = $ - aNewSearch - 1
  8187. aGoto                   db      '[ ¥à¥©â¨ ]',0
  8188. aGotoLen = $ - aGoto - 1
  8189. aView                   db      '[ ‘¬®âà¥âì ]',0
  8190. aViewLen = $ - aView - 1
  8191. aEditConfigErr1         db      'Žè¨¡ª  ¢ ª®­ä¨£ãà æ¨¨ ¯« £¨­®¢ ¤«ï । ªâ®à .',0
  8192. aEditConfigErr2         db      '®¯à®¡ã©â¥ ã¡à âì «¨è­¨¥ ¯« £¨­ë.',0
  8193. aEditNoMemory           db      '” ©« ᫨誮¬ ¢¥«¨ª ¤«ï § £à㧪¨ ¢ । ªâ®à.',0
  8194. aLine                   db      '  ‘âப '
  8195. aCol                    db      '   Š®« '
  8196. aEditorTitle            db      '¥¤ ªâ®à',0
  8197. aFileModified           db      '” ©« ¡ë« ¨§¬¥­ñ­',0
  8198. aSave                   db      '‘®åà ­¨âì',0
  8199. aDontSave               db      '¥ á®åà ­ïâì',0
  8200. aContinueEdit           db      'à®¤®«¦¨âì । ªâ¨à®¢ ­¨¥',0
  8201. aCannotSaveToPlugin     db      '‘®åà ­¥­¨¥ ä ©«®¢ ­  ¯ ­¥«ïå ¯« £¨­®¢ ­¥ ¯®¤¤¥à¦¨¢ ¥âáï',0
  8202. aCannotSearchOnPlugin   db      '®¨áª ­  ¯ ­¥«ïå ¯« £¨­®¢ ­¥ ¯®¤¤¥à¦¨¢ ¥âáï',0
  8203. aCancelled              db      '„¥©á⢨¥ ¡ë«® ¯à¥à¢ ­®',0
  8204. aConfirmCancel          db      '‚ë ¤¥©á⢨⥫쭮 å®â¨â¥ ®â¬¥­¨âì ¤¥©á⢨¥?',0
  8205. else
  8206. aDeleteCaption          db      'Delete',0
  8207. aConfirmDeleteText      db      'Do you wish to delete',0
  8208. aDeleteFolder           db      ' the folder',0
  8209. aConfirmDeleteTextMax = $ - aConfirmDeleteText - 2
  8210. aDeleteFile             db      ' the file',0
  8211. aDelete                 db      ' Delete ',0
  8212. aDeleteLength = $ - aDelete - 1
  8213. aCancel                 db      ' Cancel ',0
  8214. aCancelLength = $ - aCancel - 1
  8215. aCancelB                db      '[ Cancel ]',0
  8216. aCancelBLength = $ - aCancelB - 1
  8217. aCopyCaption            db      'Copy',0
  8218. aCopy                   db      '[ Copy ]',0
  8219. aCopyLength = $ - aCopy - 1
  8220. a_Continue              db      '[ Continue ]',0
  8221. a_ContinueLength = $ - a_Continue - 1
  8222. aCopy1                  db      'Copy "',0
  8223. aCopy2                  db      '" to:',0
  8224. aError                  db      'Error',0
  8225. aContinue               db      'Continue',0
  8226. aRetry                  db      'Retry',0
  8227. a_Cancel                db      'Cancel',0
  8228. a_Delete                db      'Delete',0
  8229. aSkip                   db      'Skip',0
  8230. aSkipAll                db      'Skip all',0
  8231. aYes                    db      'Yes',0
  8232. aNo                     db      'No',0
  8233. error0msg               db      'Strange... No error',0
  8234. error1msg               db      'Strange... Hard disk base and/or partition not defined',0
  8235. error2msg               db      'The file system does not support this function',0
  8236. error3msg               db      'Unknown file system',0
  8237. error4msg               db      'Strange... Error 4',0
  8238. error5msg               db      'File not found',0
  8239. error6msg               db      'End of file',0
  8240. error7msg               db      'Strange... Pointer lies outside of application memory',0
  8241. error8msg               db      'Disk is full',0
  8242. error9msg               db      'File structure is destroyed',0
  8243. error10msg              db      'Access denied',0
  8244. error11msg              db      'Device error',0
  8245. error30msg              db      'Not enough memory',0
  8246. error31msg              db      'File is not executable',0
  8247. error32msg              db      'Too many processes',0
  8248. aUnknownError           db      'Unknown error code: ',0
  8249. aCannotReadFolder       db      'Cannot read folder',0
  8250. aRunError               db      'Cannot execute program:',0
  8251. aFileNameTooBig         db      'Full file name is too long',0
  8252. aFolderNameTooBig       db      'Full folder name is too long',0
  8253. aCmdLineTooBig          db      'Command line is too long (OS limit is 256 symbols)',0
  8254. aCannotCopyToSelf       db      'File cannot be copied onto itself',0
  8255. aCannotReadFile         db      'Cannot read file',0
  8256. aIncompleteFile         db      'Incomplete file was retrieved. Delete it?',0
  8257. aKeep                   db      'Keep',0
  8258. aCannotWriteFile        db      'Cannot write to the file',0
  8259. aCannotDeleteFile       db      'Cannot delete the file',0
  8260. aCannotDeleteFolder     db      'Cannot delete the folder',0
  8261. aNotFolder              db      'is not a folder',0
  8262. aIgnore                 db      'Ignore',0
  8263. aMkDirCaption           db      'Make folder',0
  8264. aMkDir                  db      'Create the folder',0
  8265. aMkDirLen = $ - aMkDir - 1
  8266. aCannotMakeFolder       db      'Cannot create folder',0
  8267. aName                   db      4,'Name'
  8268. aSize                   db      4,'Size'
  8269. aDate                   db      4,'Date'
  8270. aTime                   db      4,'Time'
  8271. aCannotLoadDLL          db      'Cannot load DLL',0
  8272. aCannotLoadPlugin       db      'Cannot load plugin',0
  8273. aInvalidDLL             db      'File is not found or invalid',0
  8274. aMissingExport          db      'Required function is not present',0
  8275. aInitFailed             db      'Initialization failed',0
  8276. aIncompatibleVersion    db      'Incompatible version',0
  8277. aTables                 db      'Tables',0
  8278. aSelect                 db      'Select',0
  8279. aDeselect               db      'Deselect',0
  8280. aCannotOpenFile         db      'Cannot open the file',0
  8281. aCannotCreateThread     db      'Cannot create a thread',0
  8282. aCannotSetFolder        db      'Cannot enter to the folder',0
  8283. aSearch                 db      'Search',0
  8284. aSearchB                db      '[ Search ]',0
  8285. aSearchBLength = $ - aSearchB - 1
  8286. aSearchFor              db      'Search for',0
  8287. aSearchForLen = $ - aSearch - 1
  8288. aCaseSensitive          db      'Case sensitive',0
  8289. aWholeWords             db      'Whole words',0
  8290. aReverseSearch          db      'Reverse search',0
  8291. aStringNotFound         db      'Could not find the string',0
  8292. aFileSearch             db      'Find file',0
  8293. aFileMasks              db      'A file mask or several file masks:',0
  8294. aContainingText         db      'Containing text:',0
  8295. aSearchingIn            db      'Searching "" in:',0
  8296. aSearchingInLen = $ - aSearchingIn - 1
  8297. aSearchDone             db      'Search done. Found ? file(s)',0
  8298. aSearchDoneLen = $ - aSearchDone - 1
  8299. aNewSearch              db      '[ New search ]',0
  8300. aNewSearchLen = $ - aNewSearch - 1
  8301. aGoto                   db      '[ Go to ]',0
  8302. aGotoLen = $ - aGoto - 1
  8303. aView                   db      '[ View ]',0
  8304. aViewLen = $ - aView - 1
  8305. aEditConfigErr1         db      'Error in configuration of plugins for the editor.',0
  8306. aEditConfigErr2         db      'Try to remove unnecessary plugins.',0
  8307. aLine                   db      '    Line'
  8308. aCol                    db      '   Col '
  8309. aEditorTitle            db      'Editor',0
  8310. aFileModified           db      'File has been modified',0
  8311. aSave                   db      'Save',0
  8312. aDontSave               db      'Do not save',0
  8313. aContinueEdit           db      'Continue editing',0
  8314. aCannotSaveToPlugin     db      'Saving is not supported for plugin panels',0
  8315. aCancelled              db      'Operation has been interrupted',0
  8316. aConfirmCancel          db      'Do you really want to cancel it?',0
  8317. end if
  8318.  
  8319. aOk                     db      'OK',0
  8320. aNoMemory               db      'No memory!'
  8321. nullstr                 db      0
  8322. aUntitled               db      'untitled',0
  8323. aDotDot                 db      '..',0,0
  8324. standard_dll_path:
  8325. libini_name             db      '/sys/lib/'
  8326. standard_dll_path_size = $ - standard_dll_path
  8327.                         db      'libini.obj',0
  8328. aStart                  db      'START',0
  8329. aLibInit                db      'lib_init',0
  8330. aVersion                db      'version',0
  8331. aIniGetInt              db      'ini.get_int',0
  8332. aIniGetStr              db      'ini.get_str',0
  8333. aIniSetInt              db      'ini.set_int',0
  8334. aIniEnumKeys            db      'ini.enum_keys',0
  8335. aPluginLoad             db      'plugin_load',0
  8336. aPluginUnload           db      'plugin_unload',0
  8337. aGetattr                db      'getattr',0
  8338. aOpen                   db      'open',0
  8339. aRead                   db      'read',0
  8340. aSetpos                 db      'setpos',0
  8341. aClose                  db      'close',0
  8342. aOpenFilePlugin         db      'OpenFilePlugin',0
  8343. aClosePlugin            db      'ClosePlugin',0
  8344. aReadFolder             db      'ReadFolder',0
  8345. aSetFolder              db      'SetFolder',0
  8346. aGetOpenPluginInfo      db      'GetOpenPluginInfo',0
  8347. aGetPanelTitle          db      'GetPanelTitle',0
  8348. aGetFiles               db      'GetFiles',0
  8349. aEditInfoSize           db      'EditInfoSize',0
  8350.  
  8351. aConfirmations          db      'Confirmations',0
  8352. aConfirmDelete          db      'Delete',0
  8353. aConfirmDeleteIncomplete db     'DeleteIncomplete',0
  8354.  
  8355. aPanels                 db      'Panels',0
  8356. aLeftViewMode           db      'LeftViewMode',0
  8357. aRightViewMode          db      'RightViewMode',0
  8358.  
  8359. aEditor                 db      'Editor',0
  8360. aEolStyle               db      'EOLStyle',0
  8361.  
  8362. aAssociations           db      'Associations',0
  8363. aPlugins                db      'Plugins',0
  8364. aMenu                   db      'Menu',0
  8365. aFolderShortcuts        db      'FolderShortcuts',0
  8366. aShortcut               db      'Shortcut'
  8367. .d                      db      '0',0
  8368.  
  8369. align 4
  8370. ini_import:
  8371. ini.get_int     dd      aIniGetInt
  8372. ini.get_str     dd      aIniGetStr
  8373. ini.enum_keys   dd      aIniEnumKeys
  8374. ini.set_int     dd      aIniSetInt
  8375.                 dd      0
  8376.  
  8377. plugin_exported:
  8378.         dd      aPluginUnload
  8379.         dd      aGetattr
  8380.         dd      aOpen
  8381.         dd      aRead
  8382.         dd      aSetpos
  8383.         dd      aClose
  8384.         dd      aOpenFilePlugin
  8385.         dd      aClosePlugin
  8386.         dd      aReadFolder
  8387.         dd      aSetFolder
  8388.         dd      aGetOpenPluginInfo
  8389.         dd      aGetPanelTitle
  8390.         dd      aGetFiles
  8391.         dd      aEditInfoSize
  8392.         dd      0
  8393. plugin_exported_default:
  8394.         dd      plugin_unload_default
  8395.         dd      getattr_default
  8396.         dd      open_default
  8397.         dd      read
  8398.         dd      setpos_default
  8399.         dd      close
  8400.         dd      OpenFilePlugin_default
  8401.         dd      ClosePlugin_default
  8402.         dd      ReadFolder_default
  8403.         dd      SetFolder_default
  8404.         dd      GetOpenPluginInfo_default
  8405.         dd      GetPanelTitle_default
  8406.         dd      GetFiles_default
  8407.         dd      0       ; default value for EditInfoSize
  8408.  
  8409. kfar_info:
  8410.         dd      .size
  8411.         dd      version_dword
  8412.         dd      open
  8413.         dd      open2
  8414.         dd      read
  8415.         dd      -1      ; write: to be implemented
  8416.         dd      seek
  8417.         dd      tell
  8418.         dd      -1      ; flush: to be implemented
  8419.         dd      filesize
  8420.         dd      close
  8421.         dd      xpgalloc
  8422.         dd      xpgrealloc
  8423.         dd      pgfree
  8424.         dd      getfreemem
  8425.         dd      libini_alloc
  8426.         dd      libini_realloc
  8427.         dd      libini_free
  8428.         dd      menu
  8429.         dd      menu_centered_in
  8430.         dd      DialogBox
  8431.         dd      SayErr
  8432.         dd      Message
  8433.         dd      cur_width
  8434. .size = $ - kfar_info
  8435.  
  8436. plugins         dd      0
  8437. num_plugins     dd      0
  8438. alloc_plugins   dd      0
  8439.  
  8440. EditPlugInfo    dd      0
  8441. EditEOLStyle    db      edit.eol_unix
  8442.  
  8443. virtual at 0
  8444. PluginInfo:
  8445. .unload         dd      ?
  8446. .getattr        dd      ?
  8447. .open           dd      ?
  8448. .read           dd      ?
  8449. .setpos         dd      ?
  8450. .close          dd      ?
  8451. .OpenFilePlugin dd      ?
  8452. .ClosePlugin    dd      ?
  8453. .ReadFolder     dd      ?
  8454. .SetFolder      dd      ?
  8455. .GetOpenPluginInfo dd   ?
  8456. .GetPanelTitle  dd      ?
  8457. .GetFiles       dd      ?
  8458. .EditInfoSize   dd      ?
  8459. .EditInfoOffs   dd      ?
  8460. .size = $
  8461. end virtual
  8462.  
  8463. virtual at 0
  8464. PanelMode:
  8465. ; up to 16 columns on one panel
  8466. .NumColumns     dd      ?
  8467. ; available column types:
  8468. COLUMN_TYPE_NONE = 0
  8469. COLUMN_TYPE_NAME = 1
  8470.         COLUMN_NAME_MARK = 10h          ; (reserved)
  8471.         COLUMN_NAME_NOPATH = 20h        ; (reserved)
  8472.         COLUMN_NAME_RIGHTALIGN = 40h    ; (reserved)
  8473. COLUMN_TYPE_SIZE = 2
  8474.         COLUMN_SIZE_COMMA = 10h         ; (reserved)
  8475. COLUMN_TYPE_PACKED_SIZE = 3             ; (reserved)
  8476. COLUMN_TYPE_DATE = 4
  8477. COLUMN_TYPE_TIME = 5
  8478. COLUMN_TYPE_DATETIME = 6                ; (reserved)
  8479. COLUMN_TYPE_DATETIME_CREATION = 7       ; (reserved)
  8480. COLUMN_TYPE_DATETIME_ACCESS = 8         ; (reserved)
  8481. COLUMN_TYPE_ATTRIBUTES = 9              ; (reserved)
  8482. COLUMN_TYPE_DESCRIPTION = 10            ; (reserved)
  8483. COLUMN_TYPE_OWNER = 11                  ; (reserved)
  8484. COLUMN_TYPE_NUMLINKS = 12               ; (reserved)
  8485. COLUMN_TYPE_CUSTOM = 13                 ; (reserved)
  8486. .ColumnTypes    rb      16
  8487.  
  8488. .ColumnWidths   rb      16
  8489. .bFullScreen    db      ?               ; (reserved)
  8490. .bAlignExtensions db    ?
  8491.                 rb      2
  8492. .size = $
  8493. end virtual
  8494.  
  8495. align 4
  8496. column_headers:
  8497.         dd      nullstr
  8498.         dd      aName
  8499.         dd      aSize
  8500.         dd      nullstr
  8501.         dd      aDate
  8502.         dd      aTime
  8503. draw_column_proc:
  8504.         dd      draw_empty_column
  8505.         dd      draw_name_column
  8506.         dd      draw_size_column
  8507.         dd      -1
  8508.         dd      draw_date_column
  8509.         dd      draw_time_column
  8510. colmodes:
  8511. ; ०¨¬ 0 : NM,SC,D
  8512.         dd      3
  8513.         db      COLUMN_TYPE_NAME+COLUMN_NAME_MARK, COLUMN_TYPE_SIZE+COLUMN_SIZE_COMMA
  8514.                 db      COLUMN_TYPE_DATE, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  8515.         db      0, 10, 8
  8516.                 times 13 db 0
  8517.         db      0, 1
  8518.                 times 2 db 0
  8519. ; ०¨¬ 1 : N,N,N
  8520.         dd      3
  8521.         db      COLUMN_TYPE_NAME, COLUMN_TYPE_NAME, COLUMN_TYPE_NAME
  8522.                 times 13 db 0
  8523.         times 16 db 0
  8524.         db      0, 1
  8525.                 times 2 db 0
  8526. ; ०¨¬ 2 : N,N
  8527.         dd      2
  8528.         db      COLUMN_TYPE_NAME, COLUMN_TYPE_NAME
  8529.                 times 14 db 0
  8530.         times 16 db 0
  8531.         db      0, 0
  8532.                 times 2 db 0
  8533. ; ०¨¬ 3 : N,S,D,T
  8534.         dd      4
  8535.         db      COLUMN_TYPE_NAME, COLUMN_TYPE_SIZE, COLUMN_TYPE_DATE, COLUMN_TYPE_TIME
  8536.                 times 12 db 0
  8537.         db      0, 6, 8, 5
  8538.                 times 12 db 0
  8539.         db      0, 1
  8540.                 times 2 db 0
  8541. ; ०¨¬ 4 : N,S
  8542.         dd      2
  8543.         db      COLUMN_TYPE_NAME, COLUMN_TYPE_SIZE
  8544.                 times 14 db 0
  8545.         db      0, 6
  8546.                 times 14 db 0
  8547.         db      0, 0
  8548.                 times 2 db 0
  8549. ; ०¨¬ 5 : N,S,P,DM,DC,DA,A
  8550. ; ०¨¬ 6 : N,Z
  8551. ; ०¨¬ 7 : N,S,Z
  8552. ; ०¨¬ 8 : N,S,O
  8553. ; ०¨¬ 9 : N,S,LN
  8554.  
  8555. execinfo:
  8556.         dd      7
  8557.         dd      0
  8558. execparams dd   0
  8559.         dd      0
  8560.         dd      0
  8561.         db      0
  8562. execptr dd      ?
  8563.  
  8564. IncludeIGlobals
  8565.  
  8566. i_end:
  8567.  
  8568. IncludeUGlobals
  8569.  
  8570. execdata rb     1024
  8571. execdataend:
  8572.         align   4
  8573. attrinfo.attr   rb      40
  8574.  
  8575. panel1_data:
  8576. panel1_left     dd      ?
  8577. panel1_top      dd      ?
  8578. panel1_width    dd      ?
  8579. panel1_height   dd      ?
  8580. panel1_index    dd      ?
  8581. panel1_start    dd      ?
  8582. panel1_colsz    dd      ?
  8583. panel1_colst    dd      ?
  8584. panel1_sortmode db      ?
  8585.                 rb      3
  8586. panel1_nfa      dd      ?
  8587. panel1_numfiles dd      ?
  8588. panel1_files    dd      ?
  8589. panel1_hPlugin  dd      ?
  8590. panel1_hFile    dd      ?
  8591. panel1_parents          dd      ?
  8592. panel1_parents_sz       dd      ?
  8593. panel1_parents_alloc    dd      ?
  8594. panel1_colmode          dd      ?
  8595. panel1_colwidths        rd      16+1
  8596. panel1_total_num        dd      ?
  8597. panel1_total_size       dq      ?
  8598. panel1_selected_num     dd      ?
  8599. panel1_selected_size    dq      ?
  8600. panel1_plugin_info:
  8601. panel1_plugin_flags     dd      ?
  8602. panel1_dir      rb      1024
  8603.  
  8604. panel2_data:
  8605. panel2_left     dd      ?
  8606. panel2_top      dd      ?
  8607. panel2_width    dd      ?
  8608. panel2_height   dd      ?
  8609. panel2_index    dd      ?
  8610. panel2_start    dd      ?
  8611. panel2_colsz    dd      ?
  8612. panel2_colst    dd      ?
  8613. panel2_sortmode db      ?
  8614.                 rb      3
  8615. panel2_nfa      dd      ?
  8616. panel2_numfiles dd      ?
  8617. panel2_files    dd      ?
  8618. panel2_hPlugin  dd      ?
  8619. panel2_hFile    dd      ?
  8620. panel2_parents          dd      ?
  8621. panel2_parents_sz       dd      ?
  8622. panel2_parents_alloc    dd      ?
  8623. panel2_colmode          dd      ?
  8624. panel2_colwidths        rd      16+1
  8625. panel2_total_num        dd      ?
  8626. panel2_total_size       dq      ?
  8627. panel2_selected_num     dd      ?
  8628. panel2_selected_size    dq      ?
  8629. panel2_plugin_info:
  8630. panel2_plugin_flags     dd      ?
  8631. panel2_dir      rb      1024
  8632.  
  8633. ;console_data    rb      max_width*max_height*2
  8634.  
  8635. nomem_dlgsavearea       rb      8 + (12+4)*(3+3)*2
  8636.  
  8637. quicksearch_savearea    rb      22*3*2
  8638. quicksearch_maxlen = 64
  8639. quick_search_buf        rb      12 + quicksearch_maxlen
  8640.  
  8641. cur_header      rb      max_width
  8642. tmp             dd      ?
  8643.  
  8644. skinh           dd      ?
  8645. std_colors      rd      10
  8646.  
  8647. min_y           dd      ?
  8648. max_y           dd      ?
  8649. min_x           dd      ?
  8650. max_x           dd      ?
  8651. used_width      dd      ?
  8652. used_height     dd      ?
  8653.  
  8654. wnd_width       dd      ?
  8655. wnd_height      dd      ?
  8656.  
  8657. column_left     dd      ?
  8658. column_top      dd      ?
  8659. column_width    dd      ?
  8660. column_height   dd      ?
  8661. column_index    dd      ?
  8662. last_column_index dd    ?
  8663.  
  8664. scrpos          dq      ?
  8665. viewer_right_side dq    ?
  8666.  
  8667. EditDataSize    dd      ?
  8668. EditBlockStart  dd      ?
  8669. EditBlockSize   dd      ?
  8670.  
  8671. saved_file_name:
  8672. procinfo        rb      1024
  8673. lower_file_name = procinfo + 512
  8674.  
  8675. app_path        rb      1100
  8676.  
  8677. error_msg       rb      128
  8678.  
  8679. prev_dir        rb      1024
  8680.  
  8681. driveinfo       rb      32+304
  8682. tmpname         rb      32
  8683.  
  8684. screens         dd      ?
  8685. num_screens     dd      ?
  8686. active_screen_vtable dd ?
  8687. active_screen_data dd   ?
  8688. active_screen_keybar dd ?
  8689.  
  8690. default_attr    dd      ?
  8691. left_dotdot_entry       rb      40+4    ; 40 bytes for attributes + '..'
  8692. right_dotdot_entry      rb      40+4
  8693.  
  8694. aConfirmDeleteTextBuf   rb      aConfirmDeleteTextMax + 1
  8695. CopySourceTextBuf       rb      512
  8696. CopyDestEditBuf         rb      12+512+1
  8697. .length = $ - CopyDestEditBuf - 13
  8698.  
  8699. SearchStringEditBuf     rb      12
  8700. SearchString            rb      253+1
  8701. SearchStringEditBuf.length = $ - SearchString - 1
  8702.                         db      ?       ; used for output (string -> "string")
  8703.  
  8704. enter_string_buf        rb      12+512+1
  8705.  
  8706. bMemForImageValidData   db      ?
  8707.  
  8708. align 4
  8709. identical_table rb      256
  8710. tolower_table   rb      256
  8711. isspace_table   rb      256
  8712. composite_table rb      256
  8713. layout          rb      128
  8714.  
  8715. copy_buffer_size = 65536
  8716. copy_buffer     rb      copy_buffer_size
  8717.  
  8718. filedata_buffer_size = 1024
  8719. filedata_buffer rb      filedata_buffer_size
  8720.  
  8721. source_hModule  dd      ?
  8722. source_hPlugin  dd      ?
  8723. source_hFile    dd      ?
  8724. ; data for directory delete
  8725. ; If directory nested level is >1024, then its full name is too big,
  8726. ; so we see the overflow when creating full name (we check for this!)
  8727. del_dir_stack   rd      1024
  8728. del_dir_stack_ptr dd    ?
  8729. del_dir_query_size = 32
  8730. del_dir_query_area rb   32+304*del_dir_query_size
  8731.  
  8732. label copy_dir_stack dword at del_dir_stack
  8733. label copy_dir_stack_ptr dword at del_dir_stack_ptr
  8734. copy_dir_query_size = del_dir_query_size
  8735. copy_dir_query_area = del_dir_query_area
  8736. del_bSkipAll    db      ?       ; for directory errors
  8737. label copy_bSkipAll byte at del_bSkipAll
  8738. copy_bSkipAll2  db      ?       ; for file read/write errors
  8739. copy_bSkipAll3  db      ?       ; for SetFolder errors
  8740.  
  8741. bEndSlash       db      ?
  8742. bDestIsFolder   db      ?
  8743. bNeedRestoreName db     ?
  8744.  
  8745. ; stack
  8746.         align   4
  8747.         rb      32768
  8748. stacktop:
  8749.  
  8750. mem:
  8751.