Subversion Repositories Kolibri OS

Rev

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

  1. use32
  2.         db      'MENUET01'
  3.         dd      1
  4.         dd      start
  5.         dd      i_end
  6. memsize dd      mem
  7.         dd      stacktop
  8.         dd      0, 0
  9.  
  10. include 'lang.inc'
  11. include 'font.inc'
  12. include 'sort.inc'
  13. include 'kglobals.inc'
  14. include 'memalloc.inc'
  15. include 'dialogs.inc'
  16. include 'viewer.inc'
  17. include 'tools.inc'
  18.  
  19. start:
  20.         mov     eax, mem
  21.         call    mf_init
  22.         call    init_console
  23.         call    draw_window
  24.         push    66
  25.         pop     eax
  26.         push    1
  27.         pop     ebx
  28.         mov     ecx, ebx
  29.         int     40h     ; set keyboard mode to scancodes
  30.         mov     esi, def_left_dir
  31.         mov     edi, panel1_dir
  32. @@:
  33.         lodsb
  34.         stosb
  35.         test    al, al
  36.         jnz     @b
  37. @@:
  38.         mov     esi, def_right_dir
  39.         mov     edi, panel2_dir
  40. @@:
  41.         lodsb
  42.         stosb
  43.         test    al, al
  44.         jnz     @b
  45.         mov     eax, 200
  46.         mov     [panel1_nfa], eax
  47.         mov     [panel2_nfa], eax
  48.         mov     eax, 200*4 + 32 + 200*304
  49.         push    eax
  50.         call    mf_alloc
  51.         mov     [panel1_files], eax
  52.         pop     eax
  53.         call    mf_alloc
  54.         mov     [panel2_files], eax
  55.         test    eax, eax
  56.         jz      exit
  57.         cmp     [panel1_files], eax
  58.         jz      exit
  59.         mov     [panel1_sortmode], 0    ; sort by name
  60.         mov     [panel2_sortmode], 0
  61.         mov     [num_screens], 1
  62.         mov     eax, 8
  63.         call    mf_alloc
  64.         mov     [screens], eax
  65.         test    eax, eax
  66.         jz      exit
  67.         mov     ecx, panels_vtable
  68.         mov     [eax], ecx
  69.         mov     [active_screen_vtable], ecx
  70.         call    draw_keybar
  71.         call    draw_cmdbar
  72.         mov     [prev_dir], 0
  73.         mov     ebp, panel1_data
  74.         call    read_folder
  75.         call    draw_panel
  76.         mov     [bSilentFolderMode], 1
  77.         mov     ebp, panel2_data
  78.         call    read_folder
  79.         call    draw_panel
  80. event:
  81.         push    10
  82.         pop     eax
  83.         int     40h
  84.         dec     eax
  85.         jz      redraw
  86.         dec     eax
  87.         jz      key
  88. ; button - we have only one button, close
  89. exit:
  90.         or      eax, -1
  91.         int     40h
  92. redraw:
  93. ; query kbd state from OS
  94.         mov     al, 66
  95.         push    3
  96.         pop     ebx
  97.         int     0x40
  98.         and     eax, 0x3F
  99.         cmp     al, [ctrlstate]
  100.         mov     [ctrlstate], al
  101.         jz      @f
  102.         call    draw_keybar
  103. @@:
  104.         mov     al, 9
  105.         mov     ebx, procinfo
  106.         or      ecx, -1
  107.         int     40h
  108. ; test if rolled up
  109. ; height of rolled up window is [skinh]+3
  110.         mov     eax, [ebx+46]
  111.         sub     eax, [skinh]
  112.         cmp     eax, 5
  113.         ja      @f
  114.         mov     al, 12
  115.         push    1
  116.         pop     ebx
  117.         int     0x40
  118.         xor     eax, eax
  119. ; ebx, ecx, edi are ignored by function 0 after first redraw
  120.         mov     edx, 0x53000000
  121.         int     0x40
  122.         mov     al, 12
  123.         inc     ebx
  124.         int     0x40
  125.         jmp     event
  126. @@:
  127.         xor     ecx, ecx
  128.         mov     eax, [ebx+42]
  129.         mov     [wnd_width], eax
  130.         sub     eax, 5*2-1
  131.         jae     @f
  132.         xor     eax, eax
  133. @@:
  134.         cdq
  135.         mov     esi, font_width
  136.         div     esi
  137.         cmp     eax, 54
  138.         jae     @f
  139.         mov     al, 54
  140.         mov     ch, 1
  141. @@:
  142.         cmp     eax, 255
  143.         jbe     @f
  144.         mov     eax, 255
  145.         mov     ch, 1
  146. @@:
  147.         cmp     eax, [cur_width]
  148.         mov     [cur_width], eax
  149.         setnz   cl
  150.         or      cl, ch
  151.         test    edx, edx
  152.         mov     [fill_width], edx
  153.         setnz   ch
  154.         mov     eax, [ebx+46]
  155.         mov     [wnd_height], eax
  156.         sub     eax, [skinh]
  157.         sub     eax, 5-1
  158.         jns     @f
  159.         xor     eax, eax
  160. @@:
  161.         cdq
  162.         mov     esi, font_height
  163.         div     esi
  164.         cmp     eax, 8
  165.         jae     @f
  166.         mov     al, 8
  167.         mov     cl, 1
  168. @@:
  169.         cmp     eax, 255
  170.         jbe     @f
  171.         mov     eax, 255
  172.         mov     cl, 1
  173. @@:
  174.         mov     [fill_height], edx
  175.         cmp     eax, [cur_height]
  176.         mov     [cur_height], eax
  177.         jnz     .resize
  178.         test    cl, cl
  179.         jnz     .resize
  180.         test    edx, edx
  181.         setnz   cl
  182.         or      cl, ch
  183.         jz      @f
  184.         test    byte [ebx+70], 1
  185.         jnz     @f
  186. .resize:
  187.         push    67
  188.         pop     eax
  189.         or      ebx, -1
  190.         or      ecx, -1
  191.         mov     edx, [cur_width]
  192.         imul    edx, font_width
  193.         add     edx, 5*2-1
  194.         mov     esi, [cur_height]
  195.         imul    esi, font_height
  196.         add     esi, [skinh]
  197.         add     esi, 5-1
  198.         int     40h
  199. .resize_draw:
  200.         call    init_console
  201. ;        call    draw_window
  202.         call    draw_keybar
  203.         mov     ebp, [active_screen_data]
  204.         mov     eax, [active_screen_vtable]
  205.         call    dword [eax+screen_vtable.OnRedraw]
  206.         jmp     event
  207. @@:
  208.         call    draw_window
  209.         jmp     event
  210. alt_f9:
  211.         cmp     [saved_width], -1
  212.         jz      @f
  213.         mov     eax, [saved_width]
  214.         mov     [cur_width], eax
  215.         or      [saved_width], -1
  216.         mov     eax, [saved_height]
  217.         mov     [cur_height], eax
  218.         or      [saved_height], -1
  219.         jmp     redraw.resize
  220. @@:
  221.         push    48
  222.         pop     eax
  223.         push    5
  224.         pop     ebx
  225.         int     0x40
  226.         push    eax
  227.         sub     eax, [esp+2]
  228.         inc     eax
  229.         movzx   eax, ax
  230.         sub     eax, 10
  231.         xor     edx, edx
  232.         mov     ecx, font_width
  233.         div     ecx
  234.         xchg    [cur_width], eax
  235.         mov     [saved_width], eax
  236.         mov     eax, ebx
  237.         shr     ebx, 16
  238.         sub     eax, ebx
  239.         sub     eax, 5-1
  240.         sub     eax, [skinh]
  241.         xor     edx, edx
  242.         mov     ecx, font_height
  243.         div     ecx
  244.         xchg    [cur_height], eax
  245.         mov     [saved_height], eax
  246.         mov     ecx, ebx
  247.         pop     ebx
  248.         shr     ebx, 16
  249.         mov     edx, [cur_width]
  250.         imul    edx, font_width
  251.         add     edx, 5*2-1
  252.         mov     esi, [cur_height]
  253.         imul    esi, font_height
  254.         add     esi, [skinh]
  255.         add     esi, 4
  256.         push    67
  257.         pop     eax
  258.         int     0x40
  259.         jmp     redraw.resize_draw
  260. key:
  261.         mov     al, 2
  262.         int     40h
  263.         test    al, al
  264.         jnz     event
  265.         xchg    al, ah
  266.         cmp     al, 0xE0
  267.         jnz     @f
  268.         mov     [bWasE0], 1
  269.         jmp     event
  270. @@:
  271.         xchg    ah, [bWasE0]
  272.         mov     ebp, [active_screen_data]
  273.         mov     edx, [active_screen_vtable]
  274.         cmp     al, 0x1D
  275.         jz      .ctrl_down
  276.         cmp     al, 0x9D
  277.         jz      .ctrl_up
  278.         cmp     al, 0x2A
  279.         jz      .lshift_down
  280.         cmp     al, 0xAA
  281.         jz      .lshift_up
  282.         cmp     al, 0x36
  283.         jz      .rshift_down
  284.         cmp     al, 0xB6
  285.         jz      .rshift_up
  286.         cmp     al, 0x38
  287.         jz      .alt_down
  288.         cmp     al, 0xB8
  289.         jz      .alt_up
  290.         call    [edx+screen_vtable.OnKey]
  291.         jmp     event
  292. .ctrl_down:
  293.         test    ah, ah
  294.         jnz     .rctrl_down
  295.         or      [ctrlstate], 4
  296.         jmp     .keybar
  297. .rctrl_down:
  298.         or      [ctrlstate], 8
  299.         jmp     .keybar
  300. .ctrl_up:
  301.         test    ah, ah
  302.         jnz     .rctrl_up
  303.         and     [ctrlstate], not 4
  304.         jmp     .keybar
  305. .rctrl_up:
  306.         and     [ctrlstate], not 8
  307. .keybar:
  308.         call    draw_keybar
  309.         call    draw_image
  310. @@:     jmp     event
  311. .lshift_down:
  312. ; ignore E0 2A sequence
  313. ; e.g. arrow keys with NumLock on generate sequence E0 2A E0 xx / E0 xx+80 E0 AA
  314. ; where xx is scancode, so we can safely ignore E0 2A
  315.         test    ah, ah
  316.         jnz     @b
  317.         or      [ctrlstate], 1
  318.         jmp     .keybar
  319. .lshift_up:
  320. ; ignore E0 AA sequence
  321.         test    ah, ah
  322.         jnz     @b
  323.         and     [ctrlstate], not 1
  324.         jmp     .keybar
  325. .rshift_down:
  326.         or      [ctrlstate], 2
  327.         jmp     .keybar
  328. .rshift_up:
  329.         and     [ctrlstate], not 2
  330.         jmp     .keybar
  331. .alt_down:
  332.         test    ah, ah
  333.         jnz     .ralt_down
  334.         or      [ctrlstate], 0x10
  335.         jmp     .keybar
  336. .ralt_down:
  337.         or      [ctrlstate], 0x20
  338.         jmp     .keybar
  339. .alt_up:
  340.         test    ah, ah
  341.         jnz     .ralt_up
  342.         and     [ctrlstate], not 0x10
  343.         jmp     .keybar
  344. .ralt_up:
  345.         and     [ctrlstate], not 0x20
  346.         jmp     .keybar
  347.  
  348. process_ctrl_keys:
  349.         cmp     byte [esi], 0
  350.         jz      .done
  351.         push    ecx
  352.         cmp     al, [esi]
  353.         jz      .check
  354. .cont:
  355.         pop     ecx
  356.         add     esi, 8
  357.         jmp     process_ctrl_keys
  358. .done:
  359.         stc
  360.         ret
  361. .check:
  362.         mov     cl, 0
  363.         call    .check_ctrlkey
  364.         jc      .cont
  365.         mov     cl, 2
  366.         call    .check_ctrlkey
  367.         jc      .cont
  368.         mov     cl, 4
  369.         call    .check_ctrlkey
  370.         jc      .cont
  371.         pop     ecx
  372.         call    dword [esi+4]
  373.         clc
  374.         ret
  375. .check_ctrlkey:
  376.         push    eax edx
  377.         movzx   edx, [ctrlstate]
  378.         shr     edx, cl
  379.         add     cl, cl
  380.         movzx   eax, word [esi+2]
  381.         shr     eax, cl
  382.         and     eax, 15
  383.         cmp     al, ctrlkey_tests_num
  384.         jae     .fail
  385.         xchg    eax, edx
  386.         and     al, 3
  387.         call    [ctrlkey_tests + edx*4]
  388.         cmp     al, 1
  389.         pop     edx eax
  390.         ret
  391. .fail:
  392.         stc
  393.         pop     edx eax
  394.         ret
  395.  
  396. ctrlkey_test0:
  397.         test    al, al
  398.         setz    al
  399.         ret
  400. ctrlkey_test1:
  401.         test    al, al
  402.         setnp   al
  403.         ret
  404. ctrlkey_test2:
  405.         cmp     al, 3
  406.         setz    al
  407.         ret
  408. ctrlkey_test3:
  409.         cmp     al, 1
  410.         setz    al
  411.         ret
  412. ctrlkey_test4:
  413.         cmp     al, 2
  414.         setz    al
  415.         ret
  416.  
  417. new_screen:
  418.         call    xmalloc
  419.         test    eax, eax
  420.         jnz     @f
  421.         ret
  422. @@:
  423.         mov     ebp, eax
  424.         mov     ebx, [num_screens]
  425.         inc     ebx
  426.         shl     ebx, 3
  427.         mov     eax, [screens]
  428.         call    xrealloc
  429.         test    eax, eax
  430.         jnz     @f
  431.         mov     eax, ebp
  432.         call    mf_free
  433.         xor     eax, eax
  434.         ret
  435. @@:
  436.         mov     [screens], eax
  437.         inc     [num_screens]
  438.         mov     [eax+ebx-8], edx
  439.         mov     [eax+ebx-4], ebp
  440.         mov     eax, [num_screens]
  441.         dec     eax
  442.         mov     [active_screen], eax
  443.         mov     [active_screen_vtable], edx
  444.         mov     [active_screen_data], ebp
  445.         jmp     draw_keybar
  446.  
  447. next_screen:
  448.         mov     eax, [active_screen]
  449.         inc     eax
  450.         cmp     eax, [num_screens]
  451.         jnz     @f
  452.         xor     eax, eax
  453. @@:     mov     [active_screen], eax
  454.         jmp     change_screen
  455.  
  456. delete_active_screen:
  457.         mov     edi, [screens]
  458.         mov     eax, [active_screen]
  459.         shl     eax, 3
  460.         add     edi, eax
  461.         push    dword [edi+4]
  462.         lea     esi, [edi+8]
  463.         mov     ecx, [num_screens]
  464.         sub     ecx, [active_screen]
  465.         dec     ecx
  466.         add     ecx, ecx
  467.         rep     movsd
  468.         dec     [num_screens]
  469.         mov     ebx, [num_screens]
  470.         shl     ebx, 3
  471.         mov     eax, [screens]
  472.         call    mf_realloc      ; must succeed, because we decrease size
  473.         pop     eax
  474.         call    mf_free
  475.         and     [active_screen], 0
  476.  
  477. change_screen:
  478.         pusha
  479.         mov     eax, [active_screen]
  480.         mov     esi, [screens]
  481.         mov     ebp, [esi+eax*8+4]
  482.         mov     eax, [esi+eax*8]
  483.         mov     [active_screen_vtable], eax
  484.         mov     [active_screen_data], ebp
  485.         call    draw_keybar
  486.         call    [eax+screen_vtable.OnRedraw]
  487.         popa
  488.         ret
  489.  
  490. F12:
  491.         mov     eax, [cur_width]
  492.         add     eax, 8
  493.         mov     esi, eax
  494.         mul     [num_screens]
  495.         call    xmalloc
  496.         test    eax, eax
  497.         jnz     @f
  498.         ret
  499. @@:
  500.         mov     ebx, eax
  501.         mov     edi, eax
  502.         xor     ecx, ecx
  503. .next:
  504.         xor     eax, eax
  505.         stosd
  506.         inc     ecx
  507.         cmp     ecx, [num_screens]
  508.         jz      @f
  509.         lea     eax, [edi+esi-4]
  510.         mov     dword [edi-4], eax
  511. @@:
  512.         xor     eax, eax
  513.         stosd
  514.         dec     ecx
  515.         jz      @f
  516.         lea     eax, [edi-8]
  517.         sub     eax, esi
  518.         mov     dword [edi-4], eax
  519. @@:
  520.         mov     al, '&'
  521.         stosb
  522.         cmp     ecx, 36
  523.         jae     .noletter
  524.         lea     eax, [ecx+'0']
  525.         cmp     al, '9'
  526.         jbe     @f
  527.         add     al, 7
  528. @@:
  529.         stosb
  530.         mov     al, '.'
  531.         stosb
  532.         jmp     .letter_done
  533. .noletter:
  534.         mov     al, ' '
  535.         stosb
  536.         stosb
  537. .letter_done:
  538.         mov     al, ' '
  539.         stosb
  540.         pushad
  541.         mov     eax, [screens]
  542.         mov     ebp, [eax+ecx*8+4]
  543.         mov     eax, [eax+ecx*8]
  544.         mov     ecx, [cur_width]
  545.         sub     ecx, 12
  546.         call    [eax + screen_vtable.getname]
  547.         popad
  548.         sub     edi, 4
  549.         add     edi, [cur_width]
  550.         inc     ecx
  551.         cmp     ecx, [num_screens]
  552.         jb      .next
  553.         mov     eax, [active_screen]
  554.         mul     esi
  555.         add     eax, ebx
  556.         push    1
  557.         push    aScreens
  558.         push    eax
  559.         call    menu
  560.         cmp     eax, -1
  561.         jz      @f
  562.         sub     eax, ebx
  563.         div     esi
  564.         mov     [active_screen], eax
  565. @@:
  566.         mov     eax, ebx
  567.         call    mf_free
  568.         jmp     change_screen
  569.  
  570. panels_OnKey:
  571.         mov     ebp, [active_panel]
  572.         mov     ecx, [ebp + panel1_index - panel1_data]
  573.         mov     edx, [ebp + panel1_start - panel1_data]
  574.         mov     ebx, [ebp + panel1_colst - panel1_data]
  575.         add     ebx, edx
  576.         mov     esi, panels_ctrlkeys
  577.         jmp     process_ctrl_keys
  578. .ret:
  579.         ret
  580. .up:
  581.         jecxz   .ret
  582.         dec     ecx
  583.         mov     [ebp + panel1_index - panel1_data], ecx
  584.         cmp     ecx, edx
  585.         jae     .done_redraw
  586.         mov     [ebp + panel1_start - panel1_data], ecx
  587. .done_redraw:
  588. ;        call    draw_panel
  589. ;        ret
  590.         jmp     draw_panel
  591. .down:
  592.         inc     ecx
  593.         cmp     ecx, [ebp + panel1_numfiles - panel1_data]
  594.         jae     .ret
  595.         mov     [ebp + panel1_index - panel1_data], ecx
  596.         cmp     ecx, ebx
  597.         jb      .done_redraw
  598.         sub     ecx, [ebp + panel1_colst - panel1_data]
  599.         inc     ecx
  600.         mov     [ebp + panel1_start - panel1_data], ecx
  601.         jmp     .done_redraw
  602. .left:
  603.         jecxz   .ret
  604.         sub     ecx, [ebp + panel1_colsz - panel1_data]
  605.         jae     @f
  606.         xor     ecx, ecx
  607. @@:
  608.         mov     [ebp + panel1_index - panel1_data], ecx
  609.         cmp     ecx, edx
  610.         jae     .done_redraw
  611.         sub     edx, [ebp + panel1_colsz - panel1_data]
  612.         jae     @f
  613.         xor     edx, edx
  614. @@:
  615.         mov     [ebp + panel1_start - panel1_data], edx
  616.         jmp     .done_redraw
  617. .right:
  618.         add     ecx, [ebp + panel1_colsz - panel1_data]
  619.         cmp     ecx, [ebp + panel1_numfiles - panel1_data]
  620.         jb      @f
  621.         mov     ecx, [ebp + panel1_numfiles - panel1_data]
  622.         dec     ecx
  623. @@:
  624.         mov     [ebp + panel1_index - panel1_data], ecx
  625.         cmp     ecx, ebx
  626.         jb      .done_redraw
  627.         add     ebx, [ebp + panel1_colsz - panel1_data]
  628.         cmp     ebx, [ebp + panel1_numfiles - panel1_data]
  629.         jbe     @f
  630.         mov     ebx, [ebp + panel1_numfiles - panel1_data]
  631. @@:
  632.         sub     ebx, [ebp + panel1_colst - panel1_data]
  633.         jae     @f
  634.         xor     ebx, ebx
  635. @@:
  636.         mov     [ebp + panel1_start - panel1_data], ebx
  637.         jmp     .done_redraw
  638. .tab:
  639.         xor     [active_panel], panel1_data xor panel2_data
  640.         call    draw_cmdbar
  641.         call    draw_panel
  642.         mov     ebp, [active_panel]
  643.         jmp     .done_redraw
  644. .home:
  645.         and     [ebp + panel1_start - panel1_data], 0
  646.         and     [ebp + panel1_index - panel1_data], 0
  647.         jmp     .done_redraw
  648. .end:
  649.         mov     eax, [ebp + panel1_numfiles - panel1_data]
  650.         dec     eax
  651.         mov     [ebp + panel1_index - panel1_data], eax
  652.         inc     eax
  653.         sub     eax, [ebp + panel1_colst - panel1_data]
  654.         jae     @f
  655.         xor     eax, eax
  656. @@:
  657.         mov     [ebp + panel1_start - panel1_data], eax
  658.         jmp     .done_redraw
  659. .enter:
  660.         call    get_curfile_folder_entry
  661.         test    byte [ecx], 10h
  662.         jnz     .enter_folder
  663.         call    find_extension
  664.         jc      .run_app
  665.         jnz     .run_app
  666. .run_association:
  667.         mov     eax, [edi+4]
  668. .run_association2:
  669.         mov     [execparams], execdata
  670.         mov     [execptr], eax
  671.         jmp     .dorun
  672. .run_app:
  673.         mov     [execptr], execdata
  674.         and     [execparams], 0
  675. .dorun:
  676.         lea     esi, [ebp + panel1_dir - panel1_data]
  677.         mov     edi, execdata
  678. ; TODO: add overflow check
  679. @@:
  680.         lodsb
  681.         test    al, al
  682.         jz      @f
  683.         stosb
  684.         jmp     @b
  685. @@:
  686.         lea     esi, [ecx+40]
  687.         mov     al, '/'
  688.         stosb
  689. @@:
  690.         lodsb
  691.         stosb
  692.         test    al, al
  693.         jnz     @b
  694. ; for fasm call - special handling, because
  695. ; 1) fasm command line convention is different : fasm infile,outfile[,path] rather than tinypad infile
  696. ; 2) fasm will probably create new file in directory, so we want to reload panel data
  697.         xor     edx, edx
  698.         cmp     [execparams], edx
  699.         jz      .nofasm
  700.         cmp     [execptr], fasm
  701.         jnz     .nofasm
  702. ; TODO: add buffer/cmdline overflow check
  703.         mov     esi, execdata
  704. @@:
  705.         lodsb
  706.         stosb
  707.         test    al, al
  708.         jnz     @b
  709.         mov     byte [esi-1], ','
  710.         inc     edx
  711. ; output file: no extension if input file has extension, '.bin' otherwise
  712.         push    edi
  713. @@:
  714.         dec     edi
  715.         cmp     byte [edi], '.'
  716.         jz      .ptfound
  717.         cmp     byte [edi], '/'
  718.         jnz     @b
  719.         pop     edi
  720.         mov     dword [edi-1], '.bin'
  721.         mov     byte [edi+3], 0
  722.         jmp     .nofasm
  723. .ptfound:
  724.         mov     byte [edi], 0
  725.         pop     edi
  726. .nofasm:
  727.         push    70
  728.         pop     eax
  729.         mov     ebx, execinfo
  730.         int     40h
  731.         test    edx, edx
  732.         jz      @f
  733.         push    5
  734.         pop     eax
  735.         push    20
  736.         pop     ebx
  737.         int     0x40
  738.         jmp     .ctrl_r
  739. @@:
  740.         ret
  741. .enter_folder:
  742.         lea     esi, [ecx+40]
  743.         cmp     word [esi], '..'
  744.         jnz     @f
  745.         cmp     byte [esi+2], 0
  746.         jz      .dotdot
  747. @@:
  748.         push    esi
  749.         lea     esi, [ebp + panel1_dir - panel1_data]
  750.         mov     edi, prev_dir
  751. @@:
  752.         lodsb
  753.         stosb
  754.         test    al, al
  755.         jnz     @b
  756.         lea     edi, [esi-1]
  757.         pop     esi
  758.         mov     al, '/'
  759.         cmp     [edi-1], al
  760.         jz      @f
  761.         stosb
  762. @@:
  763. ; TODO: add buffer overflow check
  764. @@:
  765.         lodsb
  766.         stosb
  767.         test    al, al
  768.         jnz     @b
  769. .reread:
  770.         call    read_folder
  771. .done_cmdbar:
  772.         call    draw_cmdbar
  773.         jmp     .done_redraw
  774. .dotdot:
  775.         lea     edi, [ebp + panel1_dir - panel1_data]
  776.         mov     al, 0
  777.         or      ecx, -1
  778.         repnz   scasb
  779.         dec     edi
  780.         mov     al, '/'
  781.         std
  782.         repnz   scasb
  783.         cld
  784.         inc     edi
  785.         mov     byte [edi], 0
  786.         inc     edi
  787.         push    edi
  788.         call    read_folder
  789.         pop     edi
  790.         mov     edx, [ebp + panel1_files - panel1_data]
  791.         mov     ecx, [ebp + panel1_numfiles - panel1_data]
  792. .scanloop:
  793.         mov     esi, [edx]
  794.         mov     eax, [ebp + panel1_nfa - panel1_data]
  795.         lea     esi, [esi+eax*4+32+40]
  796.         add     esi, [ebp + panel1_files - panel1_data]
  797.         push    esi edi
  798. @@:
  799.         lodsb
  800.         call    match_symbol
  801.         jnz     @f
  802.         inc     edi
  803.         test    al, al
  804.         jnz     @b
  805. @@:
  806.         pop     edi esi
  807.         jz      .scanfound
  808.         add     edx, 4
  809.         loop    .scanloop
  810.         jmp     .scandone
  811. .scanfound:
  812.         sub     edx, [ebp + panel1_files - panel1_data]
  813.         shr     edx, 2
  814.         mov     [ebp + panel1_index - panel1_data], edx
  815.         sub     edx, [ebp + panel1_colst - panel1_data]
  816.         jb      .scandone
  817.         inc     edx
  818.         mov     [ebp + panel1_start - panel1_data], edx
  819. .scandone:
  820.         jmp     .done_cmdbar
  821. .ctrl_f39:
  822.         sub     al, 0x3D
  823.         add     al, al
  824.         mov     ah, [ebp + panel1_sortmode - panel1_data]
  825.         and     ah, 0xFE
  826.         cmp     al, ah
  827.         jnz     @f
  828.         and     [ebp + panel1_sortmode - panel1_data], 1
  829.         or      al, [ebp + panel1_sortmode - panel1_data]
  830.         xor     al, 1
  831. @@:
  832.         mov     [ebp + panel1_sortmode - panel1_data], al
  833.         mov     eax, [ebp + panel1_index - panel1_data]
  834.         mov     ecx, [ebp + panel1_files - panel1_data]
  835.         push    dword [ecx+eax*4]
  836.         push    ecx
  837.         call    sort_files
  838.         pop     edi
  839.         pop     eax
  840.         or      ecx, -1
  841.         repnz   scasd
  842.         not     ecx
  843.         dec     ecx
  844.         mov     [ebp + panel1_index - panel1_data], ecx
  845.         sub     ecx, [ebp + panel1_start - panel1_data]
  846.         jb      .less_start
  847.         sub     ecx, [ebp + panel1_colst - panel1_data]
  848.         jae     .gr_end
  849. @@:     jmp     .done_redraw
  850. .less_start:
  851.         add     [ebp + panel1_start - panel1_data], ecx
  852.         jmp     @b
  853. .gr_end:
  854.         inc     ecx
  855.         add     [ebp + panel1_start - panel1_data], ecx
  856.         jmp     @b
  857. .alt_f12:
  858.         mov     ebp, panel1_data
  859.         cmp     al, 0x3B
  860.         jz      @f
  861.         mov     ebp, panel2_data
  862. @@:
  863. ; get drives list
  864.         mov     ebx, dirinfo
  865.         mov     [ebx+dirinfo.size-dirinfo], 1
  866.         mov     [ebx+dirinfo.dirdata-dirinfo], driveinfo
  867.         mov     [ebx+dirinfo.name-dirinfo], tmpname
  868.         mov     byte [tmpname], '/'
  869.         xor     ecx, ecx
  870. .drive_loop_e:
  871.         mov     byte [tmpname+1], 0
  872.         push    70
  873.         pop     eax
  874.         int     40h
  875.         mov     ebx, dirinfo
  876.         test    eax, eax
  877.         jnz     .drive_loop_e_done
  878.         mov     esi, driveinfo+32+40
  879.         mov     edi, tmpname+1
  880. @@:
  881.         lodsb
  882.         stosb
  883.         test    al, al
  884.         jnz     @b
  885.         push    [ebx+dirinfo.first-dirinfo]
  886.         and     [ebx+dirinfo.first-dirinfo], 0
  887. .drive_loop_i:
  888.         push    70
  889.         pop     eax
  890.         int     40h
  891.         mov     ebx, dirinfo
  892.         test    eax, eax
  893.         jnz     .drive_loop_i_done
  894.         mov     eax, 32+8
  895.         call    xmalloc
  896.         test    eax, eax
  897.         jz      .drive_loop_i_done
  898.         jecxz   @f
  899.         mov     [ecx], eax
  900. @@:
  901.         and     dword [eax], 0
  902.         mov     [eax+4], ecx
  903.         mov     ecx, eax
  904.         lea     edi, [eax+8]
  905.         mov     esi, tmpname
  906. @@:
  907.         lodsb
  908.         test    al, al
  909.         jz      @f
  910.         stosb
  911.         jmp     @b
  912. @@:
  913.         mov     esi, driveinfo+32+40
  914.         mov     al, '/'
  915.         stosb
  916. @@:
  917.         lodsb
  918.         stosb
  919.         test    al, al
  920.         jnz     @b
  921.         inc     [ebx+dirinfo.first-dirinfo]
  922.         jmp     .drive_loop_i
  923. .drive_loop_i_done:
  924.         pop     [ebx+dirinfo.first-dirinfo]
  925.         inc     [ebx+dirinfo.first-dirinfo]
  926.         jmp     .drive_loop_e
  927. .drive_loop_e_done:
  928.         and     [ebx+dirinfo.first-dirinfo], 0
  929.         lea     edi, [ebp + panel1_dir - panel1_data]
  930. .find_cur_drive_loop:
  931.         push    edi
  932.         lea     esi, [ecx+8]
  933. @@:
  934.         lodsb
  935.         test    al, al
  936.         jz      .cur_drive_found
  937.         call    match_symbol
  938.         jnz     @f
  939.         inc     edi
  940.         jmp     @b
  941. @@:
  942.         cmp     dword [ecx+4], 0
  943.         jz      @f
  944.         pop     edi
  945.         mov     ecx, [ecx+4]
  946.         jmp     .find_cur_drive_loop
  947. @@:
  948. .cur_drive_found:
  949.         pop     edi
  950.         push    1
  951.         push    aDrive
  952.         push    ecx
  953.         mov     eax, [ebp + panel1_height - panel1_data]
  954.         sub     eax, 2
  955.         jae     @f
  956.         add     eax, 2
  957. @@:
  958.         push    eax
  959.         push    [ebp + panel1_width - panel1_data]
  960.         push    [ebp + panel1_top - panel1_data]
  961.         push    [ebp + panel1_left - panel1_data]
  962.         call    menu_centered_in
  963.         cmp     eax, -1
  964.         jz      .ret2
  965.         lea     esi, [eax+8]
  966.         lea     edi, [ebp + panel1_dir - panel1_data]
  967.         push    ecx esi edi
  968.         mov     esi, edi
  969.         mov     edi, prev_dir
  970.         mov     ecx, 1024/4
  971.         rep     movsd
  972.         pop     edi esi ecx
  973. @@:
  974.         lodsb
  975.         stosb
  976.         test    al, al
  977.         jnz     @b
  978. @@:
  979.         cmp     dword [ecx+4], 0
  980.         jz      @f
  981.         mov     ecx, [ecx+4]
  982.         jmp     @b
  983. @@:
  984.         mov     eax, ecx
  985.         mov     ecx, [ecx]
  986.         call    mf_free
  987.         test    ecx, ecx
  988.         jnz     @b
  989.         call    read_folder
  990.         jmp     .done_redraw
  991. .shift_f5:
  992.         call    get_curfile_folder_entry
  993.         lea     esi, [ecx+40]
  994.         mov     edi, CopyDestEditBuf
  995.         mov     eax, CopyDestEditBuf.length
  996.         stosd
  997.         scasd
  998.         xor     eax, eax
  999.         stosd
  1000.         mov     edx, edi
  1001. @@:
  1002.         lodsb
  1003.         test    al, al
  1004.         jz      .f5_common
  1005.         stosb
  1006.         jmp     @b
  1007. .f5:
  1008.         mov     edi, CopyDestEditBuf
  1009.         mov     eax, CopyDestEditBuf.length
  1010.         stosd
  1011.         scasd
  1012.         xor     eax, eax
  1013.         stosd
  1014.         mov     edx, edi
  1015.         mov     esi, ebp
  1016.         xor     esi, panel1_data xor panel2_data
  1017.         add     esi, panel1_dir - panel1_data
  1018. @@:
  1019.         lodsb
  1020.         test    al, al
  1021.         jz      @f
  1022.         stosb
  1023.         jmp     @b
  1024. @@:
  1025.         mov     al, '/'
  1026.         stosb
  1027. .f5_common:
  1028.         mov     byte [edi], 0
  1029.         sub     edi, edx
  1030.         mov     [edx-8], edi
  1031.         mov     edi, CopySourceTextBuf
  1032.         mov     esi, aCopy1
  1033. @@:
  1034.         lodsb
  1035.         test    al, al
  1036.         jz      @f
  1037.         stosb
  1038.         jmp     @b
  1039. @@:
  1040.         call    get_curfile_folder_entry
  1041.         lea     esi, [ecx+40]
  1042.         lea     eax, [esi+1]
  1043. @@:
  1044.         inc     esi
  1045.         cmp     byte [esi-1], 0
  1046.         jnz     @b
  1047.         sub     esi, eax
  1048.         xchg    eax, esi
  1049.         dec     esi
  1050.         mov     edx, [cur_width]
  1051.         sub     edx, 50
  1052.         sub     eax, edx
  1053.         jbe     @f
  1054.         add     esi, eax
  1055.         mov     al, '.'
  1056.         stosb
  1057.         stosb
  1058.         stosb
  1059. @@:
  1060.         lodsb
  1061.         test    al, al
  1062.         jz      @f
  1063.         stosb
  1064.         jmp     @b
  1065. @@:
  1066.         mov     esi, aCopy2
  1067. @@:
  1068.         lodsb
  1069.         stosb
  1070.         test    al, al
  1071.         jnz     @b
  1072.         mov     ebx, copy_dlgdata
  1073.         mov     eax, [cur_width]
  1074.         sub     eax, 12
  1075.         mov     [ebx + dlgtemplate.width], eax
  1076.         dec     eax
  1077.         dec     eax
  1078.         mov     [ebx - copy_dlgdata + copy_dlgdata.width2], eax
  1079.         mov     [ebx - copy_dlgdata + copy_dlgdata.width3], eax
  1080.         shr     eax, 1
  1081.         dec     eax
  1082.         dec     eax
  1083.         mov     [ebx - copy_dlgdata + copy_dlgdata.copy_x2], eax
  1084.         sub     eax, aCopyLength-1
  1085.         mov     [ebx - copy_dlgdata + copy_dlgdata.copy_x1], eax
  1086.         add     eax, aCopyLength+3
  1087.         mov     [ebx - copy_dlgdata + copy_dlgdata.cnl_x1], eax
  1088.         add     eax, aCancelBLength - 1
  1089.         mov     [ebx - copy_dlgdata + copy_dlgdata.cnl_x2], eax
  1090.         mov     byte [ebx - copy_dlgdata + copy_dlgdata.flags0], 0xC
  1091.         and     byte [ebx - copy_dlgdata + copy_dlgdata.flags1], not 4
  1092.         and     byte [ebx - copy_dlgdata + copy_dlgdata.flags2], not 4
  1093.         push    ebx
  1094.         call    DialogBox
  1095.         cmp     eax, copy_dlgdata.copy_btn
  1096.         jnz     .ret2
  1097. ; Š®¯¨à㥬
  1098.         mov     esi, CopyDestEditBuf+12
  1099.         mov     edi, esi
  1100.         xor     eax, eax
  1101.         or      ecx, -1
  1102.         repnz   scasb
  1103.         dec     edi
  1104.         dec     edi
  1105.         cmp     edi, esi
  1106.         jb      .ret2
  1107.         cmp     byte [edi], '/'
  1108.         jnz     @f
  1109. ;  «¨ç¨¥/®âáãâá⢨¥ § ª ­ç¨¢ î饣® á«íè  ¢ ¦­® ⮫쪮 ¤«ï ª®¯¨à®¢ ­¨ï ¯ ¯®ª
  1110.         cmp     edi, esi
  1111.         jz      @f
  1112.         mov     byte [edi], 0
  1113.         dec     edi
  1114. @@:
  1115. ; …᫨ ¯ãâì ­¥ ­ ç¨­ ¥âáï á® á«íè , áç¨â ¥¬ ¥£® ®â­®á¨â¥«ì­® ⥪ã饩 ¯ ¯ª¨
  1116.         cmp     byte [esi], '/'
  1117.         jz      .copy_absolute_path
  1118.         push    esi
  1119.         push    edi
  1120.         lea     edi, [ebp + panel1_dir - panel1_data]
  1121.         or      ecx, -1
  1122.         xor     eax, eax
  1123.         repnz   scasb
  1124.         not     ecx
  1125.         pop     edi
  1126.         lea     edx, [edi+2]
  1127.         sub     edx, esi
  1128.         lea     edi, [edi+ecx+1]
  1129.         xchg    ecx, edx
  1130.         std
  1131.         lea     esi, [esi+ecx-1]
  1132.         rep     movsb
  1133.         cld
  1134.         pop     edi
  1135.         lea     esi, [ebp + panel1_dir - panel1_data]
  1136.         push    edi
  1137.         mov     ecx, edx
  1138.         rep     movsb
  1139.         mov     byte [edi-1], '/'
  1140.         pop     esi
  1141. .copy_absolute_path:
  1142. ; ®«ãç ¥¬  âਡãâë ­ §­ ç¥­¨ï
  1143.         mov     cl, 0x10
  1144.         xor     eax, eax
  1145.         mov     edi, esi
  1146. .countslashloop:
  1147.         cmp     byte [edi], '/'
  1148.         jnz     @f
  1149.         inc     eax
  1150. @@:
  1151.         inc     edi
  1152.         cmp     byte [edi], 0
  1153.         jnz     .countslashloop
  1154.         cmp     eax, 2
  1155.         jbe     @f
  1156.         mov     ebx, attrinfo
  1157.         mov     [attrinfo.attr], 0
  1158.         mov     [ebx + attrinfo.name - attrinfo], esi
  1159.         push    70
  1160.         pop     eax
  1161.         int     0x40
  1162.         mov     cl, byte [attrinfo.attr]
  1163. @@:
  1164.         test    cl, 0x10
  1165.         jz      .copyfile
  1166. ;  ¬ ¯®¤áã­ã«¨ ª â «®£ ­ §­ ç¥­¨ï, ¤®¯¨á뢠¥¬ ¨¬ï ä ©« 
  1167.         mov     al, '/'
  1168.         stosb
  1169.         push    esi
  1170.         call    get_curfile_folder_entry
  1171.         lea     esi, [ecx+40]
  1172. @@:
  1173.         lodsb
  1174.         stosb
  1175.         test    al, al
  1176.         jnz     @b
  1177.         pop     esi
  1178. .copyfile:
  1179. ; ˆ¬ï ¨á室­®£® ä ©« 
  1180.         push    esi
  1181.         lea     esi, [ebp+panel1_dir-panel1_data]
  1182.         mov     edi, saved_file_name
  1183.         push    edi
  1184. @@:
  1185.         lodsb
  1186.         test    al, al
  1187.         jz      @f
  1188.         stosb
  1189.         jmp     @b
  1190. @@:
  1191.         mov     al, '/'
  1192.         stosb
  1193.         call    get_curfile_folder_entry
  1194.         lea     esi, [ecx+40]
  1195. @@:
  1196.         lodsb
  1197.         stosb
  1198.         test    al, al
  1199.         jnz     @b
  1200.         pop     esi
  1201.         pop     edi
  1202. ; ¥«ì§ï ᪮¯¨à®¢ âì ä ©« ¯®¢¥àå á ¬®£® ᥡï!
  1203.         push    esi edi
  1204.         call    strcmpi
  1205.         pop     edi esi
  1206.         jz      .ret2
  1207. ; ‘®¡á⢥­­®, ª®¯¨à㥬
  1208. ; esi->source name, edi->destination name
  1209.         mov     [writeinfo.code], 2
  1210.         mov     [writeinfo.name], edi
  1211.         and     dword [writeinfo.first], 0
  1212.         and     dword [writeinfo.first+4], 0
  1213.         mov     [writeinfo.data], copy_buffer
  1214.         mov     ebx, readinfo
  1215.         and     dword [ebx+readinfo.first-readinfo], 0
  1216.         and     dword [ebx+readinfo.first+4-readinfo], 0
  1217.         mov     [ebx+readinfo.size-readinfo], copy_buffer_size
  1218.         mov     [ebx+readinfo.data-readinfo], copy_buffer
  1219.         mov     [ebx+readinfo.name-readinfo], esi
  1220. .copyloop:
  1221.         mov     ebx, readinfo
  1222.         push    70
  1223.         pop     eax
  1224.         int     0x40
  1225.         cmp     ebx, -1
  1226.         jz      .copydone
  1227.         test    ebx, ebx
  1228.         jz      .copydone
  1229.         add     dword [readinfo.first], ebx
  1230.         adc     dword [readinfo.first+4], 0
  1231.         mov     [writeinfo.size], ebx
  1232.         mov     ebx, writeinfo
  1233.         push    70
  1234.         pop     eax
  1235.         int     0x40
  1236.         mov     ecx, [writeinfo.size]
  1237.         add     dword [writeinfo.first], ecx
  1238.         adc     dword [writeinfo.first+4], 0
  1239.         mov     [writeinfo.code], 3
  1240.         cmp     ecx, copy_buffer_size
  1241.         jz      .copyloop
  1242. .copydone:
  1243.         push    ebp
  1244.         call    .ctrl_r
  1245.         pop     ebp
  1246.         xor     ebp, panel1_data xor panel2_data
  1247.         jmp     .ctrl_r
  1248.  
  1249. .f3:
  1250.         call    view_file
  1251. .ret2:
  1252.         ret
  1253. .f8:
  1254.         call    get_curfile_folder_entry
  1255.         cmp     [bConfirmDelete], 0
  1256.         jz      .f8_allowed
  1257.         mov     ebx, f8_confirm_dlgdata
  1258.         mov     esi, aConfirmDeleteText
  1259.         mov     edi, aConfirmDeleteTextBuf
  1260. @@:
  1261.         lodsb
  1262.         stosb
  1263.         test    al, al
  1264.         jnz     @b
  1265.         dec     edi
  1266.         mov     esi, aDeleteFolder
  1267.         test    byte [ecx], 10h
  1268.         jnz     @f
  1269.         mov     esi, aDeleteFile
  1270. @@:
  1271.         lodsb
  1272.         stosb
  1273.         test    al, al
  1274.         jnz     @b
  1275.         lea     esi, [ecx+40]
  1276.         mov     [ebx - f8_confirm_dlgdata + f8_confirm_dlgdata.name], esi
  1277.         or      eax, -1
  1278. @@:
  1279.         inc     eax
  1280.         cmp     byte [eax+esi], 0
  1281.         jnz     @b
  1282.         sub     edi, aConfirmDeleteTextBuf+1
  1283.         cmp     eax, edi
  1284.         jae     @f
  1285.         mov     eax, edi
  1286. @@:
  1287.         inc     eax
  1288.         inc     eax
  1289.         mov     edx, [cur_width]
  1290.         sub     edx, 8
  1291.         cmp     eax, edx
  1292.         jbe     @f
  1293.         mov     eax, edx
  1294. @@:
  1295.         mov     [ebx + dlgtemplate.width], eax
  1296.         dec     eax
  1297.         dec     eax
  1298.         mov     [ebx - f8_confirm_dlgdata + f8_confirm_dlgdata.width2], eax
  1299.         mov     [ebx - f8_confirm_dlgdata + f8_confirm_dlgdata.width3], eax
  1300.         shr     eax, 1
  1301.         mov     [ebx - f8_confirm_dlgdata + f8_confirm_dlgdata.del_x2], eax
  1302.         sub     eax, aDeleteLength-1
  1303.         mov     [ebx - f8_confirm_dlgdata + f8_confirm_dlgdata.del_x1], eax
  1304.         add     eax, aDeleteLength
  1305.         mov     [ebx - f8_confirm_dlgdata + f8_confirm_dlgdata.cnl_x1], eax
  1306.         add     eax, aCancelLength - 1
  1307.         mov     [ebx - f8_confirm_dlgdata + f8_confirm_dlgdata.cnl_x2], eax
  1308.         or      byte [ebx - f8_confirm_dlgdata + f8_confirm_dlgdata.flags1], 4
  1309.         and     byte [ebx - f8_confirm_dlgdata + f8_confirm_dlgdata.flags2], not 4
  1310.         push    ebx
  1311.         call    DialogBox
  1312.         cmp     eax, f8_confirm_dlgdata.del_btn
  1313.         jnz     .ret2
  1314. .f8_allowed:
  1315.         lea     esi, [ebp + panel1_dir - panel1_data]
  1316.         mov     edi, execdata
  1317. @@:
  1318.         lodsb
  1319.         test    al, al
  1320.         jz      @f
  1321.         stosb
  1322.         jmp     @b
  1323. @@:
  1324.         lea     esi, [ecx+40]
  1325.         mov     al, '/'
  1326.         stosb
  1327. @@:
  1328.         lodsb
  1329.         stosb
  1330.         test    al, al
  1331.         jnz     @b
  1332.         push    70
  1333.         pop     eax
  1334.         mov     ebx, delinfo
  1335.         int     0x40
  1336. .ctrl_r:
  1337. ; Rescan panel
  1338. ;       call    read_folder
  1339. ;       jmp     .done_redraw
  1340.         mov     eax, [ebp + panel1_index - panel1_data]
  1341.         push    eax
  1342.         call    get_curfile_name
  1343.         mov     esi, ecx
  1344.         mov     edi, saved_file_name
  1345. @@:
  1346.         lodsb
  1347.         stosb
  1348.         test    al, al
  1349.         jnz     @b
  1350.         push    [ebp + panel1_start - panel1_data]
  1351.         call    read_folder
  1352.         pop     [ebp + panel1_start - panel1_data]
  1353.         pop     [ebp + panel1_index - panel1_data]
  1354.         or      eax, -1
  1355. @@:
  1356.         inc     eax
  1357.         cmp     eax, [ebp + panel1_numfiles - panel1_data]
  1358.         jae     .ctrl_r.notfound
  1359.         mov     esi, [ebp + panel1_nfa - panel1_data]
  1360.         mov     ecx, [ebp + panel1_files - panel1_data]
  1361.         lea     esi, [ecx+esi*4+32+40]
  1362.         add     esi, [ecx+eax*4]
  1363.         mov     edi, saved_file_name
  1364.         call    strcmpi
  1365.         jnz     @b
  1366. .ctrl_r.found:
  1367.         mov     [ebp + panel1_index - panel1_data], eax
  1368. .ctrl_r.notfound:
  1369.         mov     eax, [ebp + panel1_numfiles - panel1_data]
  1370.         dec     eax
  1371.         cmp     [ebp + panel1_index - panel1_data], eax
  1372.         jbe     @f
  1373.         mov     [ebp + panel1_index - panel1_data], eax
  1374. @@:
  1375.         mov     eax, [ebp + panel1_index - panel1_data]
  1376.         cmp     [ebp + panel1_start - panel1_data], eax
  1377.         jbe     @f
  1378.         mov     [ebp + panel1_start - panel1_data], eax
  1379. @@:
  1380.         inc     eax
  1381.         sub     eax, [ebp + panel1_colst - panel1_data]
  1382.         jae     @f
  1383.         xor     eax, eax
  1384. @@:
  1385.         cmp     [ebp + panel1_start - panel1_data], eax
  1386.         jae     @f
  1387.         mov     [ebp + panel1_start - panel1_data], eax
  1388. @@:
  1389.         mov     eax, [ebp + panel1_numfiles - panel1_data]
  1390.         sub     eax, [ebp + panel1_colst - panel1_data]
  1391.         jbe     @f
  1392.         cmp     [ebp + panel1_start - panel1_data], eax
  1393.         jbe     @f
  1394.         mov     [ebp + panel1_start - panel1_data], eax
  1395. @@:
  1396.         jmp     .done_redraw
  1397. .menu:
  1398. ; display context menu
  1399. ; ignore folders
  1400.         call    get_curfile_folder_entry
  1401.         test    byte [ecx], 10h
  1402.         jz      @f
  1403. .menuret:
  1404.         ret
  1405. @@:
  1406.         call    find_extension
  1407.         jc      .menuret
  1408.         jnz     .menuret
  1409. ; known extension
  1410.         mov     ebx, [edi+8]
  1411.         test    ebx, ebx
  1412.         jz      .menuret
  1413.         mov     ecx, esi
  1414. @@:
  1415.         inc     ecx
  1416.         cmp     byte [ecx-1], 0
  1417.         jnz     @b
  1418.         sub     ecx, esi        ; ecx = ¤«¨­  ¨¬¥­¨ ä ©« +1 = ¤«¨­  § £®«®¢ª +1
  1419.         cmp     ecx, 15
  1420.         jb      @f
  1421.         mov     cl, 15
  1422. @@:
  1423.         xor     edx, edx
  1424. .menucreateloop:
  1425.         mov     eax, [ebx]
  1426.         test    eax, eax
  1427.         jz      .menucreated
  1428. @@:
  1429.         inc     eax
  1430.         cmp     byte [eax-1], 0
  1431.         jnz     @b
  1432.         sub     eax, [ebx]
  1433.         cmp     eax, ecx
  1434.         ja      @f
  1435.         mov     eax, ecx
  1436. @@:
  1437.         add     eax, 12
  1438.         call    xmalloc
  1439.         test    eax, eax
  1440.         jz      .menucreated
  1441.         add     eax, 4
  1442.         test    edx, edx
  1443.         jz      @f
  1444.         mov     [edx], eax
  1445. @@:
  1446.         mov     [eax+4], edx
  1447.         mov     edx, eax
  1448.         push    esi
  1449.         mov     esi, [ebx+4]
  1450.         mov     [eax-4], esi
  1451.         mov     esi, [ebx]
  1452.         lea     edi, [eax+8]
  1453. @@:
  1454.         lodsb
  1455.         stosb
  1456.         test    al, al
  1457.         jnz     @b
  1458.         sub     esi, [ebx]
  1459.         sub     esi, ecx
  1460.         jae     .menunoadd
  1461.         neg     esi
  1462. @@:
  1463.         mov     byte [edi-1], ' '
  1464.         stosb
  1465.         dec     esi
  1466.         jnz     @b
  1467. .menunoadd:
  1468.         pop     esi
  1469.         add     ebx, 8
  1470.         jmp     .menucreateloop
  1471. .menucreated:
  1472.         test    edx, edx
  1473.         jz      .menuret
  1474.         and     dword [edx], 0
  1475. @@:
  1476.         cmp     dword [edx+4], 0
  1477.         jz      @f
  1478.         mov     edx, [edx+4]
  1479.         jmp     @b
  1480. @@:
  1481.         push    1
  1482.         push    esi
  1483.         push    edx
  1484.         call    menu
  1485.         cmp     eax, -1
  1486.         jz      .menuret
  1487.         push    dword [eax-4]
  1488. @@:
  1489.         test    edx, edx
  1490.         jz      @f
  1491.         lea     eax, [edx-4]
  1492.         mov     edx, [edx]
  1493.         call    mf_free
  1494.         jmp     @b
  1495. @@:
  1496.         pop     eax
  1497.         call    get_curfile_folder_entry
  1498.         jmp     .run_association2
  1499.  
  1500. panels_OnRedraw:
  1501.         call    draw_cmdbar
  1502.         mov     ebp, panel1_data
  1503.         call    draw_panel
  1504.         mov     ebp, panel2_data
  1505.         call    draw_panel
  1506.         ret
  1507.  
  1508. init_console:
  1509.         mov     eax, [console_data_ptr]
  1510.         call    mf_free
  1511.         mov     eax, [cur_width]
  1512.         mul     [cur_height]
  1513.         mov     ecx, eax
  1514.         add     eax, eax
  1515.         add     eax, eax
  1516.         call    mf_alloc
  1517.         test    eax, eax
  1518.         jz      exit
  1519.         mov     [console_data_ptr], eax
  1520.         mov     edi, eax
  1521.         mov     ax, 0720h
  1522.         rep     stosw
  1523.         mov     [panel1_left], ecx
  1524.         mov     [panel1_top], ecx
  1525.         mov     [panel2_top], ecx
  1526.         mov     eax, [cur_width]
  1527.         inc     eax
  1528.         shr     eax, 1
  1529.         mov     [panel1_width], eax
  1530.         mov     [panel2_left], eax
  1531.         sub     eax, [cur_width]
  1532.         neg     eax
  1533.         mov     [panel2_width], eax
  1534.         mov     eax, [cur_height]
  1535.         dec     eax
  1536.         dec     eax
  1537.         mov     [panel1_height], eax
  1538.         mov     [panel2_height], eax
  1539.         ret
  1540.  
  1541. get_curfile_folder_entry:
  1542.         push    eax
  1543.         mov     ecx, [ebp + panel1_index - panel1_data]
  1544.         mov     eax, [ebp + panel1_files - panel1_data]
  1545.         mov     ecx, [eax+ecx*4]
  1546.         mov     eax, [ebp + panel1_nfa - panel1_data]
  1547.         lea     ecx, [ecx+eax*4+32]
  1548.         add     ecx, [ebp + panel1_files - panel1_data]
  1549.         pop     eax
  1550.         ret
  1551. get_curfile_name:
  1552.         call    get_curfile_folder_entry
  1553.         add     ecx, 40
  1554.         ret
  1555.  
  1556. panels_getname:
  1557. if lang eq ru
  1558.         mov     eax, ' ­¥'
  1559.         stosd
  1560.         mov     eax, '«¨  '
  1561.         stosd
  1562.         mov     eax, '    '
  1563.         stosd
  1564.         stosb
  1565. else
  1566.         mov     eax, 'Pane'
  1567.         stosd
  1568.         mov     eax, 'ls  '
  1569.         stosd
  1570.         mov     eax, '    '
  1571.         stosd
  1572.         stosb
  1573. end if
  1574.         sub     ecx, 13
  1575.         mov     ebp, [active_panel]
  1576.         lea     esi, [ebp + panel1_dir - panel1_data]
  1577.         push    3
  1578.         pop     edx
  1579. @@:
  1580.         lodsb
  1581.         stosb
  1582.         dec     ecx
  1583.         test    al, al
  1584.         jz      @f
  1585.         cmp     al, '/'
  1586.         jnz     @b
  1587.         dec     edx
  1588.         jnz     @b
  1589. @@:
  1590.         test    al, al
  1591.         jnz     @f
  1592.         dec     esi
  1593.         dec     edi
  1594. @@:
  1595.         push    esi
  1596. @@:
  1597.         lodsb
  1598.         test    al, al
  1599.         jnz     @b
  1600.         dec     esi
  1601.         mov     ebx, esi
  1602.         sub     ebx, [esp]
  1603.         dec     esi
  1604.         push    esi
  1605.         mov     edx, [ebp + panel1_files - panel1_data]
  1606.         mov     esi, [ebp + panel1_index - panel1_data]
  1607.         mov     esi, [edx+esi*4]
  1608.         add     esi, edx
  1609.         mov     edx, [ebp + panel1_nfa - panel1_data]
  1610.         lea     esi, [esi+edx*4+32+40]
  1611.         push    esi
  1612. @@:
  1613.         lodsb
  1614.         test    al, al
  1615.         jnz     @b
  1616.         add     ebx, esi
  1617.         sub     ebx, [esp]
  1618.         dec     esi
  1619.         cmp     ebx, ecx
  1620.         jbe     @f
  1621.         mov     al, '.'
  1622.         stosb
  1623.         stosb
  1624.         stosb
  1625.         sub     ecx, 3
  1626.         mov     ebx, ecx
  1627. @@:
  1628.         add     edi, ebx
  1629.         inc     ecx
  1630.         std
  1631. @@:
  1632.         movsb
  1633.         dec     ecx
  1634.         jz      .nodir
  1635.         cmp     esi, [esp]
  1636.         jae     @b
  1637.         mov     al, '/'
  1638.         stosb
  1639.         dec     ecx
  1640.         jz      .nodir
  1641.         mov     esi, [esp+4]
  1642. @@:
  1643.         cmp     esi, [esp+8]
  1644.         jb      .nodir
  1645.         movsb
  1646.         loop    @b
  1647. .nodir:
  1648.         cld
  1649.         pop     eax
  1650.         pop     eax
  1651.         pop     eax
  1652.         ret
  1653.  
  1654. draw_window:
  1655.         push    12
  1656.         pop     eax
  1657.         push    1
  1658.         pop     ebx
  1659.         int     40h
  1660.         mov     al, 48
  1661.         mov     bl, 4
  1662.         int     40h
  1663.         mov     [skinh], eax
  1664.         mov     ebx, [cur_width]
  1665.         imul    ebx, font_width
  1666.         add     ebx, 100*65536 + 5*2-1
  1667.         mov     ecx, [cur_height]
  1668.         imul    ecx, font_height
  1669.         lea     ecx, [eax+ecx+5-1+100*65536]
  1670.         xor     eax, eax
  1671.         mov     edx, 0x53000000
  1672.         mov     edi, header
  1673.         int     40h
  1674.         mov     al, 13
  1675.         xor     edx, edx
  1676.         cmp     [fill_width], 0
  1677.         jz      @f
  1678.         mov     ebx, [wnd_width]
  1679.         sub     ebx, [fill_width]
  1680.         sub     ebx, 5-1
  1681.         shl     ebx, 16
  1682.         mov     bx, word [fill_width]
  1683.         mov     ecx, [skinh-2]
  1684.         mov     cx, word [wnd_height]
  1685.         sub     cx, word [skinh]
  1686.         sub     cx, 5-1
  1687.         int     0x40
  1688. @@:
  1689.         cmp     [fill_height], 0
  1690.         jz      @f
  1691.         mov     al, 13
  1692.         xor     edx, edx
  1693.         mov     ebx, 50000h
  1694.         mov     bx, word [wnd_width]
  1695.         sub     ebx, 9
  1696.         mov     ecx, [wnd_height]
  1697.         sub     ecx, [fill_height]
  1698.         sub     ecx, 5-1
  1699.         shl     ecx, 16
  1700.         mov     cx, word [fill_height]
  1701.         int     0x40
  1702. @@:
  1703. ;        xor     ecx, ecx
  1704. ;        call    draw_image
  1705.         and     [min_x], 0
  1706.         and     [min_y], 0
  1707.         mov     eax, [cur_width]
  1708.         dec     eax
  1709.         mov     [max_x], eax
  1710.         mov     eax, [cur_height]
  1711.         dec     eax
  1712.         mov     [max_y], eax
  1713.         call    draw_image.force
  1714.         mov     al, 12
  1715.         push    2
  1716.         pop     ebx
  1717.         int     40h
  1718.         ret
  1719.  
  1720. draw_image.nomem:
  1721.         mov     al, 13
  1722.         xor     edx, edx
  1723.         mov     ebx, [cur_width]
  1724.         imul    ebx, font_width
  1725.         add     ebx, 5*65536
  1726.         mov     ecx, [skinh-2]
  1727.         mov     cx, word [cur_height]
  1728.         imul    cx, font_height
  1729.         int     40h
  1730.         mov     al, 4
  1731.         mov     ebx, 32*65536+32
  1732.         mov     ecx, 0xFFFFFF
  1733.         mov     edx, nomem_draw
  1734.         push    nomem_draw.size
  1735.         pop     esi
  1736.         int     40h
  1737.         ret
  1738.  
  1739. draw_image:
  1740. ; determine draw rectangle
  1741.         and     [max_x], 0
  1742.         or      [min_x], -1
  1743.         or      [min_y], -1
  1744.         mov     esi, [console_data_ptr]
  1745.         xor     eax, eax
  1746.         xor     edx, edx
  1747.         mov     ecx, [cur_width]
  1748.         imul    ecx, [cur_height]
  1749. .m1:
  1750.         mov     bx, [esi]
  1751.         cmp     bx, [esi+ecx*2]
  1752.         jz      .m2
  1753.         cmp     eax, [min_x]
  1754.         ja      @f
  1755.         mov     [min_x], eax
  1756. @@:
  1757.         cmp     eax, [max_x]
  1758.         jb      @f
  1759.         mov     [max_x], eax
  1760. @@:
  1761.         cmp     edx, [min_y]
  1762.         jae     @f
  1763.         mov     [min_y], edx
  1764. @@:
  1765.         mov     [max_y], edx
  1766. .m2:
  1767.         add     esi, 2
  1768.         inc     eax
  1769.         cmp     eax, [cur_width]
  1770.         jb      .m1
  1771.         xor     eax, eax
  1772.         inc     edx
  1773.         cmp     edx, [cur_height]
  1774.         jb      .m1
  1775.         mov     eax, [cursor_x]
  1776.         cmp     eax, -1
  1777.         jz      .m3
  1778.         cmp     eax, [min_x]
  1779.         ja      @f
  1780.         mov     [min_x], eax
  1781. @@:
  1782.         cmp     eax, [max_x]
  1783.         jb      @f
  1784.         mov     [max_x], eax
  1785. @@:
  1786.         mov     edx, [cursor_y]
  1787.         cmp     edx, [min_y]
  1788.         ja      @f
  1789.         mov     [min_y], edx
  1790. @@:
  1791.         cmp     edx, [max_y]
  1792.         jb      @f
  1793.         mov     [max_y], edx
  1794. @@:
  1795. .m3:
  1796.         xchg    eax, [old_cursor_x]
  1797.         xchg    edx, [old_cursor_y]
  1798.         cmp     eax, -1
  1799.         jz      .m4
  1800.         cmp     eax, [min_x]
  1801.         ja      @f
  1802.         mov     [min_x], eax
  1803. @@:
  1804.         cmp     eax, [max_x]
  1805.         jb      @f
  1806.         mov     [max_x], eax
  1807. @@:
  1808.         cmp     edx, [min_y]
  1809.         ja      @f
  1810.         mov     [min_y], edx
  1811. @@:
  1812.         cmp     edx, [max_y]
  1813.         jb      @f
  1814.         mov     [max_y], edx
  1815. @@:
  1816. .m4:
  1817.         cmp     [min_y], -1
  1818.         jz      .nodraw
  1819. .force:
  1820. ; allocate memory for image
  1821.         mov     ecx, [max_x]
  1822.         sub     ecx, [min_x]
  1823.         inc     ecx
  1824.         mov     [used_width], ecx
  1825.         mov     edx, [max_y]
  1826.         sub     edx, [min_y]
  1827.         inc     edx
  1828.         mov     [used_height], edx
  1829.         imul    ecx, edx
  1830.         imul    ecx, font_width*font_height
  1831.         add     ecx, [heapend]
  1832.         push    64
  1833.         pop     eax
  1834.         push    1
  1835.         pop     ebx
  1836.         int     0x40
  1837.         test    eax, eax
  1838.         jnz     draw_image.nomem
  1839.         mov     edi, [heapend]
  1840.         mov     esi, [console_data_ptr]
  1841.         mov     eax, [min_y]
  1842.         imul    eax, [cur_width]
  1843.         add     eax, [min_x]
  1844.         lea     esi, [esi+eax*2]
  1845.         mov     ecx, [used_height]
  1846. .lh:
  1847.         push    ecx esi
  1848.         mov     ecx, [used_width]
  1849. .lw:
  1850.         push    ecx
  1851.         mov     ebx, [esi]
  1852.         mov     eax, [cur_width]
  1853.         imul    eax, [cur_height]
  1854.         mov     [eax*2+esi], bx
  1855.         movzx   eax, bl
  1856.         push    edi
  1857.         movzx   ebx, bh
  1858.         mov     ebp, ebx
  1859.         shr     ebp, 4
  1860.         and     ebx, 0xF
  1861.         sub     ebx, ebp
  1862.         add     esi, 2
  1863. if font_width > 8
  1864.         lea     edx, [eax+eax+font]
  1865. else
  1866.         lea     edx, [eax+font]
  1867. end if
  1868.         mov     ecx, font_height
  1869. .sh:
  1870.         push    ecx edx edi
  1871.         xor     ecx, ecx
  1872.         mov     edx, [edx]
  1873. .sw:
  1874.         shr     edx, 1
  1875.         sbb     eax, eax
  1876.         and     eax, ebx
  1877.         add     eax, ebp
  1878.         mov     [edi], al
  1879.         add     ecx, 1
  1880.         add     edi, 1
  1881.         cmp     ecx, font_width
  1882.         jb      .sw
  1883.         pop     edi edx ecx
  1884.         mov     eax, [used_width]
  1885.         imul    eax, font_width
  1886.         add     edi, eax
  1887. if font_width > 8
  1888.         add     edx, 256*2
  1889. else
  1890.         add     edx, 256
  1891. end if
  1892.         loop    .sh
  1893.         pop     edi
  1894. .skip_symbol:
  1895.         pop     ecx
  1896.         add     edi, font_width
  1897.         dec     ecx
  1898.         jnz     .lw
  1899.         mov     eax, [used_width]
  1900.         imul    eax, (font_height-1)*font_width
  1901.         add     edi, eax
  1902.         pop     esi ecx
  1903.         add     esi, [cur_width]
  1904.         add     esi, [cur_width]
  1905.         dec     ecx
  1906.         jnz     .lh
  1907. ; cursor
  1908.         mov     eax, [cursor_y]
  1909.         inc     eax
  1910.         jz      .nocursor
  1911.         sub     eax, [min_y]
  1912.         mul     [used_width]
  1913.         imul    eax, font_height*font_width
  1914.         mov     edx, [cursor_x]
  1915.         sub     edx, [min_x]
  1916.         inc     edx
  1917.         imul    edx, font_width
  1918.         add     eax, edx
  1919.         add     eax, [heapend]
  1920.         mov     edx, [used_width]
  1921.         imul    edx, font_width
  1922.         neg     edx
  1923.         mov     ecx, (font_height*15+50)/100
  1924. .cursor_loop:
  1925.         push    ecx
  1926.         mov     ecx, font_width
  1927.         add     eax, edx
  1928.         push    eax
  1929. @@:
  1930. ;        add     byte [eax-1], 0x10
  1931.         xor     byte [eax-1], 7
  1932.         sub     eax, 1
  1933.         loop    @b
  1934.         pop     eax
  1935.         pop     ecx
  1936.         loop    .cursor_loop
  1937. .nocursor:
  1938.         mov     ecx, [used_width]
  1939.         imul    ecx, font_width*65536
  1940.         mov     cx, word [used_height]
  1941.         imul    cx, font_height
  1942.         mov     edx, [min_x]
  1943.         imul    edx, font_width
  1944.         add     edx, 5
  1945.         shl     edx, 16
  1946.         mov     dx, word [min_y]
  1947.         imul    dx, font_height
  1948.         add     edx, [skinh]
  1949.         push    65
  1950.         pop     eax
  1951.         mov     ebx, [heapend]
  1952.         push    8
  1953.         pop     esi
  1954.         mov     edi, console_colors
  1955.         xor     ebp, ebp
  1956.         int     0x40
  1957.         push    64
  1958.         pop     eax
  1959.         push    1
  1960.         pop     ebx
  1961.         mov     ecx, [heapend]
  1962.         int     0x40
  1963. .nodraw:
  1964.         ret
  1965.  
  1966. get_console_ptr:
  1967. ; in: eax=x, edx=y
  1968. ; out: edi->console data
  1969.         push    edx
  1970.         imul    edx, [cur_width]
  1971.         add     edx, eax
  1972.         mov     edi, [console_data_ptr]
  1973.         lea     edi, [edi + edx*2]
  1974.         pop     edx
  1975.         ret
  1976.  
  1977. draw_keybar:
  1978.         pushad
  1979.         xor     eax, eax
  1980.         test    [ctrlstate], 3
  1981.         jz      @f
  1982.         inc     eax
  1983. @@:
  1984.         test    [ctrlstate], 0xC
  1985.         jz      @f
  1986.         or      al, 2
  1987. @@:
  1988.         test    [ctrlstate], 0x30
  1989.         jz      @f
  1990.         or      al, 4
  1991. @@:
  1992.         imul    eax, 6*12
  1993.         mov     esi, [active_screen_vtable]
  1994.         mov     esi, [esi+screen_vtable.keybar]
  1995.         add     esi, eax
  1996.         xor     ecx, ecx
  1997.         inc     ecx
  1998.         xor     eax, eax
  1999.         mov     edx, [cur_height]
  2000.         dec     edx
  2001.         call    get_console_ptr
  2002.         push    6
  2003.         pop     ebx
  2004.         mov     eax, [cur_width]
  2005.         sub     eax, 11+9+3*2+6
  2006.         cmp     eax, 7*11
  2007.         jl      @f
  2008.         cdq
  2009.         mov     bl, 11
  2010.         div     ebx
  2011.         mov     ebx, eax
  2012. @@:
  2013.         xor     edx, edx
  2014. .l:
  2015.         add     edx, 7
  2016.         cmp     cl, 10
  2017.         jb      @f
  2018.         inc     edx
  2019. @@:
  2020.         cmp     edx, [cur_width]
  2021.         ja      .ret
  2022.         cmp     cl, 10
  2023.         jae     .twodig
  2024.         lea     eax, [ecx+'0']
  2025.         stosb
  2026.         mov     al, [keybar_number_color]
  2027.         stosb
  2028.         jmp     .cmn
  2029. .twodig:
  2030.         mov     al, cl
  2031.         cbw
  2032.         div     [_10]
  2033.         add     al, '0'
  2034.         stosb
  2035.         mov     al, [keybar_number_color]
  2036.         stosb
  2037.         xchg    al, ah
  2038.         add     al, '0'
  2039.         stosw
  2040. .cmn:
  2041.         mov     ah, [keybar_name_color]
  2042.         push    ecx
  2043.         mov     cl, 6
  2044. @@:
  2045.         lodsb
  2046.         stosw
  2047.         loop    @b
  2048.         mov     al, ' '
  2049.         lea     ecx, [ebx-6]
  2050.         cmp     byte [esp], 12
  2051.         jz      .ret_pop
  2052.         add     edx, ecx
  2053.         rep     stosw
  2054.         pop     ecx
  2055.         inc     edx
  2056.         cmp     edx, [cur_width]
  2057.         ja      .ret
  2058.         mov     ah, [keybar_bgr_color]
  2059.         stosw
  2060.         inc     ecx
  2061.         jmp     .l
  2062. .ret_pop:
  2063.         pop     ecx
  2064. .ret:
  2065.         cmp     byte [edi-2], ' '
  2066.         jnz     @f
  2067.         dec     edi
  2068.         dec     edi
  2069. @@:
  2070.         push    edi
  2071.         xor     eax, eax
  2072.         mov     edx, [cur_height]
  2073.         call    get_console_ptr
  2074.         mov     ecx, edi
  2075.         pop     edi
  2076.         sub     ecx, edi
  2077.         shr     ecx, 1
  2078.         mov     al, ' '
  2079.         mov     ah, [keybar_name_color]
  2080.         rep     stosw
  2081. .done:
  2082.         popad
  2083.         ret
  2084.  
  2085. draw_cmdbar:
  2086.         mov     esi, [active_panel]
  2087.         add     esi, panel1_dir - panel1_data
  2088.         xor     eax, eax
  2089.         mov     edx, [cur_height]
  2090.         dec     edx
  2091.         dec     edx
  2092.         call    get_console_ptr
  2093.         mov     ah, [cmdbar_prefix_color]
  2094.         mov     ecx, [cur_width]
  2095.         dec     ecx
  2096. @@:
  2097.         lodsb
  2098.         test    al, al
  2099.         jz      @f
  2100.         stosw
  2101.         loop    @b
  2102. @@:
  2103.         mov     al, '>'
  2104.         stosw
  2105.         mov     al, ' '
  2106.         mov     ah, [cmdbar_normal_color]
  2107.         rep     stosw
  2108.         ret
  2109.  
  2110. draw_border:
  2111.         push    edi
  2112.         mov     al, 0xC9
  2113.         stosw
  2114.         mov     al, 0xCD
  2115.         lea     ecx, [ebx-2]
  2116.         rep     stosw
  2117.         mov     al, 0xBB
  2118.         stosw
  2119.         pop     edi
  2120.         add     edi, [cur_width]
  2121.         add     edi, [cur_width]
  2122.         lea     ecx, [edx-2]
  2123. .l:
  2124.         push    edi
  2125.         mov     al, 0xBA
  2126.         stosw
  2127.         mov     al, 0x20
  2128.         push    ecx
  2129.         lea     ecx, [ebx-2]
  2130.         rep     stosw
  2131.         pop     ecx
  2132.         mov     al, 0xBA
  2133.         stosw
  2134.         pop     edi
  2135.         add     edi, [cur_width]
  2136.         add     edi, [cur_width]
  2137.         loop    .l
  2138.         mov     al, 0xC8
  2139.         stosw
  2140.         mov     al, 0xCD
  2141.         lea     ecx, [ebx-2]
  2142.         rep     stosw
  2143.         mov     al, 0xBC
  2144.         stosw
  2145.         ret
  2146.  
  2147. draw_panel:
  2148.         mov     eax, [ebp + panel1_left - panel1_data]
  2149.         mov     edx, [ebp + panel1_top - panel1_data]
  2150.         call    get_console_ptr
  2151. ; draw border
  2152.         mov     ah, [panel_border_color]
  2153.         mov     ebx, [ebp + panel1_width - panel1_data]
  2154.         mov     edx, [ebp + panel1_height - panel1_data]
  2155.         call    draw_border
  2156.         push    eax
  2157.         mov     eax, [ebp + panel1_left - panel1_data]
  2158.         mov     edx, [ebp + panel1_top - panel1_data]
  2159.         add     edx, [ebp + panel1_height - panel1_data]
  2160.         sub     edx, 3
  2161.         call    get_console_ptr
  2162.         pop     eax
  2163.         mov     al, 0xC7
  2164.         stosw
  2165.         mov     al, 0xC4
  2166.         lea     ecx, [ebx-2]
  2167.         rep     stosw
  2168.         mov     al, 0xB6
  2169.         stosw
  2170.         mov     eax, [ebp + panel1_width - panel1_data]
  2171.         sub     eax, 3
  2172.         shr     eax, 1
  2173.         mov     [column_width], eax
  2174.         mov     eax, [ebp + panel1_left - panel1_data]
  2175.         inc     eax
  2176.         mov     [column_left], eax
  2177.         add     eax, [column_width]
  2178.         mov     edx, [ebp + panel1_top - panel1_data]
  2179.         inc     edx
  2180.         mov     [column_top], edx
  2181.         dec     edx
  2182.         call    get_console_ptr
  2183.         mov     ah, [panel_border_color]
  2184.         mov     al, 0xD1
  2185.         mov     [edi], ax
  2186.         add     edi, [cur_width]
  2187.         add     edi, [cur_width]
  2188.         mov     ecx, [ebp + panel1_height - panel1_data]
  2189.         sub     ecx, 4
  2190.         mov     [column_height], ecx
  2191.         mov     al, 0xB3
  2192. @@:
  2193.         mov     [edi], ax
  2194.         add     edi, [cur_width]
  2195.         add     edi, [cur_width]
  2196.         loop    @b
  2197.         mov     al, 0xC1
  2198.         stosw
  2199.         mov     eax, [column_height]
  2200.         dec     eax
  2201.         mov     [ebp + panel1_colsz - panel1_data], eax
  2202.         add     eax, eax
  2203.         mov     [ebp + panel1_colst - panel1_data], eax
  2204.         mov     eax, [ebp + panel1_start - panel1_data]
  2205.         mov     [column_index], eax
  2206.         call    draw_column
  2207.         mov     eax, [ebp + panel1_width - panel1_data]
  2208.         sub     eax, 3
  2209.         mov     ecx, [column_width]
  2210.         sub     eax, ecx
  2211.         mov     [column_width], eax
  2212.         inc     ecx
  2213.         add     [column_left], ecx
  2214.         call    draw_column
  2215. ; ‡ £®«®¢®ª ¯ ­¥«¨ (⥪ãé ï ¯ ¯ª )
  2216.         lea     esi, [ebp + panel1_dir - panel1_data]
  2217.         mov     edi, cur_header
  2218.         mov     ecx, [ebp + panel1_width - panel1_data]
  2219.         sub     ecx, 7
  2220.         movsb
  2221. @@:
  2222.         lodsb
  2223.         stosb
  2224.         dec     ecx
  2225.         test    al, al
  2226.         jz      .header_created
  2227.         cmp     al, '/'
  2228.         jnz     @b
  2229.         mov     edx, esi
  2230. @@:
  2231.         lodsb
  2232.         test    al, al
  2233.         jnz     @b
  2234.         sub     esi, edx
  2235.         dec     esi
  2236.         cmp     esi, ecx
  2237.         jbe     @f
  2238.         mov     word [edi], '..'
  2239.         mov     byte [edi+2], '.'
  2240.         add     edi, 3
  2241.         sub     ecx, 3
  2242.         add     edx, esi
  2243.         sub     edx, ecx
  2244. @@:
  2245.         mov     esi, edx
  2246. @@:
  2247.         lodsb
  2248.         stosb
  2249.         dec     ecx
  2250.         test    al, al
  2251.         jnz     @b
  2252. .header_created:
  2253.         mov     edx, [ebp + panel1_top - panel1_data]
  2254.         mov     eax, [ebp + panel1_left - panel1_data]
  2255.         shr     ecx, 1
  2256.         lea     eax, [eax+ecx+3]
  2257.         call    get_console_ptr
  2258.         mov     ah, [panel_active_header_color]
  2259.         cmp     ebp, [active_panel]
  2260.         jz      @f
  2261.         mov     ah, [panel_header_color]
  2262. @@:
  2263.         mov     al, ' '
  2264.         stosw
  2265.         mov     esi, cur_header
  2266. @@:
  2267.         lodsb
  2268.         test    al, al
  2269.         jz      @f
  2270.         stosw
  2271.         jmp     @b
  2272. @@:
  2273.         mov     al, ' '
  2274.         stosw
  2275.         mov     edx, [ebp + panel1_top - panel1_data]
  2276.         inc     edx
  2277.         mov     eax, [ebp + panel1_left - panel1_data]
  2278.         inc     eax
  2279.         call    get_console_ptr
  2280.         movzx   eax, [ebp + panel1_sortmode - panel1_data]
  2281.         mov     al, [compare_names+eax]
  2282.         stosb
  2283.         cmp     [ebp + panel1_numfiles - panel1_data], 0
  2284.         jz      .skip_curinfo
  2285. ; ˆ­ä®à¬ æ¨ï ® ¢ë¡à ­­®¬ ä ©«¥
  2286.         mov     ebx, [ebp + panel1_index - panel1_data]
  2287.         mov     eax, [ebp + panel1_files - panel1_data]
  2288.         mov     ebx, [eax+ebx*4]
  2289.         mov     eax, [ebp + panel1_nfa - panel1_data]
  2290.         lea     ebx, [ebx+eax*4+32]
  2291.         add     ebx, [ebp + panel1_files - panel1_data]
  2292.         mov     eax, [ebp + panel1_left - panel1_data]
  2293.         add     eax, [ebp + panel1_width - panel1_data]
  2294.         dec     eax
  2295.         mov     edx, [ebp + panel1_top - panel1_data]
  2296.         add     edx, [ebp + panel1_height - panel1_data]
  2297.         dec     edx
  2298.         dec     edx
  2299.         call    get_console_ptr
  2300.         mov     ecx, [ebp + panel1_width - panel1_data]
  2301.         dec     ecx
  2302.         dec     ecx
  2303. ; ‚à¥¬ï ¬®¤¨ä¨ª æ¨¨
  2304.         sub     edi, 5*2
  2305.         sub     ecx, 6
  2306.         mov     al, [ebx+24+2]
  2307.         aam
  2308.         or      ax, 0x3030
  2309.         mov     [edi], ah
  2310.         mov     [edi+2], al
  2311.         mov     [edi+4], byte ':'
  2312.         mov     al, [ebx+24+1]
  2313.         aam
  2314.         or      ax, 0x3030
  2315.         mov     [edi+6], ah
  2316.         mov     [edi+8], al
  2317.         mov     al, [panel_normal_color]
  2318.         mov     [edi+1], al
  2319.         mov     [edi+3], al
  2320.         mov     [edi+5], al
  2321.         mov     [edi+7], al
  2322.         mov     [edi+9], al
  2323.         dec     edi
  2324.         mov     [edi], al
  2325.         dec     edi
  2326.         mov     byte [edi], ' '
  2327. ; „ â  ¬®¤¨ä¨ª æ¨¨
  2328.         sub     edi, 8*2
  2329.         sub     ecx, 9
  2330.         mov     al, [ebx+28+0]
  2331.         aam
  2332.         or      ax, 0x3030
  2333.         mov     [edi], ah
  2334.         mov     [edi+2], al
  2335.         mov     [edi+4], byte '.'
  2336.         mov     al, [ebx+28+1]
  2337.         aam
  2338.         or      ax, 0x3030
  2339.         mov     [edi+6], ah
  2340.         mov     [edi+8], al
  2341.         mov     [edi+10], byte '.'
  2342.         mov     ax, [ebx+28+2]
  2343.         div     [_100]
  2344.         mov     al, ah
  2345.         aam
  2346.         or      ax, 0x3030
  2347.         mov     [edi+12], ah
  2348.         mov     [edi+14], al
  2349.         mov     al, [panel_normal_color]
  2350.         mov     [edi+1], al
  2351.         mov     [edi+3], al
  2352.         mov     [edi+5], al
  2353.         mov     [edi+7], al
  2354.         mov     [edi+9], al
  2355.         mov     [edi+11], al
  2356.         mov     [edi+13], al
  2357.         mov     [edi+15], al
  2358.         dec     edi
  2359.         mov     [edi], al
  2360.         dec     edi
  2361.         mov     [edi], byte ' '
  2362. ;  §¬¥à
  2363.         std
  2364.         mov     ah, [panel_normal_color]
  2365.         dec     edi
  2366.         dec     edi
  2367.         dec     ecx
  2368.         test    byte [ebx], 0x10
  2369.         jz      .size_file
  2370.         push    ecx
  2371.         mov     esi, aFolder+aFolder.size-1
  2372.         mov     ecx, aFolder.size
  2373.         cmp     word [ebx+40], '..'
  2374.         jnz     @f
  2375.         cmp     byte [ebx+42], 0
  2376.         jnz     @f
  2377.         mov     esi, aUp+aUp.size-1
  2378.         mov     cl, aUp.size
  2379. @@:
  2380.         sub     [esp], ecx
  2381. @@:
  2382.         lodsb
  2383.         stosw
  2384.         loop    @b
  2385.         pop     ecx
  2386.         jmp     .size_done
  2387. .size_file:
  2388.         mov     edx, [ebx+36]
  2389.         test    edx, edx
  2390.         jz      .size_less_4g
  2391.         cmp     edx, 10*256
  2392.         jae     .size_tera
  2393. ; ¢ £¨£ ¡ ©â å
  2394.         mov     al, 'G'
  2395.         shl     edx, 2
  2396.         jmp     .size_letter
  2397. .size_tera:
  2398. ; ¢ â¥à ¡ ©â å
  2399.         shr     edx, 8
  2400.         mov     al, 'T'
  2401.         jmp     .size_letter
  2402. .size_less_4g:
  2403.         mov     edx, [ebx+32]
  2404.         cmp     edx, 10*(1 shl 20)
  2405.         jae     .size_mega
  2406.         cmp     edx, 1 shl 20
  2407.         jb      .size_num
  2408.         shr     edx, 10
  2409.         mov     al, 'K'
  2410.         jmp     .size_letter
  2411. .size_mega:
  2412.         mov     al, 'M'
  2413.         shr     edx, 20
  2414. .size_letter:
  2415.         stosw
  2416.         dec     ecx
  2417.         mov     al, ' '
  2418.         stosw
  2419.         dec     ecx
  2420. .size_num:
  2421.         xchg    eax, edx
  2422.         xor     edx, edx
  2423.         div     [_10d]
  2424.         xchg    eax, edx
  2425.         add     al, '0'
  2426.         mov     ah, [panel_normal_color]
  2427.         stosw
  2428.         dec     ecx
  2429.         test    edx, edx
  2430.         jnz     .size_num
  2431. .size_done:
  2432.         cld
  2433. ; ˆ¬ï
  2434.         sub     edi, ecx
  2435.         sub     edi, ecx
  2436.         lea     esi, [ebx+40]
  2437. @@:
  2438.         lodsb
  2439.         test    al, al
  2440.         jnz     @b
  2441.         sub     esi, ebx
  2442.         sub     esi, 41
  2443.         mov     ah, [panel_normal_color]
  2444.         cmp     esi, ecx
  2445.         lea     edx, [ebx+40]
  2446.         jbe     @f
  2447.         mov     al, '{'
  2448.         mov     [edi-2], ax
  2449.         add     edx, esi
  2450.         sub     edx, ecx
  2451. @@:
  2452.         mov     esi, edx
  2453. @@:
  2454.         lodsb
  2455.         test    al, al
  2456.         jz      @f
  2457.         stosw
  2458.         loop    @b
  2459. @@:
  2460.         mov     al, ' '
  2461.         rep     stosw
  2462. .skip_curinfo:
  2463.         call    draw_image
  2464.         ret
  2465.  
  2466. draw_column:
  2467.         mov     eax, [column_left]
  2468.         mov     edx, [column_top]
  2469.         call    get_console_ptr
  2470. ; § £®«®¢®ª á⮫¡æ 
  2471.         push    edi
  2472.         mov     ah, [column_header_color]
  2473.         mov     al, ' '
  2474.         mov     ecx, [column_width]
  2475. if lang eq ru
  2476.         sub     ecx, 3
  2477. else
  2478.         sub     ecx, 4
  2479. end if
  2480.         shr     ecx, 1
  2481.         rep     stosw
  2482. if lang eq ru
  2483.         mov     al, 'ˆ'
  2484.         stosw
  2485.         mov     al, '¬'
  2486.         stosw
  2487.         mov     al, 'ï'
  2488.         stosw
  2489. else
  2490.         mov     al, 'N'
  2491.         stosw
  2492.         mov     al, 'a'
  2493.         stosw
  2494.         mov     al, 'm'
  2495.         stosw
  2496.         mov     al, 'e'
  2497.         stosw
  2498. end if
  2499.         mov     al, ' '
  2500.         mov     ecx, [column_width]
  2501. if lang eq ru
  2502.         sub     ecx, 2
  2503. else
  2504.         sub     ecx, 3
  2505. end if
  2506.         shr     ecx, 1
  2507.         rep     stosw
  2508.         pop     edi
  2509.         add     edi, [cur_width]
  2510.         add     edi, [cur_width]
  2511. ; ä ©«ë
  2512.         mov     edx, [ebp + panel1_numfiles - panel1_data]
  2513.         mov     ecx, [column_height]
  2514.         dec     ecx
  2515. .l:
  2516.         cmp     [column_index], edx
  2517.         jae     .ret
  2518.         push    ecx
  2519.         mov     esi, [column_index]
  2520.         mov     ecx, [ebp + panel1_files - panel1_data]
  2521.         mov     esi, [ecx+esi*4]
  2522.         mov     ecx, [ebp + panel1_nfa - panel1_data]
  2523.         lea     esi, [esi + ecx*4 + 32 + 40]
  2524.         add     esi, [ebp + panel1_files - panel1_data]
  2525.         mov     ah, [esi - 40 + 5]
  2526.         cmp     ebp, [active_panel]
  2527.         jnz     @f
  2528.         mov     ecx, [column_index]
  2529.         cmp     ecx, [ebp + panel1_index - panel1_data]
  2530.         jnz     @f
  2531.         mov     ah, [esi - 40 + 6]
  2532. @@:
  2533.         mov     ecx, [column_width]
  2534.         push    edi
  2535. @@:
  2536.         lodsb
  2537.         test    al, al
  2538.         jz      @f
  2539.         stosw
  2540.         loop    @b
  2541.         cmp     byte [esi], 0
  2542.         jz      @f
  2543.         mov     byte [edi], '}'
  2544. @@:
  2545.         mov     al, ' '
  2546.         rep     stosw
  2547.         pop     edi
  2548.         add     edi, [cur_width]
  2549.         add     edi, [cur_width]
  2550.         inc     [column_index]
  2551.         pop     ecx
  2552.         dec     ecx
  2553.         jnz     .l
  2554. .ret:
  2555.         cmp     ebp, panel1_data
  2556.         jnz     .ret2
  2557. ; —¨á«® íªà ­®¢
  2558.         mov     eax, [num_screens]
  2559.         dec     eax
  2560.         jz      .ret2
  2561.         push    eax
  2562.         xor     eax, eax
  2563.         xor     edx, edx
  2564.         call    get_console_ptr
  2565.         mov     ah, [panel_nscreens_color]
  2566.         mov     al, '['
  2567.         stosw
  2568.         pop     eax
  2569.         push    -'0'
  2570. @@:
  2571.         xor     edx, edx
  2572.         div     [_10d]
  2573.         push    edx
  2574.         test    eax, eax
  2575.         jnz     @b
  2576. @@:
  2577.         pop     eax
  2578.         add     eax, '0'
  2579.         jz      @f
  2580.         mov     ah, [panel_nscreens_color]
  2581.         stosw
  2582.         jmp     @b
  2583. @@:
  2584.         mov     al, ']'
  2585.         mov     ah, [panel_nscreens_color]
  2586.         stosw
  2587. .ret2:
  2588.         ret
  2589.  
  2590. ;insert_last_dot:
  2591. ;        push    eax esi
  2592. ;        mov     ah, 0
  2593. ;.loop:
  2594. ;        lodsb
  2595. ;        test    al, al
  2596. ;        jz      .done
  2597. ;        cmp     al, '.'
  2598. ;        jnz     .loop
  2599. ;        mov     ah, 1
  2600. ;        jmp     .loop
  2601. ;.done:
  2602. ;        test    ah, ah
  2603. ;        jnz     @f
  2604. ;        mov     byte [esi-1], '.'
  2605. ;        mov     byte [esi], 0
  2606. ;@@:
  2607. ;        pop     esi eax
  2608. ;        ret
  2609.  
  2610. ;delete_last_dot:
  2611. ;        push    esi
  2612. ;@@:
  2613. ;        cmp     byte [esi], 0
  2614. ;        jz      @f
  2615. ;        inc     esi
  2616. ;        jmp     @b
  2617. ;@@:
  2618. ;        cmp     byte [esi-1], '.'
  2619. ;        jnz     @f
  2620. ;        mov     byte [esi-1], 0
  2621. ;@@:     pop     esi
  2622. ;        ret
  2623.  
  2624. read_folder:
  2625.         mov     eax, [ebp + panel1_nfa - panel1_data]
  2626.         mov     [dirinfo.size], eax
  2627.         shl     eax, 2
  2628.         add     eax, [ebp + panel1_files - panel1_data]
  2629.         mov     [dirinfo.dirdata], eax
  2630.         lea     eax, [ebp + panel1_dir - panel1_data]
  2631.         mov     [dirinfo.name], eax
  2632. .retry:
  2633.         push    70
  2634.         pop     eax
  2635.         mov     ebx, dirinfo
  2636.         int     40h
  2637.         test    eax, eax
  2638.         jz      .ok
  2639.         cmp     eax, 6
  2640.         jz      .ok
  2641. ; Failed to read folder, notify user
  2642.         cmp     [bSilentFolderMode], 0
  2643.         jnz     .dont_notify
  2644.         push    aContinue
  2645.         push    aRetry
  2646.         mov     edx, esp
  2647.         call    get_error_msg
  2648.         push    [dirinfo.name]
  2649.         push    aCannotReadFolder
  2650.         push    eax
  2651.         mov     eax, esp
  2652.         push    edx
  2653.         push    2
  2654.         push    eax
  2655.         push    3
  2656.         push    -1
  2657.         push    -1
  2658.         push    aError
  2659.         call    SayErr
  2660.         add     esp, 5*4
  2661.         test    eax, eax
  2662.         jz      .retry
  2663. .dont_notify:
  2664.         mov     esi, prev_dir
  2665.         cmp     byte [esi], 0
  2666.         jz      @f
  2667.         lea     edi, [ebp + panel1_dir - panel1_data]
  2668.         mov     ecx, 1024/4
  2669.         rep     movsd
  2670.         mov     byte [prev_dir], 0
  2671.         ret
  2672. @@:
  2673.         mov     [bSilentFolderMode], 1  ; enter silent mode
  2674.         mov     esi, [dirinfo.name]
  2675.         xor     edx, edx
  2676. .up1:
  2677.         lodsb
  2678.         test    al, al
  2679.         jz      .up1done
  2680.         cmp     al, '/'
  2681.         jnz     .up1
  2682.         inc     edx
  2683.         lea     edi, [esi-1]
  2684.         jmp     .up1
  2685. .up1done:
  2686.         cmp     edx, 2
  2687.         jbe     .noup
  2688.         stosb
  2689.         jmp     read_folder
  2690. .noup:
  2691.         mov     esi, [dirinfo.name]
  2692.         mov     edi, esi
  2693.         lodsd
  2694.         or      eax, 0x00202000
  2695.         cmp     eax, '/rd/'
  2696.         jnz     @f
  2697.         lodsw
  2698.         cmp     ax, '1'
  2699.         jz      .nosetrd
  2700. @@:
  2701.         mov     eax, '/rd/'
  2702.         stosd
  2703.         mov     ax, '1'
  2704.         stosw
  2705.         jmp     read_folder
  2706. .nosetrd:
  2707. ; „ ¦¥ à ¬¤¨áª ­¥ ¯à®ç¨â «áï. ‡­ ç¨â, ­¥ áã¤ì¡ ...
  2708.         and     dword [ebp + panel1_numfiles - panel1_data], 0
  2709.         and     dword [ebp + panel1_index - panel1_data], 0
  2710.         and     dword [ebp + panel1_start - panel1_data], 0
  2711.         mov     [bSilentFolderMode], 0  ; leave silent mode
  2712.         ret
  2713. .ok:
  2714.         mov     eax, [dirinfo.dirdata]
  2715.         cmp     [eax+8], ebx
  2716.         jz      .readdone
  2717.         push    eax
  2718.         mov     eax, [ebp + panel1_files - panel1_data]
  2719.         call    mf_free
  2720.         pop     eax
  2721.         mov     eax, [eax+8]
  2722.         add     eax, 0xF
  2723.         and     eax, not 0xF
  2724.         push    eax
  2725.         imul    eax, 4+304
  2726.         add     eax, 32
  2727.         call    xmalloc
  2728.         test    eax, eax
  2729.         jnz     .succ1
  2730.         pop     eax
  2731.         jmp     .readdone
  2732. .succ1:
  2733.         mov     [ebp + panel1_files - panel1_data], eax
  2734.         pop     [ebp + panel1_nfa - panel1_data]
  2735.         jmp     read_folder
  2736. .readdone:
  2737.         and     [ebp + panel1_start - panel1_data], 0
  2738.         and     [ebp + panel1_index - panel1_data], 0
  2739.         and     [ebp + panel1_start - panel1_data], 0
  2740.         mov     edi, [ebp + panel1_files - panel1_data]
  2741.         mov     eax, [ebp + panel1_nfa - panel1_data]
  2742.         lea     esi, [edi + eax*4 + 32]
  2743.         xor     eax, eax
  2744.         mov     ecx, [esi-32+4]
  2745.         test    ecx, ecx
  2746.         jz      .loopdone
  2747. ; ˆ£­®à¨à㥬 ᯥ樠«ì­ë¥ ¢å®¤ë, ᮮ⢥âáâ¢ãî騥 ¯ ¯ª¥ '.' ¨ ¬¥âª¥ ⮬ 
  2748. .ptrinit:
  2749.         cmp     word [esi+eax+40], '.'
  2750.         jz      .loopcont
  2751.         test    byte [esi+eax], 8
  2752.         jnz     .loopcont
  2753.         stosd
  2754. ; ¯®¤á¢¥âª 
  2755. ;        call    insert_last_dot
  2756.         pushad
  2757.         lea     ebp, [esi+eax]
  2758.         lea     esi, [ebp+40]
  2759.         mov     edi, lower_file_name
  2760.         mov     edx, edi
  2761. @@:
  2762.         lodsb
  2763.         call    tolower
  2764.         stosb
  2765.         test    al, al
  2766.         jnz     @b
  2767.         mov     esi, edx
  2768.         lea     edx, [edi-1]
  2769.         xor     ecx, ecx
  2770. .highlight_test_loop:
  2771.         mov     ebx, [highlight_groups+ecx*4]
  2772.         mov     al, [ebx + highlight.IncludeAttributes]
  2773.         mov     ah, [ebp]
  2774.         and     ah, al
  2775.         cmp     ah, al
  2776.         jnz     .highlight_test_failed
  2777.         lea     edi, [ebx + highlight.Mask]
  2778.         call    match_mask_rev_lowercase
  2779.         jc      .highlight_test_failed
  2780.         mov     ah, [ebx + highlight.NormalColor]
  2781.         test    ah, ah
  2782.         jnz     @f
  2783.         mov     ah, [panel_normal_color]
  2784. @@:
  2785.         mov     [ebp+5], ah
  2786.         mov     ah, [ebx + highlight.CursorColor]
  2787.         test    ah, ah
  2788.         jnz     @f
  2789.         mov     ah, [panel_cursor_color]
  2790. @@:
  2791.         mov     [ebp+6], ah
  2792.         jmp     .doname
  2793. .highlight_test_failed:
  2794.         inc     ecx
  2795.         cmp     ecx, [highlight_num_groups]
  2796.         jb      .highlight_test_loop
  2797. .nohighlight:
  2798.         mov     ah, [panel_normal_color]
  2799.         mov     [ebp+5], ah
  2800.         mov     ah, [panel_cursor_color]
  2801.         mov     [ebp+6], ah
  2802. .doname:
  2803. ;        call    delete_last_dot
  2804.         popad
  2805. .loopcont:
  2806.         add     eax, 304
  2807.         dec     ecx
  2808.         jnz     .ptrinit
  2809. .loopdone:
  2810.         sub     edi, [ebp + panel1_files - panel1_data]
  2811.         shr     edi, 2
  2812.         mov     [ebp + panel1_numfiles - panel1_data], edi
  2813. .done:
  2814. ; ‘®àâ¨à®¢ª 
  2815. sort_files:
  2816.         movzx   eax, [ebp + panel1_sortmode - panel1_data]
  2817.         mov     ebx, [compare_fns + eax*4]
  2818.         mov     edx, [ebp + panel1_files - panel1_data]
  2819.         mov     ecx, [ebp + panel1_numfiles - panel1_data]
  2820.         call    sort
  2821.         mov     [bSilentFolderMode], 0  ; leave silent mode
  2822.         ret
  2823.  
  2824. compare_name:
  2825.         push    eax
  2826.         mov     eax, [ebp + panel1_nfa - panel1_data]
  2827.         add     esi, [ebp + panel1_files - panel1_data]
  2828.         add     edi, [ebp + panel1_files - panel1_data]
  2829.         lea     esi, [esi+eax*4+0x20]
  2830.         lea     edi, [edi+eax*4+0x20]
  2831.         pop     eax
  2832.         cmp     word [esi+40], '..'
  2833.         jnz     @f
  2834.         cmp     byte [esi+42], 0
  2835.         jz      .less
  2836. @@:     cmp     word [edi+40], '..'
  2837.         jnz     @f
  2838.         cmp     byte [edi+42], 0
  2839.         jz      .greater
  2840. @@:
  2841.         test    byte [esi], 10h
  2842.         jnz     .1dir
  2843.         test    byte [edi], 10h
  2844.         jnz     .greater
  2845. .eq1:
  2846.         add     esi, 40
  2847.         add     edi, 40
  2848.         jmp     strcmpi
  2849. .greater:
  2850.         test    esi, esi
  2851.         ret
  2852. .1dir:
  2853.         test    byte [edi], 10h
  2854.         jnz     .eq1
  2855. .less:
  2856.         xor     edi, edi
  2857.         stc
  2858.         ret
  2859.  
  2860. compare_name_rev:
  2861.         push    eax
  2862.         mov     eax, [ebp + panel1_nfa - panel1_data]
  2863.         add     esi, [ebp + panel1_files - panel1_data]
  2864.         add     edi, [ebp + panel1_files - panel1_data]
  2865.         lea     esi, [esi+eax*4+0x20]
  2866.         lea     edi, [edi+eax*4+0x20]
  2867.         pop     eax
  2868.         cmp     word [esi+40], '..'
  2869.         jnz     @f
  2870.         cmp     byte [esi+42], 0
  2871.         jz      .less
  2872. @@:     cmp     word [edi+40], '..'
  2873.         jnz     @f
  2874.         cmp     byte [edi+42], 0
  2875.         jz      .greater
  2876. @@:
  2877.         test    byte [esi], 10h
  2878.         jnz     .1dir
  2879.         test    byte [edi], 10h
  2880.         jnz     .greater
  2881. .eq1:
  2882.         add     esi, 40
  2883.         add     edi, 40
  2884.         xchg    esi, edi
  2885.         jmp     strcmpi
  2886. .greater:
  2887.         test    esi, esi
  2888.         ret
  2889. .1dir:
  2890.         test    byte [edi], 10h
  2891.         jnz     .eq1
  2892. .less:
  2893.         xor     edi, edi
  2894.         stc
  2895.         ret
  2896.  
  2897. strcmpi:
  2898.         push    eax
  2899. @@:
  2900.         lodsb
  2901.         call    match_symbol
  2902.         jnz     .ret
  2903.         inc     edi
  2904.         test    al, al
  2905.         jnz     @b
  2906. .ret:
  2907.         pop     eax
  2908.         ret
  2909.  
  2910. compare_ext:
  2911.         push    eax
  2912.         mov     eax, [ebp + panel1_nfa - panel1_data]
  2913.         add     esi, [ebp + panel1_files - panel1_data]
  2914.         add     edi, [ebp + panel1_files - panel1_data]
  2915.         lea     esi, [esi+eax*4+0x20]
  2916.         lea     edi, [edi+eax*4+0x20]
  2917.         pop     eax
  2918.         cmp     word [esi+40], '..'
  2919.         jnz     @f
  2920.         cmp     byte [esi+42], 0
  2921.         jz      .less
  2922. @@:     cmp     word [edi+40], '..'
  2923.         jnz     @f
  2924.         cmp     byte [edi+42], 0
  2925.         jz      .greater
  2926. @@:
  2927.         test    byte [esi], 10h
  2928.         jnz     .1dir
  2929.         test    byte [edi], 10h
  2930.         jnz     .greater
  2931. .eq1:
  2932.         add     esi, 40
  2933.         add     edi, 40
  2934.         push    esi edi
  2935.         call    seek_ext
  2936.         xchg    esi, edi
  2937.         call    seek_ext
  2938.         xchg    esi, edi
  2939.         call    strcmpi
  2940.         jnz     .ret
  2941.         pop     edi esi
  2942.         jmp     strcmpi
  2943. .ret:
  2944.         pop     edi esi
  2945.         ret
  2946. .greater:
  2947.         test    esi, esi
  2948.         ret
  2949. .1dir:
  2950.         test    byte [edi], 10h
  2951.         jnz     .eq1
  2952. .less:
  2953.         xor     edi, edi
  2954.         stc
  2955.         ret
  2956.  
  2957. compare_ext_rev:
  2958.         push    eax
  2959.         mov     eax, [ebp + panel1_nfa - panel1_data]
  2960.         add     esi, [ebp + panel1_files - panel1_data]
  2961.         add     edi, [ebp + panel1_files - panel1_data]
  2962.         lea     esi, [esi+eax*4+0x20]
  2963.         lea     edi, [edi+eax*4+0x20]
  2964.         pop     eax
  2965.         cmp     word [esi+40], '..'
  2966.         jnz     @f
  2967.         cmp     byte [esi+42], 0
  2968.         jz      .less
  2969. @@:     cmp     word [edi+40], '..'
  2970.         jnz     @f
  2971.         cmp     byte [edi+42], 0
  2972.         jz      .greater
  2973. @@:
  2974.         test    byte [esi], 10h
  2975.         jnz     .1dir
  2976.         test    byte [edi], 10h
  2977.         jnz     .greater
  2978. .eq1:
  2979.         add     esi, 40
  2980.         add     edi, 40
  2981.         push    esi edi
  2982.         call    seek_ext
  2983.         xchg    esi, edi
  2984.         call    seek_ext
  2985.         call    strcmpi
  2986.         jnz     .ret
  2987.         pop     edi esi
  2988.         xchg    esi, edi
  2989.         jmp     strcmpi
  2990. .ret:
  2991.         pop     edi esi
  2992.         ret
  2993. .greater:
  2994.         test    esi, esi
  2995.         ret
  2996. .1dir:
  2997.         test    byte [edi], 10h
  2998.         jnz     .eq1
  2999. .less:
  3000.         xor     edi, edi
  3001.         stc
  3002.         ret
  3003.  
  3004. seek_ext:
  3005.         push    eax
  3006.         xor     eax, eax
  3007. .l:
  3008.         inc     esi
  3009.         cmp     byte [esi-1], '.'
  3010.         jnz     @f
  3011.         mov     eax, esi
  3012. @@:
  3013.         cmp     byte [esi-1], 0
  3014.         jnz     .l
  3015.         test    eax, eax
  3016.         jnz     @f
  3017.         lea     eax, [esi-1]
  3018. @@:
  3019.         mov     esi, eax
  3020.         pop     eax
  3021.         ret
  3022.  
  3023. compare_modified:
  3024.         push    eax
  3025.         mov     eax, [ebp + panel1_nfa - panel1_data]
  3026.         add     esi, [ebp + panel1_files - panel1_data]
  3027.         add     edi, [ebp + panel1_files - panel1_data]
  3028.         lea     esi, [esi+eax*4+0x20]
  3029.         lea     edi, [edi+eax*4+0x20]
  3030.         pop     eax
  3031.         cmp     word [esi+40], '..'
  3032.         jnz     @f
  3033.         cmp     byte [esi+42], 0
  3034.         jz      .less
  3035. @@:     cmp     word [edi+40], '..'
  3036.         jnz     @f
  3037.         cmp     byte [edi+42], 0
  3038.         jz      .greater
  3039. @@:
  3040.         test    byte [esi], 10h
  3041.         jnz     .1dir
  3042.         test    byte [edi], 10h
  3043.         jnz     .greater
  3044. .eq1:
  3045.         push    edi
  3046.         mov     edi, [edi+28]
  3047.         cmp     edi, [esi+28]
  3048.         pop     edi
  3049.         jnz     @f
  3050.         push    edi
  3051.         mov     edi, [edi+24]
  3052.         cmp     edi, [esi+24]
  3053.         pop     edi
  3054.         jnz     @f
  3055.         add     esi, 40
  3056.         add     edi, 40
  3057.         jmp     strcmpi
  3058. @@:
  3059.         ret
  3060. .greater:
  3061.         test    esi, esi
  3062.         ret
  3063. .1dir:
  3064.         test    byte [edi], 10h
  3065.         jnz     .eq1
  3066. .less:
  3067.         xor     edi, edi
  3068.         stc
  3069.         ret
  3070.  
  3071. compare_modified_rev:
  3072.         push    eax
  3073.         mov     eax, [ebp + panel1_nfa - panel1_data]
  3074.         add     esi, [ebp + panel1_files - panel1_data]
  3075.         add     edi, [ebp + panel1_files - panel1_data]
  3076.         lea     esi, [esi+eax*4+0x20]
  3077.         lea     edi, [edi+eax*4+0x20]
  3078.         pop     eax
  3079.         cmp     word [esi+40], '..'
  3080.         jnz     @f
  3081.         cmp     byte [esi+42], 0
  3082.         jz      .less
  3083. @@:     cmp     word [edi+40], '..'
  3084.         jnz     @f
  3085.         cmp     byte [edi+42], 0
  3086.         jz      .greater
  3087. @@:
  3088.         test    byte [esi], 10h
  3089.         jnz     .1dir
  3090.         test    byte [edi], 10h
  3091.         jnz     .greater
  3092. .eq1:
  3093.         push    esi
  3094.         mov     esi, [esi+28]
  3095.         cmp     esi, [edi+28]
  3096.         pop     esi
  3097.         jnz     @f
  3098.         push    esi
  3099.         mov     esi, [esi+24]
  3100.         cmp     esi, [edi+24]
  3101.         pop     esi
  3102.         jnz     @f
  3103.         add     esi, 40
  3104.         add     edi, 40
  3105.         xchg    esi, edi
  3106.         jmp     strcmpi
  3107. @@:
  3108.         ret
  3109. .greater:
  3110.         test    esi, esi
  3111.         ret
  3112. .1dir:
  3113.         test    byte [edi], 10h
  3114.         jnz     .eq1
  3115. .less:
  3116.         xor     edi, edi
  3117.         stc
  3118.         ret
  3119.  
  3120. compare_size:
  3121.         push    eax
  3122.         mov     eax, [ebp + panel1_nfa - panel1_data]
  3123.         add     esi, [ebp + panel1_files - panel1_data]
  3124.         add     edi, [ebp + panel1_files - panel1_data]
  3125.         lea     esi, [esi+eax*4+0x20]
  3126.         lea     edi, [edi+eax*4+0x20]
  3127.         pop     eax
  3128.         cmp     word [esi+40], '..'
  3129.         jnz     @f
  3130.         cmp     byte [esi+42], 0
  3131.         jz      .less
  3132. @@:     cmp     word [edi+40], '..'
  3133.         jnz     @f
  3134.         cmp     byte [edi+42], 0
  3135.         jz      .greater
  3136. @@:
  3137.         test    byte [esi], 10h
  3138.         jnz     .1dir
  3139.         test    byte [edi], 10h
  3140.         jnz     .greater
  3141. .eq1:
  3142.         push    edi
  3143.         mov     edi, [edi+36]
  3144.         cmp     edi, [esi+36]
  3145.         pop     edi
  3146.         jnz     @f
  3147.         push    edi
  3148.         mov     edi, [edi+32]
  3149.         cmp     edi, [esi+32]
  3150.         pop     edi
  3151.         jnz     @f
  3152.         add     esi, 40
  3153.         add     edi, 40
  3154.         jmp     strcmpi
  3155. @@:
  3156.         ret
  3157. .greater:
  3158.         test    esi, esi
  3159.         ret
  3160. .1dir:
  3161.         test    byte [edi], 10h
  3162.         jnz     .eq1
  3163. .less:
  3164.         xor     edi, edi
  3165.         stc
  3166.         ret
  3167.  
  3168. compare_size_rev:
  3169.         push    eax
  3170.         mov     eax, [ebp + panel1_nfa - panel1_data]
  3171.         add     esi, [ebp + panel1_files - panel1_data]
  3172.         add     edi, [ebp + panel1_files - panel1_data]
  3173.         lea     esi, [esi+eax*4+0x20]
  3174.         lea     edi, [edi+eax*4+0x20]
  3175.         pop     eax
  3176.         cmp     word [esi+40], '..'
  3177.         jnz     @f
  3178.         cmp     byte [esi+42], 0
  3179.         jz      .less
  3180. @@:     cmp     word [edi+40], '..'
  3181.         jnz     @f
  3182.         cmp     byte [edi+42], 0
  3183.         jz      .greater
  3184. @@:
  3185.         test    byte [esi], 10h
  3186.         jnz     .1dir
  3187.         test    byte [edi], 10h
  3188.         jnz     .greater
  3189. .eq1:
  3190.         push    esi
  3191.         mov     esi, [esi+36]
  3192.         cmp     esi, [edi+36]
  3193.         pop     esi
  3194.         jnz     @f
  3195.         push    esi
  3196.         mov     esi, [esi+32]
  3197.         cmp     esi, [edi+32]
  3198.         pop     esi
  3199.         jnz     @f
  3200.         add     esi, 40
  3201.         add     edi, 40
  3202.         xchg    esi, edi
  3203.         jmp     strcmpi
  3204. @@:
  3205.         ret
  3206. .greater:
  3207.         test    esi, esi
  3208.         ret
  3209. .1dir:
  3210.         test    byte [edi], 10h
  3211.         jnz     .eq1
  3212. .less:
  3213.         xor     edi, edi
  3214.         stc
  3215.         ret
  3216.  
  3217. compare_unordered:
  3218.         cmp     esi, edi
  3219.         ret
  3220. compare_unordered_rev:
  3221.         push    eax
  3222.         mov     eax, [ebp + panel1_nfa - panel1_data]
  3223.         add     esi, [ebp + panel1_files - panel1_data]
  3224.         add     edi, [ebp + panel1_files - panel1_data]
  3225.         lea     esi, [esi+eax*4+0x20]
  3226.         lea     edi, [edi+eax*4+0x20]
  3227.         pop     eax
  3228.         cmp     word [esi+40], '..'
  3229.         jnz     @f
  3230.         cmp     byte [esi+42], 0
  3231.         jz      .less
  3232. @@:     cmp     word [edi+40], '..'
  3233.         jnz     @f
  3234.         cmp     byte [edi+42], 0
  3235.         jz      .greater
  3236. @@:
  3237.         cmp     edi, esi
  3238.         ret
  3239. .greater:
  3240.         test    esi, esi
  3241.         ret
  3242. .less:
  3243.         xor     edi, edi
  3244.         stc
  3245.         ret
  3246.  
  3247. compare_created:
  3248.         push    eax
  3249.         mov     eax, [ebp + panel1_nfa - panel1_data]
  3250.         add     esi, [ebp + panel1_files - panel1_data]
  3251.         add     edi, [ebp + panel1_files - panel1_data]
  3252.         lea     esi, [esi+eax*4+0x20]
  3253.         lea     edi, [edi+eax*4+0x20]
  3254.         pop     eax
  3255.         cmp     word [esi+40], '..'
  3256.         jnz     @f
  3257.         cmp     byte [esi+42], 0
  3258.         jz      .less
  3259. @@:     cmp     word [edi+40], '..'
  3260.         jnz     @f
  3261.         cmp     byte [edi+42], 0
  3262.         jz      .greater
  3263. @@:
  3264.         test    byte [esi], 10h
  3265.         jnz     .1dir
  3266.         test    byte [edi], 10h
  3267.         jnz     .greater
  3268. .eq1:
  3269.         push    edi
  3270.         mov     edi, [edi+12]
  3271.         cmp     edi, [esi+12]
  3272.         pop     edi
  3273.         jnz     @f
  3274.         push    edi
  3275.         mov     edi, [edi+8]
  3276.         cmp     edi, [esi+8]
  3277.         pop     edi
  3278.         jnz     @f
  3279.         add     esi, 40
  3280.         add     edi, 40
  3281.         jmp     strcmpi
  3282. @@:
  3283.         ret
  3284. .greater:
  3285.         test    esi, esi
  3286.         ret
  3287. .1dir:
  3288.         test    byte [edi], 10h
  3289.         jnz     .eq1
  3290. .less:
  3291.         xor     edi, edi
  3292.         stc
  3293.         ret
  3294.  
  3295. compare_created_rev:
  3296.         push    eax
  3297.         mov     eax, [ebp + panel1_nfa - panel1_data]
  3298.         add     esi, [ebp + panel1_files - panel1_data]
  3299.         add     edi, [ebp + panel1_files - panel1_data]
  3300.         lea     esi, [esi+eax*4+0x20]
  3301.         lea     edi, [edi+eax*4+0x20]
  3302.         pop     eax
  3303.         cmp     word [esi+40], '..'
  3304.         jnz     @f
  3305.         cmp     byte [esi+42], 0
  3306.         jz      .less
  3307. @@:     cmp     word [edi+40], '..'
  3308.         jnz     @f
  3309.         cmp     byte [edi+42], 0
  3310.         jz      .greater
  3311. @@:
  3312.         test    byte [esi], 10h
  3313.         jnz     .1dir
  3314.         test    byte [edi], 10h
  3315.         jnz     .greater
  3316. .eq1:
  3317.         push    esi
  3318.         mov     esi, [esi+12]
  3319.         cmp     esi, [edi+12]
  3320.         pop     esi
  3321.         jnz     @f
  3322.         push    esi
  3323.         mov     esi, [esi+8]
  3324.         cmp     esi, [edi+8]
  3325.         pop     esi
  3326.         jnz     @f
  3327.         add     esi, 40
  3328.         add     edi, 40
  3329.         xchg    esi, edi
  3330.         jmp     strcmpi
  3331. @@:
  3332.         ret
  3333. .greater:
  3334.         test    esi, esi
  3335.         ret
  3336. .1dir:
  3337.         test    byte [edi], 10h
  3338.         jnz     .eq1
  3339. .less:
  3340.         xor     edi, edi
  3341.         stc
  3342.         ret
  3343.  
  3344. compare_accessed:
  3345.         push    eax
  3346.         mov     eax, [ebp + panel1_nfa - panel1_data]
  3347.         add     esi, [ebp + panel1_files - panel1_data]
  3348.         add     edi, [ebp + panel1_files - panel1_data]
  3349.         lea     esi, [esi+eax*4+0x20]
  3350.         lea     edi, [edi+eax*4+0x20]
  3351.         pop     eax
  3352.         cmp     word [esi+40], '..'
  3353.         jnz     @f
  3354.         cmp     byte [esi+42], 0
  3355.         jz      .less
  3356. @@:     cmp     word [edi+40], '..'
  3357.         jnz     @f
  3358.         cmp     byte [edi+42], 0
  3359.         jz      .greater
  3360. @@:
  3361.         test    byte [esi], 10h
  3362.         jnz     .1dir
  3363.         test    byte [edi], 10h
  3364.         jnz     .greater
  3365. .eq1:
  3366.         push    edi
  3367.         mov     edi, [edi+20]
  3368.         cmp     edi, [esi+20]
  3369.         pop     edi
  3370.         jnz     @f
  3371.         push    edi
  3372.         mov     edi, [edi+16]
  3373.         cmp     edi, [esi+16]
  3374.         pop     edi
  3375.         jnz     @f
  3376.         add     esi, 40
  3377.         add     edi, 40
  3378.         jmp     strcmpi
  3379. @@:
  3380.         ret
  3381. .greater:
  3382.         test    esi, esi
  3383.         ret
  3384. .1dir:
  3385.         test    byte [edi], 10h
  3386.         jnz     .eq1
  3387. .less:
  3388.         xor     edi, edi
  3389.         stc
  3390.         ret
  3391.  
  3392. compare_accessed_rev:
  3393.         push    eax
  3394.         mov     eax, [ebp + panel1_nfa - panel1_data]
  3395.         add     esi, [ebp + panel1_files - panel1_data]
  3396.         add     edi, [ebp + panel1_files - panel1_data]
  3397.         lea     esi, [esi+eax*4+0x20]
  3398.         lea     edi, [edi+eax*4+0x20]
  3399.         pop     eax
  3400.         cmp     word [esi+40], '..'
  3401.         jnz     @f
  3402.         cmp     byte [esi+42], 0
  3403.         jz      .less
  3404. @@:     cmp     word [edi+40], '..'
  3405.         jnz     @f
  3406.         cmp     byte [edi+42], 0
  3407.         jz      .greater
  3408. @@:
  3409.         test    byte [esi], 10h
  3410.         jnz     .1dir
  3411.         test    byte [edi], 10h
  3412.         jnz     .greater
  3413. .eq1:
  3414.         push    esi
  3415.         mov     esi, [esi+20]
  3416.         cmp     esi, [edi+20]
  3417.         pop     esi
  3418.         jnz     @f
  3419.         push    esi
  3420.         mov     esi, [esi+16]
  3421.         cmp     esi, [edi+16]
  3422.         pop     esi
  3423.         jnz     @f
  3424.         add     esi, 40
  3425.         add     edi, 40
  3426.         xchg    esi, edi
  3427.         jmp     strcmpi
  3428. @@:
  3429.         ret
  3430. .greater:
  3431.         test    esi, esi
  3432.         ret
  3433. .1dir:
  3434.         test    byte [edi], 10h
  3435.         jnz     .eq1
  3436. .less:
  3437.         xor     edi, edi
  3438.         stc
  3439.         ret
  3440.  
  3441. if 0
  3442. match_mask:
  3443. ; in: esi->name, edi->mask
  3444. ; out: CF clear <=> match
  3445.         pusha
  3446.         xchg    esi, edi
  3447. .main_cycle:
  3448.         push    esi
  3449. @@:
  3450.         lodsb
  3451.         test    al, al
  3452.         jz      @f
  3453.         cmp     al, ','
  3454.         jz      @f
  3455.         cmp     al, '|'
  3456.         jnz     @b
  3457. @@:
  3458.         mov     [esi-1], byte 0
  3459.         xchg    esi, [esp]
  3460.         call    match_single_mask
  3461.         pop     esi
  3462.         mov     [esi-1], al
  3463.         jnc     .found
  3464.         cmp     al, ','
  3465.         jz      .main_cycle
  3466. .done_fail:
  3467.         stc
  3468.         popa
  3469.         ret
  3470. .found:
  3471.         test    al, al
  3472.         jz      .done_succ
  3473.         cmp     al, '|'
  3474.         jz      .test_exclude
  3475.         lodsb
  3476.         jmp     .found
  3477. .done_succ:
  3478.         clc
  3479.         popa
  3480.         ret
  3481. .test_exclude:
  3482.         push    esi
  3483. @@:
  3484.         lodsb
  3485.         test    al, al
  3486.         jz      @f
  3487.         cmp     al, ','
  3488.         jnz     @b
  3489. @@:
  3490.         mov     byte [esi-1], 0
  3491.         xchg    esi, [esp]
  3492.         call    match_single_mask
  3493.         pop     esi
  3494.         mov     [esi-1], al
  3495.         jnc     .done_fail
  3496.         test    al, al
  3497.         jz      .done_succ
  3498.         jmp     .test_exclude
  3499.  
  3500. match_single_mask:
  3501. ; in: esi->mask, edi->name
  3502. ; out: CF clear <=> match
  3503.         pusha
  3504. .mask_symbol:
  3505.         lodsb
  3506.         test    al, al
  3507.         jz      .mask_done
  3508.         cmp     al, '*'
  3509.         jz      .asterisk
  3510.         cmp     al, '?'
  3511.         jz      .quest
  3512.         cmp     al, '['
  3513.         jz      .list
  3514.         call    match_symbol
  3515.         jnz     .done_fail
  3516.         inc     edi
  3517.         jmp     .mask_symbol
  3518. .done_fail:
  3519.         stc
  3520.         popa
  3521.         ret
  3522. .mask_done:
  3523.         scasb
  3524.         jnz     .done_fail
  3525. .done_succ:
  3526.         clc
  3527.         popa
  3528.         ret
  3529. .quest:
  3530.         mov     al, 0
  3531.         scasb
  3532.         jz      .done_fail
  3533.         jmp     .mask_symbol
  3534. .list:
  3535.         lodsb
  3536.         cmp     al, ']'
  3537.         jz      .done_fail
  3538.         cmp     byte [esi+1], '-'
  3539.         jz      .range
  3540.         call    match_symbol
  3541.         jnz     .list
  3542. .listok:
  3543.         inc     edi
  3544. @@:
  3545.         lodsb
  3546.         cmp     al, ']'
  3547.         jnz     @b
  3548.         jmp     .mask_symbol
  3549. .range:
  3550.         call    match_symbol
  3551.         ja      @f
  3552.         mov     al, [esi+2]
  3553.         call    match_symbol
  3554.         jae     .listok
  3555. @@:
  3556.         inc     esi
  3557.         jmp     .list
  3558. .asterisk:
  3559.         cmp     byte [esi], 0
  3560.         jz      .done_succ
  3561.         cmp     byte [esi], '?'
  3562.         jnz     @f
  3563.         mov     al, 0
  3564.         scasb
  3565.         jz      .done_fail
  3566.         inc     esi
  3567.         jmp     .asterisk
  3568. @@:
  3569.         cmp     byte [esi], '['
  3570.         jz      .asterisk_common
  3571. ; the mask is ...*<normal-symbol>...
  3572. .asterisk_normal:
  3573.         mov     al, [esi]
  3574. @@:
  3575.         cmp     byte [edi], 0
  3576.         jz      .done_fail
  3577.         call    match_symbol
  3578.         jz      @f
  3579.         inc     edi
  3580.         jmp     @b
  3581. @@:
  3582.         inc     edi
  3583.         inc     esi
  3584.         call    match_single_mask
  3585.         jnc     .done_succ
  3586.         dec     esi
  3587.         jmp     .asterisk_normal
  3588. .asterisk_common:
  3589.         push    edi
  3590. @@:
  3591.         call    match_single_mask
  3592.         jnc     @f
  3593.         mov     al, 0
  3594.         scasb
  3595.         jnz     @b
  3596.         pop     edi
  3597.         jmp     .done_fail
  3598. @@:
  3599.         pop     edi
  3600.         jmp     .done_succ
  3601.  
  3602. match_mask_rev:
  3603. ; in: esi->name, edx->end of name, edi->mask
  3604. ; out: CF clear <=> match
  3605.         pusha
  3606.         xchg    esi, edx
  3607.         xchg    esi, edi
  3608. .main_cycle:
  3609.         mov     ecx, esi
  3610. @@:
  3611.         lodsb
  3612.         test    al, al
  3613.         jz      @f
  3614.         cmp     al, ','
  3615.         jz      @f
  3616.         cmp     al, '|'
  3617.         jnz     @b
  3618. @@:
  3619.         dec     esi
  3620.         mov     [esi], byte 0
  3621.         call    match_single_mask_rev2
  3622.         mov     [esi], al
  3623.         inc     esi
  3624.         jnc     .found
  3625.         cmp     al, ','
  3626.         jz      .main_cycle
  3627. .done_fail:
  3628.         stc
  3629.         popa
  3630.         ret
  3631. .found:
  3632.         test    al, al
  3633.         jz      .done_succ
  3634.         cmp     al, '|'
  3635.         jz      .test_exclude
  3636.         lodsb
  3637.         jmp     .found
  3638. .done_succ:
  3639.         clc
  3640.         popa
  3641.         ret
  3642. .test_exclude:
  3643.         mov     ecx, esi
  3644. @@:
  3645.         lodsb
  3646.         test    al, al
  3647.         jz      @f
  3648.         cmp     al, ','
  3649.         jnz     @b
  3650. @@:
  3651.         dec     esi
  3652.         mov     byte [esi], 0
  3653.         call    match_single_mask_rev2
  3654.         mov     [esi], al
  3655.         inc     esi
  3656.         jnc     .done_fail
  3657.         test    al, al
  3658.         jz      .done_succ
  3659.         jmp     .test_exclude
  3660.  
  3661. match_single_mask_rev2:
  3662.         pusha
  3663.         jmp     match_single_mask_rev.mask_symbol
  3664. match_single_mask_rev:
  3665. ; in: esi->mask, edi->end of name, edx->start of name
  3666. ; out: CF clear <=> match
  3667.         pusha
  3668.         mov     ecx, esi
  3669. @@:
  3670.         lodsb
  3671.         test    al, al
  3672.         jnz     @b
  3673.         dec     esi
  3674. ; esi->end of mask, ecx->start of mask
  3675. .mask_symbol:
  3676.         dec     esi
  3677.         cmp     esi, ecx
  3678.         jb      .mask_done
  3679.         mov     al, [esi]
  3680.         cmp     al, '*'
  3681.         jz      .asterisk
  3682.         cmp     al, '?'
  3683.         jz      .quest
  3684.         cmp     al, ']'
  3685.         jz      .list
  3686.         dec     edi
  3687.         cmp     edi, edx
  3688.         jb      .done_fail
  3689.         call    match_symbol
  3690.         jz      .mask_symbol
  3691. .done_fail:
  3692.         stc
  3693.         popa
  3694.         ret
  3695. .mask_done:
  3696.         cmp     edi, edx
  3697.         jnz     .done_fail
  3698. .done_succ:
  3699.         clc
  3700.         popa
  3701.         ret
  3702. .quest:
  3703.         dec     edi
  3704.         cmp     edi, edx
  3705.         jb      .done_fail
  3706.         jmp     .mask_symbol
  3707. .list:
  3708.         dec     edi
  3709.         cmp     edi, edx
  3710.         jb      .done_fail
  3711. .list_check:
  3712.         dec     esi
  3713.         cmp     esi, ecx
  3714.         jbe     .done_fail
  3715.         mov     al, [esi]
  3716.         cmp     al, '['
  3717.         jz      .done_fail
  3718.         cmp     byte [esi-1], '-'
  3719.         jz      .range
  3720.         call    match_symbol
  3721.         jnz     .list_check
  3722. .listok:
  3723. @@:
  3724.         dec     esi
  3725.         cmp     esi, ecx
  3726.         jb      .done_fail
  3727.         cmp     byte [esi], '['
  3728.         jnz     @b
  3729.         jmp     .mask_symbol
  3730. .range:
  3731.         call    match_symbol
  3732.         jb      @f
  3733.         mov     al, [esi-2]
  3734.         call    match_symbol
  3735.         jbe     .listok
  3736. @@:
  3737.         dec     esi
  3738.         dec     esi
  3739.         jmp     .list_check
  3740. .asterisk:
  3741.         cmp     esi, ecx
  3742.         jz      .done_succ
  3743.         cmp     byte [esi-1], '?'
  3744.         jnz     @f
  3745.         cmp     edi, edx
  3746.         jz      .done_fail
  3747.         dec     esi
  3748.         jmp     .asterisk
  3749. @@:
  3750.         cmp     byte [esi-1], ']'
  3751.         jz      .asterisk_common
  3752. ; the mask is ...<normal-symbol>*...
  3753. .asterisk_normal:
  3754.         mov     al, [esi-1]
  3755. @@:
  3756.         cmp     edi, edx
  3757.         jz      .done_fail
  3758.         call    match_symbol
  3759.         jz      @f
  3760.         dec     edi
  3761.         jmp     @b
  3762. @@:
  3763.         dec     edi
  3764.         dec     esi
  3765.         call    match_single_mask_rev2
  3766.         jnc     .done_succ
  3767.         inc     esi
  3768.         jmp     .asterisk_normal
  3769. .asterisk_common:
  3770.         push    edi
  3771. @@:
  3772.         call    match_single_mask_rev2
  3773.         jnc     @f
  3774.         dec     edi
  3775.         cmp     edi, edx
  3776.         jae     @b
  3777.         pop     edi
  3778.         jmp     .done_fail
  3779. @@:
  3780.         pop     edi
  3781.         jmp     .done_succ
  3782. end if
  3783.  
  3784. tolower:
  3785.         cmp     al, 'A'
  3786.         jb      @f
  3787.         cmp     al, 'Z'
  3788.         ja      @f
  3789.         add     al, ' '
  3790. @@:     ret
  3791.  
  3792. match_symbol:
  3793. ; in: al,[edi]=symbols
  3794. ; out: flags as 'cmp al,[edi]'
  3795.         push    eax
  3796.         call    tolower
  3797.         mov     ah, [edi]
  3798.         xchg    al, ah
  3799.         call    tolower
  3800.         cmp     ah, al
  3801.         pop     eax
  3802.         ret
  3803.  
  3804. match_mask_rev_lowercase:
  3805. ; in: esi->name, edx->end of name, edi->mask
  3806. ; out: CF clear <=> match
  3807.         pusha
  3808.         xchg    esi, edx
  3809.         xchg    esi, edi
  3810. .main_cycle:
  3811.         mov     ecx, esi
  3812. @@:
  3813.         lodsb
  3814.         test    al, al
  3815.         jz      @f
  3816.         cmp     al, ','
  3817.         jz      @f
  3818.         cmp     al, '|'
  3819.         jnz     @b
  3820. @@:
  3821.         dec     esi
  3822.         mov     [esi], byte 0
  3823.         call    match_single_mask_rev_lowercase
  3824.         mov     [esi], al
  3825.         inc     esi
  3826.         jnc     .found
  3827.         cmp     al, ','
  3828.         jz      .main_cycle
  3829. .done_fail:
  3830.         stc
  3831.         popa
  3832.         ret
  3833. .found:
  3834.         test    al, al
  3835.         jz      .done_succ
  3836.         cmp     al, '|'
  3837.         jz      .test_exclude
  3838.         lodsb
  3839.         jmp     .found
  3840. .done_succ:
  3841.         clc
  3842.         popa
  3843.         ret
  3844. .test_exclude:
  3845.         mov     ecx, esi
  3846. @@:
  3847.         lodsb
  3848.         test    al, al
  3849.         jz      @f
  3850.         cmp     al, ','
  3851.         jnz     @b
  3852. @@:
  3853.         dec     esi
  3854.         mov     byte [esi], 0
  3855.         call    match_single_mask_rev_lowercase
  3856.         mov     [esi], al
  3857.         inc     esi
  3858.         jnc     .done_fail
  3859.         test    al, al
  3860.         jz      .done_succ
  3861.         jmp     .test_exclude
  3862.  
  3863. match_single_mask_rev_lowercase:
  3864. ; in: esi->end of mask, ecx->start of mask, edi->end of name, edx->start of name
  3865. ; out: CF clear <=> match
  3866.         push    esi edi eax
  3867. .mask_symbol:
  3868.         dec     esi
  3869.         cmp     esi, ecx
  3870.         jb      .mask_done
  3871.         mov     al, [esi]
  3872.         cmp     al, '*'
  3873.         jz      .asterisk
  3874.         cmp     al, '?'
  3875.         jz      .quest
  3876.         cmp     al, ']'
  3877.         jz      .list
  3878.         dec     edi
  3879.         cmp     edi, edx
  3880.         jb      .done_fail
  3881.         cmp     al, [edi]
  3882.         jz      .mask_symbol
  3883. .done_fail:
  3884.         stc
  3885.         pop     eax edi esi
  3886.         ret
  3887. .mask_done:
  3888.         cmp     edi, edx
  3889.         jnz     .done_fail
  3890. .done_succ:
  3891.         clc
  3892.         pop     eax edi esi
  3893.         ret
  3894. .quest:
  3895.         dec     edi
  3896.         cmp     edi, edx
  3897.         jb      .done_fail
  3898.         jmp     .mask_symbol
  3899. .list:
  3900.         dec     edi
  3901.         cmp     edi, edx
  3902.         jb      .done_fail
  3903. .list_check:
  3904.         dec     esi
  3905.         cmp     esi, ecx
  3906.         jbe     .done_fail
  3907.         mov     al, [esi]
  3908.         cmp     al, '['
  3909.         jz      .done_fail
  3910.         cmp     byte [esi-1], '-'
  3911.         jz      .range
  3912.         cmp     al, [edi]
  3913.         jnz     .list_check
  3914. .listok:
  3915. @@:
  3916.         dec     esi
  3917.         cmp     esi, ecx
  3918.         jb      .done_fail
  3919.         cmp     byte [esi], '['
  3920.         jnz     @b
  3921.         jmp     .mask_symbol
  3922. .range:
  3923.         cmp     al, [edi]
  3924.         jb      @f
  3925.         mov     al, [esi-2]
  3926.         cmp     al, [edi]
  3927.         jbe     .listok
  3928. @@:
  3929.         dec     esi
  3930.         dec     esi
  3931.         jmp     .list_check
  3932. .asterisk:
  3933.         cmp     esi, ecx
  3934.         jz      .done_succ
  3935.         cmp     byte [esi-1], '?'
  3936.         jnz     @f
  3937.         cmp     edi, edx
  3938.         jz      .done_fail
  3939.         dec     esi
  3940.         jmp     .asterisk
  3941. @@:
  3942.         cmp     byte [esi-1], ']'
  3943.         jz      .asterisk_common
  3944. ; the mask is ...<normal-symbol>*...
  3945. .asterisk_normal:
  3946.         mov     al, [esi-1]
  3947. @@:
  3948.         cmp     edi, edx
  3949.         jz      .done_fail
  3950.         cmp     al, [edi]
  3951.         jz      @f
  3952.         dec     edi
  3953.         jmp     @b
  3954. @@:
  3955.         dec     edi
  3956.         dec     esi
  3957.         call    match_single_mask_rev_lowercase
  3958.         jnc     .done_succ
  3959.         inc     esi
  3960.         jmp     .asterisk_normal
  3961. .asterisk_common:
  3962.         push    edi
  3963. @@:
  3964.         call    match_single_mask_rev_lowercase
  3965.         jnc     @f
  3966.         dec     edi
  3967.         cmp     edi, edx
  3968.         jae     @b
  3969.         pop     edi
  3970.         jmp     .done_fail
  3971. @@:
  3972.         pop     edi
  3973.         jmp     .done_succ
  3974.  
  3975. find_extension:
  3976.         lea     esi, [ecx+40]
  3977.         push    esi
  3978. @@:
  3979.         lodsb
  3980.         test    al, al
  3981.         jnz     @b
  3982. @@:
  3983.         dec     esi
  3984.         cmp     byte [esi], '.'
  3985.         jz      .found_ext
  3986.         cmp     esi, [esp]
  3987.         ja      @b
  3988. ; empty extension
  3989.         pop     esi
  3990.         stc
  3991.         ret
  3992. .found_ext:
  3993.         inc     esi
  3994.         mov     edi, associations
  3995. @@:
  3996.         push    esi edi
  3997.         mov     edi, [edi]
  3998.         call    strcmpi
  3999.         pop     edi esi
  4000.         jz      @f
  4001.         add     edi, 12
  4002.         cmp     edi, associations_end
  4003.         jb      @b
  4004. ; unknown extension
  4005.         inc     edi
  4006. @@:
  4007.         pop     esi
  4008.         ret
  4009.  
  4010. header  db      'Kolibri Far 0.2',0
  4011.  
  4012. nomem_draw      db      'No memory for redraw.',0
  4013. .size = $ - nomem_draw
  4014.  
  4015. def_left_dir    db      '/rd/1',0
  4016. def_right_dir   db      '/hd0/1',0
  4017.  
  4018. bSilentFolderMode db    1
  4019.  
  4020. if lang eq ru
  4021. aFolder         db      ' ¯ª '
  4022. .size = $-aFolder
  4023. aUp             db      '‚¢¥àå'
  4024. .size = $-aUp
  4025. aDrive          db      '„¨áª',0
  4026. aScreens        db      'ªà ­ë',0
  4027. else
  4028. aFolder         db      'Folder'
  4029. .size = $-aFolder
  4030. aUp             db      'Up'
  4031. .size = $-aUp
  4032. aDrive          db      'Drive',0
  4033. aScreens        db      'Screens',0
  4034. end if
  4035.  
  4036. _10d dd 10
  4037. _100d dd 100
  4038. _10 db 10
  4039. _100 db 100
  4040.  
  4041. fpu_cw  dw      000011100111111b
  4042.  
  4043. keybar_panels:
  4044. if lang eq ru
  4045. ; ¡¥§ ª« ¢¨è-¬®¤¨ä¨ª â®à®¢
  4046.         db      '®¬®éì'
  4047.         db      '®«ì§Œ'
  4048.         db      'à®á¬ '
  4049.         db      '¥¤ ªâ'
  4050.         db      'Š®¯¨à '
  4051.         db      '¥à¥­ '
  4052.         db      ' ¯ª  '
  4053.         db      '“¤ «¥­'
  4054.         db      'Š®­äŒ­'
  4055.         db      '‚ë室 '
  4056.         db      'Œ®¤ã«¨'
  4057.         db      'ªà ­ë'
  4058. ; Shift
  4059.         db      '„®¡ ¢«'
  4060.         db      ' á¯ ª'
  4061.         db      '€à劮¬'
  4062.         db      '¥¤ ª.'
  4063.         db      'Š®¯¨à '
  4064.         db      '¥à¥¨¬'
  4065.         db      '      '
  4066.         db      '“¤ «¥­'
  4067.         db      '‘®åà ­'
  4068.         db      '®á«¤­'
  4069.         db      'ƒà㯯ë'
  4070.         db      '‚ë¡à ­'
  4071. ; Ctrl
  4072.         db      '‹¥¢ ï '
  4073.         db      'à ¢ ï'
  4074.         db      'ˆ¬ï   '
  4075.         db      ' áè¨à'
  4076.         db      'Œ®¤¨ä '
  4077.         db      ' §¬¥à'
  4078.         db      '¥á®àâ'
  4079.         db      '‘®§¤ ­'
  4080.         db      '„®áâã¯'
  4081.         db      'Ž¯¨á ­'
  4082.         db      '‚« ¤¥«'
  4083.         db      '‘®àâ  '
  4084. ; Ctrl+Shift
  4085.         db      '      '
  4086.         db      '      '
  4087.         db      'à®á¬ '
  4088.         db      '¥¤ ªâ'
  4089.         db      '      '
  4090.         db      '      '
  4091.         db      '      '
  4092.         db      '      '
  4093.         db      '      '
  4094.         db      '      '
  4095.         db      '      '
  4096.         db      '      '
  4097. ; Alt
  4098.         db      '‹¥¢ ï '
  4099.         db      'à ¢ ï'
  4100.         db      '‘¬®âà.'
  4101.         db      '¥¤ ª.'
  4102.         db      '¥ç âì'
  4103.         db      '‘¢ï§ì '
  4104.         db      'ˆáª âì'
  4105.         db      'ˆáâ®à '
  4106.         db      '‚¨¤¥® '
  4107.         db      '„¥à¥¢®'
  4108.         db      'ˆáâà '
  4109.         db      'ˆá⏠¯'
  4110. ; Alt+Shift
  4111.         db      '      '
  4112.         db      '      '
  4113.         db      '      '
  4114.         db      '      '
  4115.         db      '      '
  4116.         db      '      '
  4117.         db      '      '
  4118.         db      '      '
  4119.         db      'Š®­ä«'
  4120.         db      '      '
  4121.         db      '      '
  4122.         db      '      '
  4123. ; Alt+Ctrl
  4124. times 12 db     '      '
  4125. ; Alt+Ctrl+Shift
  4126. times 12 db     '      '
  4127. else
  4128. ; No modificators
  4129.         db      'Help  '
  4130.         db      'UserMn'
  4131.         db      'View  '
  4132.         db      'Edit  '
  4133.         db      'Copy  '
  4134.         db      'RenMov'
  4135.         db      'MkFold'
  4136.         db      'Delete'
  4137.         db      'ConfMn'
  4138.         db      'Quit  '
  4139.         db      'Plugin'
  4140.         db      'Screen'
  4141. ; Shift
  4142.         db      'Add   '
  4143.         db      'Extrct'
  4144.         db      'ArcCmd'
  4145.         db      'Edit..'
  4146.         db      'Copy  '
  4147.         db      'Rename'
  4148.         db      '      '
  4149.         db      'Delete'
  4150.         db      'Save  '
  4151.         db      'Last  '
  4152.         db      'Group '
  4153.         db      'SelUp '
  4154. ; Ctrl
  4155.         db      'Left  '
  4156.         db      'Right '
  4157.         db      'Name  '
  4158.         db      'Extens'
  4159.         db      'Modifn'
  4160.         db      'Size  '
  4161.         db      'Unsort'
  4162.         db      'Creatn'
  4163.         db      'Access'
  4164.         db      'Descr '
  4165.         db      'Owner '
  4166.         db      'Sort  '
  4167. ; Ctrl+Shift
  4168.         db      '      '
  4169.         db      '      '
  4170.         db      'View  '
  4171.         db      'Edit  '
  4172.         db      '      '
  4173.         db      '      '
  4174.         db      '      '
  4175.         db      '      '
  4176.         db      '      '
  4177.         db      '      '
  4178.         db      '      '
  4179.         db      '      '
  4180. ; Alt
  4181.         db      'Left  '
  4182.         db      'Right '
  4183.         db      'View..'
  4184.         db      'Edit..'
  4185.         db      'Print '
  4186.         db      'MkLink'
  4187.         db      'Find  '
  4188.         db      'Histry'
  4189.         db      'Video '
  4190.         db      'Tree  '
  4191.         db      'ViewHs'
  4192.         db      'FoldHs'
  4193. ; Alt+Shift
  4194.         db      '      '
  4195.         db      '      '
  4196.         db      '      '
  4197.         db      '      '
  4198.         db      '      '
  4199.         db      '      '
  4200.         db      '      '
  4201.         db      '      '
  4202.         db      'ConfPl'
  4203.         db      '      '
  4204.         db      '      '
  4205.         db      '      '
  4206. ; Alt+Ctrl
  4207. times 12 db     '      '
  4208. ; Alt+Ctrl+Shift
  4209. times 12 db     '      '
  4210. end if
  4211.  
  4212. keybar_viewer:
  4213. if lang eq ru
  4214. ; ¡¥§ ª« ¢¨è-¬®¤¨ä¨ª â®à®¢
  4215.         db      '®¬®éì'
  4216.         db      ' §¢¥à'
  4217.         db      '‚ë室 '
  4218.         db      'Š®¤   '
  4219.         db      '      '
  4220.         db      '¥¤ ªâ'
  4221.         db      '®¨áª '
  4222. keybar_cp:
  4223.         db      'cp1251'
  4224.         db      '      '
  4225.         db      '‚ë室 '
  4226.         db      'Œ®¤ã«¨'
  4227.         db      'ªà ­ë'
  4228. ; Shift
  4229.         db      '      '
  4230.         db      '‘«®¢  '
  4231.         db      '      '
  4232.         db      '      '
  4233.         db      '      '
  4234.         db      '      '
  4235.         db      '„ «ìè¥'
  4236.         db      '’ ¡«¨æ'
  4237.         db      '      '
  4238.         db      '      '
  4239.         db      '      '
  4240.         db      '      '
  4241. ; Ctrl
  4242.         db      '      '
  4243.         db      '      '
  4244.         db      '      '
  4245.         db      '      '
  4246.         db      '      '
  4247.         db      '      '
  4248.         db      '      '
  4249.         db      '      '
  4250.         db      '      '
  4251.         db      '®§¨æ '
  4252.         db      '      '
  4253.         db      '      '
  4254. ; Ctrl+Shift
  4255.         db      '      '
  4256.         db      '      '
  4257.         db      '      '
  4258.         db      '      '
  4259.         db      '      '
  4260.         db      '      '
  4261.         db      '      '
  4262.         db      '      '
  4263.         db      '      '
  4264.         db      '      '
  4265.         db      '      '
  4266.         db      '      '
  4267. ; Alt
  4268.         db      '      '
  4269.         db      '      '
  4270.         db      '      '
  4271.         db      '      '
  4272.         db      '¥ç âì'
  4273.         db      '      '
  4274.         db      ' § ¤ '
  4275.         db      '¥à¥©â'
  4276.         db      '‚¨¤¥® '
  4277.         db      '      '
  4278.         db      'ˆáâà '
  4279.         db      '      '
  4280. ; Alt+Shift
  4281.         db      '      '
  4282.         db      '      '
  4283.         db      '      '
  4284.         db      '      '
  4285.         db      '      '
  4286.         db      '      '
  4287.         db      '      '
  4288.         db      '      '
  4289.         db      'Š®­ä¨£'
  4290.         db      '      '
  4291.         db      '      '
  4292.         db      '      '
  4293. ; Alt+Ctrl
  4294. times 12 db     '      '
  4295. ; Alt+Ctrl+Shift
  4296. times 12 db     '      '
  4297. else
  4298. ; No modificators
  4299.         db      'Help  '
  4300.         db      'Unwrap'
  4301.         db      'Quit  '
  4302.         db      'Hex   '
  4303.         db      '      '
  4304.         db      'Edit  '
  4305.         db      'Search'
  4306. keybar_cp:
  4307.         db      'cp1251'
  4308.         db      '      '
  4309.         db      'Quit  '
  4310.         db      'Plugin'
  4311.         db      'Screen'
  4312. ; Shift
  4313.         db      '      '
  4314.         db      'WWrap '
  4315.         db      '      '
  4316.         db      '      '
  4317.         db      '      '
  4318.         db      '      '
  4319.         db      'Next  '
  4320.         db      'Table '
  4321.         db      '      '
  4322.         db      '      '
  4323.         db      '      '
  4324.         db      '      '
  4325. ; Ctrl
  4326.         db      '      '
  4327.         db      '      '
  4328.         db      '      '
  4329.         db      '      '
  4330.         db      '      '
  4331.         db      '      '
  4332.         db      '      '
  4333.         db      '      '
  4334.         db      '      '
  4335.         db      'GoFile'
  4336.         db      '      '
  4337.         db      '      '
  4338. ; Ctrl+Shift
  4339.         db      '      '
  4340.         db      '      '
  4341.         db      '      '
  4342.         db      '      '
  4343.         db      '      '
  4344.         db      '      '
  4345.         db      '      '
  4346.         db      '      '
  4347.         db      '      '
  4348.         db      '      '
  4349.         db      '      '
  4350.         db      '      '
  4351. ; Alt
  4352.         db      '      '
  4353.         db      '      '
  4354.         db      '      '
  4355.         db      '      '
  4356.         db      'Print '
  4357.         db      '      '
  4358.         db      'Prev  '
  4359.         db      'Goto  '
  4360.         db      'Video '
  4361.         db      '      '
  4362.         db      'ViewHs'
  4363.         db      '      '
  4364. ; Alt+Shift
  4365.         db      '      '
  4366.         db      '      '
  4367.         db      '      '
  4368.         db      '      '
  4369.         db      '      '
  4370.         db      '      '
  4371.         db      '      '
  4372.         db      '      '
  4373.         db      'Config'
  4374.         db      '      '
  4375.         db      '      '
  4376.         db      '      '
  4377. ; Alt+Ctrl
  4378. times 12 db     '      '
  4379. ; Alt+Ctrl+Shift
  4380. times 12 db     '      '
  4381. end if
  4382.  
  4383.         align   4
  4384. cur_width       dd      80
  4385. cur_height      dd      25
  4386. saved_width     dd      -1
  4387. saved_height    dd      -1
  4388. fill_width      dd      0
  4389. fill_height     dd      0
  4390. max_width = 256
  4391. max_height = 256
  4392. console_data_ptr dd     0
  4393.  
  4394. cursor_x        dd      -1
  4395. cursor_y        dd      -1
  4396. old_cursor_x    dd      -1
  4397. old_cursor_y    dd      -1
  4398.  
  4399. active_panel    dd      panel1_data
  4400.  
  4401. console_colors  dd      0x000000, 0x000080, 0x008000, 0x008080
  4402.                 dd      0x800000, 0x800080, 0x808000, 0xC0C0C0
  4403.                 dd      0x808080, 0x0000FF, 0x00FF00, 0x00FFFF
  4404.                 dd      0xFF0000, 0xFF00FF, 0xFFFF00, 0xFFFFFF
  4405.  
  4406. compare_fns     dd      compare_name
  4407.                 dd      compare_name_rev
  4408.                 dd      compare_ext
  4409.                 dd      compare_ext_rev
  4410.                 dd      compare_modified
  4411.                 dd      compare_modified_rev
  4412.                 dd      compare_size
  4413.                 dd      compare_size_rev
  4414.                 dd      compare_unordered
  4415.                 dd      compare_unordered_rev
  4416.                 dd      compare_created
  4417.                 dd      compare_created_rev
  4418.                 dd      compare_accessed
  4419.                 dd      compare_accessed_rev
  4420.  
  4421. ctrlkey_tests   dd      ctrlkey_test0
  4422.                 dd      ctrlkey_test1
  4423.                 dd      ctrlkey_test2
  4424.                 dd      ctrlkey_test3
  4425.                 dd      ctrlkey_test4
  4426. ctrlkey_tests_num = 5
  4427.  
  4428. virtual at 0
  4429. screen_vtable:
  4430.         .OnRedraw       dd      ?
  4431.         .OnKey          dd      ?
  4432.         .keybar         dd      ?
  4433.         .getname        dd      ?
  4434. end virtual
  4435.  
  4436. panels_vtable:
  4437.         dd      panels_OnRedraw
  4438.         dd      panels_OnKey
  4439.         dd      keybar_panels
  4440.         dd      panels_getname
  4441.  
  4442. viewer_vtable:
  4443.         dd      viewer_OnRedraw
  4444.         dd      viewer_OnKey
  4445.         dd      keybar_viewer
  4446.         dd      viewer_getname
  4447.  
  4448. ; additions to this table require changes in tools.inc::get_error_msg
  4449. errors1:
  4450.         dd      error0msg
  4451.         dd      error1msg
  4452.         dd      error2msg
  4453.         dd      error3msg
  4454.         dd      error4msg
  4455.         dd      error5msg
  4456.         dd      error6msg
  4457.         dd      error7msg
  4458.         dd      error8msg
  4459.         dd      error9msg
  4460.         dd      error10msg
  4461.         dd      error11msg
  4462. errors2:
  4463.         dd      error30msg
  4464.         dd      error31msg
  4465.         dd      error32msg
  4466.  
  4467. encodings:
  4468. .cp866 = 0
  4469. .cp1251 = 1
  4470.  
  4471. .names:
  4472.         db      'cp866   '
  4473.         db      'cp1251  '
  4474.  
  4475. .tables:
  4476. ; cp866 - trivial map
  4477.         times 128 db %+127
  4478. ; cp1251
  4479.         db      0x3F,0x3F,0x27,0x3F,0x22,0x3A,0xC5,0xD8,0x3F,0x25,0x3F,0x3C,0x3F,0x3F,0x3F,0x3F
  4480.         db      0x3F,0x27,0x27,0x22,0x22,0x07,0x2D,0x2D,0x3F,0x54,0x3F,0x3E,0x3F,0x3F,0x3F,0x3F
  4481.         db      0xFF,0xF6,0xF7,0x3F,0xFD,0x3F,0xB3,0x15,0xF0,0x63,0xF2,0x3C,0xBF,0x2D,0x52,0xF4
  4482.         db      0xF8,0x2B,0x49,0x69,0x3F,0xE7,0x14,0xFA,0xF1,0xFC,0xF3,0x3E,0x3F,0x3F,0x3F,0xF5
  4483.         times 0x30 db %-1+0x80
  4484.         times 0x10 db %-1+0xE0
  4485.  
  4486. active_screen   dd      0
  4487. tabsize         dd      8
  4488.  
  4489. ascii2scan:
  4490.         times 32 db 0
  4491.         db      0x39,0x02,0x03,0x04,0x05,0x06,0x08,0x28,0x0A,0x0B,0x09,0x0D,0x33,0x0C,0x34,0x35
  4492.         db      0x0B,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x27,0x27,0x33,0x0D,0x34,0x35
  4493.         db      0x03,0x1E,0x30,0x2E,0x20,0x12,0x21,0x22,0x23,0x17,0x24,0x25,0x26,0x32,0x31,0x18
  4494.         db      0x19,0x10,0x13,0x1F,0x14,0x16,0x2F,0x11,0x2D,0x15,0x2C,0x1A,0x2B,0x1B,0x07,0x0C
  4495.         db      0x29,0x1E,0x30,0x2E,0x20,0x12,0x21,0x22,0x23,0x17,0x24,0x25,0x26,0x32,0x31,0x18
  4496.         db      0x19,0x10,0x13,0x1F,0x14,0x16,0x2F,0x11,0x2D,0x15,0x2C,0x1A,0x2B,0x1B,0x29,0x00
  4497.         db      0x21,0x33,0x20,0x16,0x26,0x14,0x27,0x19,0x30,0x10,0x13,0x25,0x2F,0x15,0x24,0x22
  4498.         db      0x23,0x2E,0x31,0x12,0x1E,0x1A,0x11,0x2D,0x17,0x18,0x1B,0x1F,0x32,0x28,0x34,0x2C
  4499.         db      0x21,0x33,0x20,0x16,0x26,0x14,0x27,0x19,0x30,0x10,0x13,0x25,0x2F,0x15,0x24,0x22
  4500.         times 48 db 0
  4501.         db      0x23,0x2E,0x31,0x12,0x1E,0x1A,0x11,0x2D,0x17,0x18,0x1B,0x1F,0x32,0x28,0x34,0x2C
  4502.         db      0x29,0x29,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
  4503.  
  4504. ; Š« ¢¨è­ë¥ á®ç¥â ­¨ï
  4505. ; db scancode, reserved
  4506. ; dw ctrlstate
  4507. ; dd handler
  4508. ; ctrlstate: ¬« ¤è¨¥ 4 ¡¨â  - ¤«ï Shift, á«¥¤ãî騥 - ¤«ï Ctrl, á«¥¤ãî騥 - ¤«ï Alt
  4509. ; 0 = ­¨ ®¤­  ª« ¢¨è  ­¥ ­ ¦ â 
  4510. ; 1 = ஢­® ®¤­  ­ ¦ â 
  4511. ; 2 = ®¡¥ ­ ¦ âë
  4512. ; 3 = «¥¢ ï ­ ¦ â , ¯à ¢ ï ­¥â
  4513. ; 4 = ¯à ¢ ï ­ ¦ â , «¥¢ ï ­¥â
  4514. panels_ctrlkeys:
  4515.         dw      0x48, 0
  4516.         dd      panels_OnKey.up
  4517.         dw      0x50, 0
  4518.         dd      panels_OnKey.down
  4519.         dw      0x4B, 0
  4520.         dd      panels_OnKey.left
  4521.         dw      0x4D, 0
  4522.         dd      panels_OnKey.right
  4523.         dw      0xF, 0
  4524.         dd      panels_OnKey.tab
  4525.         dw      0x47, 0
  4526.         dd      panels_OnKey.home
  4527.         dw      0x4F, 0
  4528.         dd      panels_OnKey.end
  4529.         dw      0x1C, 0
  4530.         dd      panels_OnKey.enter
  4531.         dw      0x3D, 0
  4532.         dd      panels_OnKey.f3
  4533.         dw      0x3F, 0
  4534.         dd      panels_OnKey.f5
  4535.         dw      0x3F, 1
  4536.         dd      panels_OnKey.shift_f5
  4537.         dw      0x42, 0
  4538.         dd      panels_OnKey.f8
  4539.         dw      0x43, 0x100
  4540.         dd      alt_f9
  4541.         dw      0x44, 0
  4542.         dd      exit
  4543.         dw      0x5D, 0
  4544.         dd      panels_OnKey.menu
  4545. repeat 9-3+1
  4546.         dw      0x3D+%-1, 0x10
  4547.         dd      panels_OnKey.ctrl_f39
  4548. end repeat
  4549.         dw      0x3B, 0x100
  4550.         dd      panels_OnKey.alt_f12
  4551.         dw      0x3C, 0x100
  4552.         dd      panels_OnKey.alt_f12
  4553.         dw      0x58, 0
  4554.         dd      F12
  4555.         dw      0x13, 0x10
  4556.         dd      panels_OnKey.ctrl_r
  4557.         db      0
  4558.  
  4559. viewer_ctrlkeys:
  4560.         dw      1, 0
  4561.         dd      viewer_OnKey.exit
  4562.         dw      0x51, 0
  4563.         dd      viewer_OnKey.pgdn
  4564.         dw      0x49, 0
  4565.         dd      viewer_OnKey.pgup
  4566.         dw      0x50, 0
  4567.         dd      viewer_OnKey.down
  4568.         dw      0x48, 0
  4569.         dd      viewer_OnKey.up
  4570.         dw      0x4B, 0
  4571.         dd      viewer_OnKey.left
  4572.         dw      0x4B, 0x10
  4573.         dd      viewer_OnKey.ctrl_left
  4574.         dw      0x4B, 0x11
  4575.         dd      viewer_OnKey.ctrl_shift_left
  4576.         dw      0x4C, 0
  4577.         dd      viewer_OnKey.exit
  4578.         dw      0x4D, 0
  4579.         dd      viewer_OnKey.right
  4580.         dw      0x4D, 0x10
  4581.         dd      viewer_OnKey.ctrl_right
  4582.         dw      0x4D, 0x11
  4583.         dd      viewer_OnKey.ctrl_shift_right
  4584.         dw      0x3C, 0
  4585.         dd      viewer_OnKey.f2
  4586.         dw      0x3D, 0
  4587.         dd      viewer_OnKey.exit
  4588.         dw      0x3E, 0
  4589.         dd      viewer_OnKey.f4
  4590.         dw      0x42, 0
  4591.         dd      viewer_OnKey.f8
  4592.         dw      0x44, 0
  4593.         dd      viewer_OnKey.exit
  4594.         dw      0x47, 0
  4595.         dd      viewer_OnKey.home
  4596.         dw      0x4F, 0
  4597.         dd      viewer_OnKey.end
  4598.         dw      0x58, 0
  4599.         dd      F12
  4600.         dw      0x43, 0x100
  4601.         dd      alt_f9
  4602.         db      0
  4603.  
  4604. dirinfo:
  4605.                 dd      1
  4606. .first          dd      0
  4607.                 dd      0
  4608. .size           dd      300
  4609. .dirdata        dd      0
  4610.                 db      0
  4611. .name           dd      0
  4612.  
  4613. readinfo:
  4614.                 dd      0
  4615. .first          dq      0
  4616. .size           dd      0
  4617. .data           dd      0
  4618.                 db      0
  4619. .name           dd      0
  4620.  
  4621. writeinfo:
  4622. .code           dd      2
  4623. .first          dq      0
  4624. .size           dd      0
  4625. .data           dd      0
  4626.                 db      0
  4627. .name           dd      0
  4628.  
  4629. attrinfo:
  4630.                 dd      5
  4631.                 dd      0
  4632.                 dd      0
  4633.                 dd      0
  4634.                 dd      .attr
  4635.                 db      0
  4636. .name           dd      0
  4637.  
  4638. delinfo:
  4639.                 dd      8
  4640.                 dd      0
  4641.                 dd      0
  4642.                 dd      0
  4643.                 dd      0
  4644.                 db      0
  4645.                 dd      execdata
  4646.  
  4647. if lang eq ru
  4648. compare_names   db      '¨ˆà¬Œ €­á‘¤„'
  4649. else
  4650. compare_names   db      'nNxXmMsSuUcCaA'
  4651. end if
  4652.  
  4653. ; ‡¤¥áì ­ ç¨­ îâáï ª®­ä¨£ãà æ¨®­­ë¥ ¤ ­­ë¥ - ¢ ⥪ã饩 ॠ«¨§ æ¨¨ ®­¨ § è¨âë ¢ ¡¨­ à­¨ª
  4654.  
  4655. ;  ­¥«ì
  4656. panel_normal_color      db      1Bh
  4657. panel_border_color      db      1Bh
  4658. panel_cursor_color      db      30h
  4659. panel_header_color      db      1Bh
  4660. panel_active_header_color db    30h
  4661. column_header_color     db      1Eh
  4662. panel_nscreens_color    db      0Bh
  4663. ; „¨ «®£¨
  4664. dialog_colors:
  4665. dialog_main_color       db      70h
  4666. dialog_border_color     db      70h
  4667. dialog_header_color     db      70h
  4668. dialog_edit_color       db      30h
  4669. dialog_unmodified_edit_color db 38h
  4670. dialog_normal_btn_color db      70h
  4671. dialog_selected_btn_color db    30h
  4672. ; à¥¤ã¯à¥¦¤¥­¨ï ¨ ®è¨¡ª¨
  4673. warning_colors:
  4674. ; !!! ¤®«¦­ë ¡ëâì ⥠¦¥ ¯®«ï ¨ ¢ ⮬ ¦¥ ¯®à浪¥, çâ® ¨ ¤«ï ®¡ëç­ëå ¤¨ «®£®¢ !!!
  4675. warning_main_color      db      4Fh
  4676. warning_border_color    db      4Fh
  4677. warning_header_color    db      4Fh
  4678. warning_edit_color      db      30h
  4679. warning_unmodified_edit_color db 38h
  4680. warning_normal_btn_color db     4Fh
  4681. warning_selected_btn_color db   70h
  4682. ; Œ¥­î
  4683. menu_normal_color       db      3Fh
  4684. menu_selected_color     db      0Fh
  4685. menu_highlight_color    db      3Eh
  4686. menu_selected_highlight_color db 0Eh
  4687. menu_border_color       db      3Fh
  4688. menu_header_color       db      3Fh
  4689. menu_scrollbar_color    db      3Fh
  4690. ; ‹¨­¥©ª  ª« ¢¨è
  4691. keybar_number_color     db      7
  4692. keybar_name_color       db      30h
  4693. keybar_bgr_color        db      7
  4694. ; Š®¬ ­¤­ ï áâப 
  4695. cmdbar_normal_color     db      7
  4696. cmdbar_prefix_color     db      7
  4697. ; à®á¬®âà騪
  4698. view_normal_color       db      1Bh
  4699. view_status_color       db      30h
  4700. view_arrows_color       db      1Eh
  4701.  
  4702. ; ®¤á¢¥âª  ä ©«®¢
  4703. highlight_num_groups    dd      10
  4704. highlight_groups        dd      highlight_group0
  4705.                 dd      highlight_group1
  4706.                 dd      highlight_group2
  4707.                 dd      highlight_group3
  4708.                 dd      highlight_group4
  4709.                 dd      highlight_group5
  4710.                 dd      highlight_group6
  4711.                 dd      highlight_group7
  4712.                 dd      highlight_group8
  4713.                 dd      highlight_group9
  4714.  
  4715. ; ”®à¬ â ®¯¨á ­¨ï £àã¯¯ë ¯®¤á¢¥âª¨:
  4716. virtual at 0
  4717. highlight:
  4718.         .NormalColor            db ?
  4719.         .CursorColor            db ?
  4720.         .IncludeAttributes      db ?
  4721.         .Mask:                  ; ASCIIZ-string
  4722. end virtual
  4723.  
  4724. ; all highlight masks must be in lowercase!
  4725. highlight_group0:
  4726.         db      13h
  4727.         db      38h
  4728.         db      2
  4729.         db      '*',0
  4730. highlight_group1:
  4731.         db      13h
  4732.         db      38h
  4733.         db      4
  4734.         db      '*',0
  4735. highlight_group2:
  4736.         db      1Fh
  4737.         db      3Fh
  4738.         db      10h
  4739.         db      '*|..',0
  4740. highlight_group3:
  4741.         db      0
  4742.         db      0
  4743.         db      10h
  4744.         db      '..',0
  4745. highlight_group4:
  4746.         db      1Ah
  4747.         db      3Ah
  4748.         db      0
  4749.         db      '*.exe,*.com,*.bat,*.cmd',0
  4750. highlight_group5:
  4751.         db      1Ah
  4752.         db      3Ah
  4753.         db      0
  4754.         db      '*|*.*',0
  4755. highlight_group6:
  4756.         db      1Dh
  4757.         db      3Dh
  4758.         db      0
  4759.         db      '*.rar,*.zip,*.[zj],*.[bg7]z,*.[bg]zip,*.tar,*.t[ag]z,*.ar[cj],*.r[0-9][0-9],'
  4760.         db      '*.a[0-9][0-9],*.bz2,*.cab,*.msi,*.jar,*.lha,*.lzh,*.ha,*.ac[bei],*.pa[ck],'
  4761.         db      '*.rk,*.cpio,*.rpm,*.zoo,*.hqx,*.sit,*.ice,*.uc2,*.ain,*.imp,*.777,*.ufa,*.boa,'
  4762.         db      '*.bs[2a],*.sea,*.hpk,*.ddi,*.x2,*.rkv,*.[lw]sz,*.h[ay]p,*.lim,*.sqz,*.chz',0
  4763. highlight_group7:
  4764.         db      16h
  4765.         db      36h
  4766.         db      0
  4767.         db      '*.bak,*.tmp',0
  4768. highlight_group8:
  4769.         db      17h
  4770.         db      37h
  4771.         db      0
  4772.         db      '*.asm,*.inc',0
  4773. highlight_group9:
  4774.         db      1Fh
  4775.         db      3Fh
  4776.         db      10h
  4777.         db      '*',0
  4778.  
  4779. associations:
  4780.         dd      aAsm, tinypad, AsmMenu
  4781.         dd      aInc, tinypad, 0
  4782.         dd      aTxt, tinypad, 0
  4783.         dd      aJpg, jpegview, 0
  4784.         dd      aJpeg, jpegview, 0
  4785.         dd      aGif, gifview, GifMenu
  4786.         dd      aWav, ac97, 0
  4787.         dd      aMp3, ac97, 0
  4788.         dd      aMid, midamp, 0
  4789.         dd      aBmp, mv, BmpMenu
  4790.         dd      aPng, archer, 0
  4791.         dd      aRtf, rtfread, 0
  4792.         dd      a3ds, view3ds, 0
  4793.         dd      aLif, life2, 0
  4794. associations_end:
  4795.  
  4796. aAsm db 'asm',0
  4797. aInc db 'inc',0
  4798. aTxt db 'txt',0
  4799. tinypad db '/rd/1/TinyPad',0
  4800.  
  4801. aJpg db 'jpg',0
  4802. aJpeg db 'jpeg',0
  4803. jpegview db '/rd/1/JpegView',0
  4804.  
  4805. aGif db 'gif',0
  4806. gifview db '/rd/1/GIFVIEW',0
  4807.  
  4808. aWav db 'wav',0
  4809. aMp3 db 'mp3',0
  4810. ac97 db '/rd/1/AC97SND',0
  4811.  
  4812. aMid db 'mid',0
  4813. midamp db '/rd/1/MIDAMP',0
  4814.  
  4815. aBmp db 'bmp',0
  4816. mv db '/rd/1/MV',0
  4817.  
  4818. aPng db 'png',0
  4819. archer db '/rd/1/@rcher',0
  4820.  
  4821. aRtf db 'rtf',0
  4822. rtfread db '/rd/1/RtfRead',0
  4823.  
  4824. a3ds db '3ds',0
  4825. view3ds db '/rd/1/3d/view3ds',0
  4826.  
  4827. aLif db 'lif',0
  4828. life2 db '/rd/1/demos/life2',0
  4829.  
  4830. AsmMenu:
  4831.         dd      aEdit, tinypad
  4832.         dd      aCompile, fasm
  4833.         dd      0
  4834. BmpMenu:
  4835.         dd      aView, mv
  4836.         dd      aEdit, animage
  4837.         dd      0
  4838. GifMenu:
  4839.         dd      aView, gifview
  4840.         dd      aEdit, animage
  4841.         dd      0
  4842.  
  4843. if lang eq en
  4844. aView   db      '&View',0
  4845. aCompile db     '&Compile',0
  4846. aEdit   db      '&Edit',0
  4847. else
  4848. aView   db      '&à®á¬®âà',0
  4849. aCompile db     '&Š®¬¯¨«¨à®¢ âì',0
  4850. aEdit   db      '&¥¤ ªâ®à',0
  4851. end if
  4852.  
  4853. fasm    db      '/rd/1/develop/fasm',0
  4854. animage db      '/rd/1/animage',0
  4855.  
  4856. bConfirmDelete  db      1
  4857.  
  4858. ; ‡¤¥áì § ª ­ç¨¢ îâáï ª®­ä¨£ãà æ¨®­­ë¥ ¤ ­­ë¥
  4859.  
  4860. bWasE0          db      0
  4861. ctrlstate       db      0
  4862.  
  4863. align   4
  4864. ; ‘®®¡é¥­¨¥ ® ®¡«®¬¥ ¯à¨ ¢ë¤¥«¥­¨¨ ¯ ¬ïâ¨
  4865. nomem_dlgdata:
  4866.         dd      2
  4867.         dd      -1
  4868.         dd      -1
  4869.         dd      12
  4870.         dd      2
  4871.         dd      1
  4872.         dd      1
  4873.         dd      aError
  4874.         rb      4
  4875.         dd      0
  4876.         dd      0
  4877.         dd      2
  4878. ; áâப  "No memory"
  4879.         dd      1
  4880.         dd      1,0,10,0
  4881.         dd      aNoMemory
  4882.         dd      1
  4883. ; ª­®¯ª  "Ok"
  4884.         dd      2
  4885.         dd      4,1,7,1
  4886.         dd      aOk
  4887.         dd      0xD
  4888.  
  4889. f8_confirm_dlgdata:
  4890.         dd      1
  4891. .x      dd      -1
  4892. .y      dd      -1
  4893. .width  dd      ?
  4894. .height dd      3
  4895.         dd      4
  4896.         dd      2
  4897.         dd      aDeleteCaption
  4898. .main_color db ?
  4899. .border_color db ?
  4900. .header_color db ?
  4901.         db      0
  4902.         dd      0
  4903.         dd      0
  4904.         dd      4
  4905. ; áâப  "‚ë å®â¨â¥ 㤠«¨âì ..."
  4906.         dd      1
  4907.         dd      1,0
  4908. .width2 dd      ?
  4909.         dd      0
  4910.         dd      aConfirmDeleteTextBuf
  4911.         dd      1
  4912. ; áâப  á ¨¬¥­¥¬ ä ©« /¯ ¯ª¨
  4913.         dd      1
  4914.         dd      1,1
  4915. .width3 dd      ?
  4916.         dd      1
  4917. .name   dd      ?
  4918.         dd      1
  4919. ; ª­®¯ª  "㤠«¨âì"
  4920. .del_btn:
  4921.         dd      2
  4922. .del_x1 dd      ?
  4923.         dd      2
  4924. .del_x2 dd      ?
  4925.         dd      2
  4926.         dd      aDelete
  4927. .flags1 dd      4
  4928. ; ª­®¯ª  "®â¬¥­¨âì"
  4929.         dd      2
  4930. .cnl_x1 dd      ?
  4931.         dd      2
  4932. .cnl_x2 dd      ?
  4933.         dd      2
  4934.         dd      aCancel
  4935. .flags2 dd      0
  4936.  
  4937. ; ¤¨ «®£ ª®¯¨à®¢ ­¨ï
  4938. copy_dlgdata:
  4939.         dd      1
  4940. .x      dd      -1
  4941. .y      dd      -1
  4942. .width  dd      ?
  4943. .height dd      4
  4944.         dd      4
  4945.         dd      2
  4946.         dd      aCopyCaption
  4947. .main_color db ?
  4948. .border_color db ?
  4949. .header_color db ?
  4950.         db      0
  4951.         dd      0
  4952.         dd      0
  4953.         dd      4
  4954. ; áâப  'Š®¯¨à®¢ âì "%s" ¢:'
  4955.         dd      1
  4956.         dd      1,0
  4957. .width2 dd      ?
  4958.         dd      0
  4959.         dd      CopySourceTextBuf
  4960.         dd      0
  4961. ; ¯®«¥ । ªâ¨à®¢ ­¨ï á ¨¬¥­¥¬ ä ©« /¯ ¯ª¨ ­ §­ ç¥­¨ï
  4962.         dd      3
  4963.         dd      1,1
  4964. .width3 dd      ?
  4965.         dd      1
  4966.         dd      CopyDestEditBuf
  4967. .flags0 dd      0
  4968. ; ª­®¯ª  "ª®¯¨à®¢ âì"
  4969. .copy_btn:
  4970.         dd      2
  4971. .copy_x1 dd     ?
  4972.         dd      3
  4973. .copy_x2 dd     ?
  4974.         dd      3
  4975.         dd      aCopy
  4976. .flags1 dd      18h
  4977. ; ª­®¯ª  "®â¬¥­¨âì"
  4978.         dd      2
  4979. .cnl_x1 dd      ?
  4980.         dd      3
  4981. .cnl_x2 dd      ?
  4982.         dd      3
  4983.         dd      aCancelB
  4984. .flags2 dd      8
  4985.  
  4986.  
  4987. if lang eq ru
  4988. aDeleteCaption          db      '“¤ «¥­¨¥',0
  4989. aConfirmDeleteText      db      '‚ë å®â¨â¥ 㤠«¨âì ',0
  4990. aDeleteFolder           db      '¯ ¯ªã',0
  4991. aConfirmDeleteTextMax = $ - aConfirmDeleteText - 2
  4992. aDeleteFile             db      'ä ©«',0
  4993. aDelete                 db      ' “¤ «¨âì ',0
  4994. aDeleteLength = $ - aDelete - 1
  4995. aCancel                 db      ' Žâ¬¥­¨âì ',0
  4996. aCancelLength = $ - aCancel - 1
  4997. aCancelB                db      '[ Žâ¬¥­¨âì ]',0
  4998. aCancelBLength = $ - aCancelB - 1
  4999. aCopyCaption            db      'Š®¯¨à®¢ ­¨¥',0
  5000. aCopy                   db      '[ Š®¯¨à®¢ âì ]',0
  5001. aCopyLength = $ - aCopy - 1
  5002. aCopy1                  db      'Š®¯¨à®¢ âì "',0
  5003. aCopy2                  db      '" ¢:',0
  5004. aError                  db      'Žè¨¡ª ',0
  5005. aContinue               db      'à®¤®«¦¨âì',0
  5006. aRetry                  db      '®¢â®à¨âì',0
  5007. error0msg               db      '‘âà ­­®... ¥â ®è¨¡ª¨',0
  5008. error1msg               db      '‘âà ­­®... ¥ ®¯à¥¤¥«¥­  ¡ §  ¨/¨«¨ à §¤¥« ¦ñá⪮£® ¤¨áª ',0
  5009. error2msg               db      '”ã­ªæ¨ï ­¥ ¯®¤¤¥à¦¨¢ ¥âáï ¤«ï ¤ ­­®© ä ©«®¢®© á¨á⥬ë',0
  5010. error3msg               db      '¥¨§¢¥áâ­ ï ä ©«®¢ ï á¨á⥬ ',0
  5011. error4msg               db      '‘âà ­­®... Žè¨¡ª  4',0
  5012. error5msg               db      '” ©« ­¥ ­ ©¤¥­',0
  5013. error6msg               db      '” ©« § ª®­ç¨«áï',0
  5014. error7msg               db      '‘âà ­­®... “ª § â¥«ì ¢­¥ ¯ ¬ï⨠¯à¨«®¦¥­¨ï',0
  5015. error8msg               db      '„¨áª § ¯®«­¥­',0
  5016. error9msg               db      '” ©«®¢ ï áâàãªâãà  à §àã襭 ',0
  5017. error10msg              db      '„®áâ㯠§ ¯à¥éñ­',0
  5018. error11msg              db      'Žè¨¡ª  ãáâனá⢠',0
  5019. error30msg              db      '¥¤®áâ â®ç­® ¯ ¬ïâ¨',0
  5020. error31msg              db      '” ©« ­¥ ï¥âáï ¨á¯®«­ï¥¬ë¬',0
  5021. error32msg              db      '‘«¨èª®¬ ¬­®£® ¯à®æ¥áᮢ',0
  5022. aUnknownError           db      '¥¨§¢¥áâ­ë© ª®¤ ®è¨¡ª¨: ',0
  5023. aCannotReadFolder       db      '¥ ¬®£ã ¯à®ç¨â âì ¯ ¯ªã',0
  5024. else
  5025. aDeleteCaption          db      'Delete',0
  5026. aConfirmDeleteText      db      'Do you wish to delete ',0
  5027. aDeleteFolder           db      'the folder',0
  5028. aConfirmDeleteTextMax = $ - aConfirmDeleteText - 2
  5029. aDeleteFile             db      'the file',0
  5030. aDelete                 db      ' Delete ',0
  5031. aDeleteLength = $ - aDelete - 1
  5032. aCancel                 db      ' Cancel ',0
  5033. aCancelLength = $ - aCancel - 1
  5034. aCancelB                db      '[ Cancel ]',0
  5035. aCancelBLength = $ - aCancelB - 1
  5036. aCopyCaption            db      'Copy',0
  5037. aCopy                   db      '[ Copy ]',0
  5038. aCopyLength = $ - aCopy - 1
  5039. aCopy1                  db      'Copy "',0
  5040. aCopy2                  db      '" to:',0
  5041. aError                  db      'Error',0
  5042. aContinue               db      'Continue',0
  5043. aRetry                  db      'Retry',0
  5044. error0msg               db      'Strange... No error',0
  5045. error1msg               db      'Strange... Hard disk base and/or partition not defined',0
  5046. error2msg               db      'The file system does not support this function',0
  5047. error3msg               db      'Unknown file system',0
  5048. error4msg               db      'Strange... Error 4',0
  5049. error5msg               db      'File not found',0
  5050. error6msg               db      'End of file',0
  5051. error7msg               db      'Strange... Pointer lies outside of application memory',0
  5052. error8msg               db      'Disk is full',0
  5053. error9msg               db      'File structure is destroyed',0
  5054. error10msg              db      'Access denied',0
  5055. error11msg              db      'Device error',0
  5056. error30msg              db      'Not enough memory',0
  5057. error31msg              db      'File is not executable',0
  5058. error32msg              db      'Too many processes',0
  5059. aUnknownError           db      'Unknown error code: ',0
  5060. aCannotReadFolder       db      'Cannot read folder',0
  5061. end if
  5062. aOk                     db      'OK',0
  5063. aNoMemory               db      'No memory!',0
  5064.  
  5065. execinfo:
  5066.         dd      7
  5067.         dd      0
  5068. execparams dd   0
  5069.         dd      0
  5070.         dd      0
  5071.         db      0
  5072. execptr dd      ?
  5073.  
  5074. IncludeIGlobals
  5075.  
  5076. i_end:
  5077.  
  5078. IncludeUGlobals
  5079.  
  5080. execdata rb     1024
  5081.         align   4
  5082. attrinfo.attr   rb      40
  5083.  
  5084. panel1_data:
  5085. panel1_left     dd      ?
  5086. panel1_top      dd      ?
  5087. panel1_width    dd      ?
  5088. panel1_height   dd      ?
  5089. panel1_index    dd      ?
  5090. panel1_start    dd      ?
  5091. panel1_colsz    dd      ?
  5092. panel1_colst    dd      ?
  5093. panel1_sortmode db      ?
  5094.                 rb      3
  5095. panel1_nfa      dd      ?
  5096. panel1_numfiles dd      ?
  5097. panel1_files    dd      ?
  5098. panel1_dir      rb      1024
  5099.  
  5100. panel2_data:
  5101. panel2_left     dd      ?
  5102. panel2_top      dd      ?
  5103. panel2_width    dd      ?
  5104. panel2_height   dd      ?
  5105. panel2_index    dd      ?
  5106. panel2_start    dd      ?
  5107. panel2_colsz    dd      ?
  5108. panel2_colst    dd      ?
  5109. panel2_sortmode db      ?
  5110.                 rb      3
  5111. panel2_nfa      dd      ?
  5112. panel2_numfiles dd      ?
  5113. panel2_files    dd      ?
  5114. panel2_dir      rb      1024
  5115.  
  5116. ;console_data    rb      max_width*max_height*2
  5117.  
  5118. nomem_dlgsavearea       rb      (12+4)*(3+3)*2
  5119.  
  5120. cur_header      rb      max_width
  5121. tmp             dd      ?
  5122.  
  5123. skinh           dd      ?
  5124. std_colors      rd      10
  5125.  
  5126. min_y           dd      ?
  5127. max_y           dd      ?
  5128. min_x           dd      ?
  5129. max_x           dd      ?
  5130. used_width      dd      ?
  5131. used_height     dd      ?
  5132.  
  5133. wnd_width       dd      ?
  5134. wnd_height      dd      ?
  5135.  
  5136. column_left     dd      ?
  5137. column_top      dd      ?
  5138. column_width    dd      ?
  5139. column_height   dd      ?
  5140. column_index    dd      ?
  5141.  
  5142. scrpos          dq      ?
  5143. viewer_right_side dq    ?
  5144.  
  5145. saved_file_name:
  5146. procinfo        rb      1024
  5147. lower_file_name = procinfo + 512
  5148.  
  5149. error_msg       rb      128
  5150.  
  5151. prev_dir        rb      1024
  5152.  
  5153. driveinfo       rb      32+304
  5154. tmpname         rb      32
  5155.  
  5156. screens         dd      ?
  5157. num_screens     dd      ?
  5158. active_screen_vtable dd ?
  5159. active_screen_data dd   ?
  5160.  
  5161. aConfirmDeleteTextBuf   rb      aConfirmDeleteTextMax + 1
  5162. CopySourceTextBuf       rb      512
  5163. CopyDestEditBuf         rb      12+512+1
  5164. .length = $ - CopyDestEditBuf - 9
  5165.  
  5166. align 4
  5167. layout          rb      128
  5168.  
  5169. copy_buffer_size = 32768
  5170. copy_buffer     rb      copy_buffer_size
  5171.  
  5172. ; stack
  5173.         align   4
  5174.         rb      512
  5175. stacktop:
  5176.  
  5177. mem:
  5178.