Subversion Repositories Kolibri OS

Rev

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