Subversion Repositories Kolibri OS

Rev

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