Subversion Repositories Kolibri OS

Rev

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