Subversion Repositories Kolibri OS

Rev

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

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