Subversion Repositories Kolibri OS

Rev

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