Subversion Repositories Kolibri OS

Rev

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

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