Subversion Repositories Kolibri OS

Rev

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