Subversion Repositories Kolibri OS

Rev

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

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