Subversion Repositories Kolibri OS

Rev

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