Subversion Repositories Kolibri OS

Rev

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