Subversion Repositories Kolibri OS

Rev

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

  1. use32
  2.         db      'MENUET01'
  3.         dd      1
  4.         dd      start
  5.         dd      i_end
  6. memsize dd      mem
  7.         dd      stacktop
  8.         dd      0, 0
  9.  
  10. include 'lang.inc'
  11. include 'font.inc'
  12. include 'sort.inc'
  13. include 'kglobals.inc'
  14. include 'memalloc.inc'
  15. include 'dialogs.inc'
  16. include 'viewer.inc'
  17.  
  18. start:
  19.         mov     eax, mem
  20.         call    mf_init
  21.         call    draw_window
  22.         push    66
  23.         pop     eax
  24.         push    1
  25.         pop     ebx
  26.         mov     ecx, ebx
  27.         int     40h     ; set keyboard mode to scancodes
  28.         call    init_console
  29.         mov     esi, def_left_dir
  30.         mov     edi, panel1_dir
  31. @@:
  32.         lodsb
  33.         stosb
  34.         test    al, al
  35.         jnz     @b
  36. @@:
  37.         mov     esi, def_right_dir
  38.         mov     edi, panel2_dir
  39. @@:
  40.         lodsb
  41.         stosb
  42.         test    al, al
  43.         jnz     @b
  44.         mov     eax, 304
  45.         mov     [panel1_nfa], eax
  46.         mov     [panel2_nfa], eax
  47.         mov     [panel1_files], buf1
  48.         mov     [panel2_files], buf2
  49.         mov     [panel1_sortmode], 0    ; sort by name
  50.         mov     [panel2_sortmode], 0
  51.         mov     [num_screens], 1
  52.         mov     eax, 8
  53.         call    mf_alloc
  54.         mov     [screens], eax
  55.         mov     ecx, panels_vtable
  56.         mov     [eax], ecx
  57.         mov     [active_screen_vtable], ecx
  58.         call    draw_keybar
  59.         call    draw_cmdbar
  60.         mov     ebp, panel1_data
  61.         call    read_folder
  62.         call    draw_panel
  63.         mov     ebp, panel2_data
  64.         call    read_folder
  65.         call    draw_panel
  66. event:
  67.         push    10
  68.         pop     eax
  69.         int     40h
  70.         dec     eax
  71.         jz      redraw
  72.         dec     eax
  73.         jz      key
  74. ; button - we have only one button, close
  75. exit:
  76.         or      eax, -1
  77.         int     40h
  78. redraw:
  79.         mov     al, 9
  80.         mov     ebx, procinfo
  81.         or      ecx, -1
  82.         int     40h
  83. ; test if rolled up
  84. ; height of rolled up window is [skinh]+3
  85.         mov     eax, [ebx+46]
  86.         sub     eax, [skinh]
  87.         cmp     eax, 5
  88.         ja      @f
  89.         mov     al, 12
  90.         push    1
  91.         pop     ebx
  92.         int     0x40
  93.         xor     eax, eax
  94. ; ebx, ecx, edi are ignored by function 0 after first redraw
  95.         mov     edx, 0x13000000
  96.         int     0x40
  97.         mov     al, 12
  98.         inc     ebx
  99.         int     0x40
  100.         jmp     event
  101. @@:
  102.         xor     ecx, ecx
  103.         mov     eax, [ebx+42]
  104.         sub     eax, 5*2
  105.         jae     @f
  106.         xor     eax, eax
  107. @@:
  108.         cdq
  109.         mov     esi, font_width
  110.         div     esi
  111.         cmp     eax, 54
  112.         jae     @f
  113.         mov     al, 54
  114.         mov     ch, 1
  115. @@:
  116.         cmp     eax, 255
  117.         jbe     @f
  118.         mov     eax, 255
  119.         mov     ch, 1
  120. @@:
  121.         cmp     eax, [cur_width]
  122.         mov     [cur_width], eax
  123.         setnz   cl
  124.         or      cl, ch
  125.         test    edx, edx
  126.         setnz   ch
  127.         or      cl, ch
  128.         mov     eax, [ebx+46]
  129.         sub     eax, [skinh]
  130.         sub     eax, 5
  131.         jns     @f
  132.         xor     eax, eax
  133. @@:
  134.         cdq
  135.         mov     esi, font_height
  136.         div     esi
  137.         cmp     eax, 8
  138.         jae     @f
  139.         mov     al, 8
  140.         mov     cl, 1
  141. @@:
  142.         cmp     eax, 255
  143.         jbe     @f
  144.         mov     eax, 255
  145.         mov     cl, 1
  146. @@:
  147.         cmp     eax, [cur_height]
  148.         mov     [cur_height], eax
  149.         setnz   ch
  150.         or      cl, ch
  151.         test    edx, edx
  152.         setnz   ch
  153.         test    cx, cx
  154.         jz      @f
  155.         mov     eax, [MemForImage]
  156.         call    mf_free
  157.         and     [MemForImage], 0
  158.         call    init_console
  159.         push    67
  160.         pop     eax
  161.         or      ebx, -1
  162.         or      ecx, -1
  163.         mov     edx, [cur_width]
  164.         imul    edx, font_width
  165.         add     edx, 5*2
  166.         mov     esi, [cur_height]
  167.         imul    esi, font_height
  168.         add     esi, [skinh]
  169.         add     esi, 5
  170.         int     40h
  171.         call    draw_window
  172.         call    draw_keybar
  173.         mov     ebp, [active_screen_data]
  174.         mov     eax, [active_screen_vtable]
  175.         call    dword [eax+screen_vtable.OnRedraw]
  176.         jmp     event
  177. @@:
  178.         call    draw_window
  179.         jmp     event
  180. key:
  181.         mov     al, 2
  182.         int     40h
  183.         test    al, al
  184.         jnz     event
  185.         xchg    al, ah
  186.         cmp     al, 0xE0
  187.         jnz     @f
  188.         mov     [bWasE0], 1
  189.         jmp     event
  190. @@:
  191.         xchg    ah, [bWasE0]
  192.         mov     ebp, [active_screen_data]
  193.         mov     edx, [active_screen_vtable]
  194.         cmp     al, 0x1D
  195.         jz      .ctrl_down
  196.         cmp     al, 0x9D
  197.         jz      .ctrl_up
  198.         cmp     al, 0x2A
  199.         jz      .lshift_down
  200.         cmp     al, 0xAA
  201.         jz      .lshift_up
  202.         cmp     al, 0x36
  203.         jz      .rshift_down
  204.         cmp     al, 0xB6
  205.         jz      .rshift_up
  206.         cmp     al, 0x38
  207.         jz      .alt_down
  208.         cmp     al, 0xB8
  209.         jz      .alt_up
  210.         call    [edx+screen_vtable.OnKey]
  211.         jmp     event
  212. .ctrl_down:
  213.         test    ah, ah
  214.         jnz     .rctrl_down
  215.         or      [ctrlstate], 4
  216.         jmp     .keybar
  217. .rctrl_down:
  218.         or      [ctrlstate], 8
  219.         jmp     .keybar
  220. .ctrl_up:
  221.         test    ah, ah
  222.         jnz     .rctrl_up
  223.         and     [ctrlstate], not 4
  224.         jmp     .keybar
  225. .rctrl_up:
  226.         and     [ctrlstate], not 8
  227. .keybar:
  228.         call    draw_keybar
  229.         call    draw_image
  230. @@:     jmp     event
  231. .lshift_down:
  232. ; ignore E0 2A sequence
  233. ; e.g. arrow keys with NumLock on generate sequence E0 2A E0 xx / E0 xx+80 E0 AA
  234. ; where xx is scancode, so we can safely ignore E0 2A
  235.         test    ah, ah
  236.         jnz     @b
  237.         or      [ctrlstate], 1
  238.         jmp     .keybar
  239. .lshift_up:
  240. ; ignore E0 AA sequence
  241.         test    ah, ah
  242.         jnz     @b
  243.         and     [ctrlstate], not 1
  244.         jmp     .keybar
  245. .rshift_down:
  246.         or      [ctrlstate], 2
  247.         jmp     .keybar
  248. .rshift_up:
  249.         and     [ctrlstate], not 2
  250.         jmp     .keybar
  251. .alt_down:
  252.         test    ah, ah
  253.         jnz     .ralt_down
  254.         or      [ctrlstate], 0x10
  255.         jmp     .keybar
  256. .ralt_down:
  257.         or      [ctrlstate], 0x20
  258.         jmp     .keybar
  259. .alt_up:
  260.         test    ah, ah
  261.         jnz     .ralt_up
  262.         and     [ctrlstate], not 0x10
  263.         jmp     .keybar
  264. .ralt_up:
  265.         and     [ctrlstate], not 0x20
  266.         jmp     .keybar
  267.  
  268. process_ctrl_keys:
  269.         cmp     byte [esi], 0
  270.         jz      .done
  271.         push    ecx
  272.         cmp     al, [esi]
  273.         jz      .check
  274. .cont:
  275.         pop     ecx
  276.         add     esi, 8
  277.         jmp     process_ctrl_keys
  278. .done:
  279.         stc
  280.         ret
  281. .check:
  282.         mov     cl, 0
  283.         call    .check_ctrlkey
  284.         jc      .cont
  285.         mov     cl, 2
  286.         call    .check_ctrlkey
  287.         jc      .cont
  288.         mov     cl, 4
  289.         call    .check_ctrlkey
  290.         jc      .cont
  291.         pop     ecx
  292.         call    dword [esi+4]
  293.         clc
  294.         ret
  295. .check_ctrlkey:
  296.         push    eax edx
  297.         movzx   edx, [ctrlstate]
  298.         shr     edx, cl
  299.         add     cl, cl
  300.         movzx   eax, word [esi+2]
  301.         shr     eax, cl
  302.         and     eax, 15
  303.         cmp     al, ctrlkey_tests_num
  304.         jae     .fail
  305.         xchg    eax, edx
  306.         and     al, 3
  307.         call    [ctrlkey_tests + edx*4]
  308.         cmp     al, 1
  309.         pop     edx eax
  310.         ret
  311. .fail:
  312.         stc
  313.         pop     edx eax
  314.         ret
  315.  
  316. ctrlkey_test0:
  317.         test    al, al
  318.         setz    al
  319.         ret
  320. ctrlkey_test1:
  321.         test    al, al
  322.         setnp   al
  323.         ret
  324. ctrlkey_test2:
  325.         cmp     al, 3
  326.         setz    al
  327.         ret
  328. ctrlkey_test3:
  329.         cmp     al, 1
  330.         setz    al
  331.         ret
  332. ctrlkey_test4:
  333.         cmp     al, 2
  334.         setz    al
  335.         ret
  336.  
  337. ; TODO: add "no memory" error handling
  338. new_screen:
  339.         call    mf_alloc
  340.         test    eax, eax
  341.         jnz     @f
  342.         ret
  343. @@:
  344.         mov     ebp, eax
  345.         mov     ebx, [num_screens]
  346.         inc     ebx
  347.         shl     ebx, 3
  348.         mov     eax, [screens]
  349.         call    mf_realloc
  350.         test    eax, eax
  351.         jnz     @f
  352.         mov     eax, ebp
  353.         call    mf_free
  354.         xor     eax, eax
  355.         ret
  356. @@:
  357.         mov     [screens], eax
  358.         inc     [num_screens]
  359.         mov     [eax+ebx-8], edx
  360.         mov     [eax+ebx-4], ebp
  361.         mov     eax, [num_screens]
  362.         dec     eax
  363.         mov     [active_screen], eax
  364.         mov     [active_screen_vtable], edx
  365.         mov     [active_screen_data], ebp
  366.         jmp     draw_keybar
  367.  
  368. next_screen:
  369.         mov     eax, [active_screen]
  370.         inc     eax
  371.         cmp     eax, [num_screens]
  372.         jnz     @f
  373.         xor     eax, eax
  374. @@:     mov     [active_screen], eax
  375.         jmp     change_screen
  376.  
  377. delete_active_screen:
  378.         mov     edi, [screens]
  379.         mov     eax, [active_screen]
  380.         shl     eax, 3
  381.         add     edi, eax
  382.         push    dword [edi+4]
  383.         lea     esi, [edi+8]
  384.         mov     ecx, [num_screens]
  385.         sub     ecx, [active_screen]
  386.         dec     ecx
  387.         add     ecx, ecx
  388.         rep     movsd
  389.         dec     [num_screens]
  390.         mov     ebx, [num_screens]
  391.         shl     ebx, 3
  392.         mov     eax, [screens]
  393.         call    mf_realloc
  394.         pop     eax
  395.         call    mf_free
  396.         and     [active_screen], 0
  397.  
  398. change_screen:
  399.         pusha
  400.         mov     eax, [active_screen]
  401.         mov     esi, [screens]
  402.         mov     ebp, [esi+eax*8+4]
  403.         mov     eax, [esi+eax*8]
  404.         mov     [active_screen_vtable], eax
  405.         mov     [active_screen_data], ebp
  406.         call    draw_keybar
  407.         call    [eax+screen_vtable.OnRedraw]
  408.         popa
  409.         ret
  410.  
  411. F12:
  412.         mov     eax, [cur_width]
  413.         add     eax, 8
  414.         mov     esi, eax
  415.         mul     [num_screens]
  416.         call    mf_alloc
  417.         test    eax, eax
  418.         jnz     @f
  419.         ret
  420. @@:
  421.         mov     ebx, eax
  422.         mov     edi, eax
  423.         xor     ecx, ecx
  424. .next:
  425.         xor     eax, eax
  426.         stosd
  427.         inc     ecx
  428.         cmp     ecx, [num_screens]
  429.         jz      @f
  430.         lea     eax, [edi+esi-4]
  431.         mov     dword [edi-4], eax
  432. @@:
  433.         xor     eax, eax
  434.         stosd
  435.         dec     ecx
  436.         jz      @f
  437.         lea     eax, [edi-8]
  438.         sub     eax, esi
  439.         mov     dword [edi-4], eax
  440. @@:
  441.         mov     al, '&'
  442.         stosb
  443.         cmp     ecx, 36
  444.         jae     .noletter
  445.         lea     eax, [ecx+'0']
  446.         cmp     al, '9'
  447.         jbe     @f
  448.         add     al, 7
  449. @@:
  450.         stosb
  451.         mov     al, '.'
  452.         stosb
  453.         jmp     .letter_done
  454. .noletter:
  455.         mov     al, ' '
  456.         stosb
  457.         stosb
  458. .letter_done:
  459.         mov     al, ' '
  460.         stosb
  461.         pushad
  462.         mov     eax, [screens]
  463.         mov     ebp, [eax+ecx*8+4]
  464.         mov     eax, [eax+ecx*8]
  465.         mov     ecx, [cur_width]
  466.         sub     ecx, 12
  467.         call    [eax + screen_vtable.getname]
  468.         popad
  469.         sub     edi, 4
  470.         add     edi, [cur_width]
  471.         inc     ecx
  472.         cmp     ecx, [num_screens]
  473.         jb      .next
  474.         mov     eax, [active_screen]
  475.         mul     esi
  476.         add     eax, ebx
  477.         push    1
  478.         push    aScreens
  479.         push    eax
  480.         call    menu
  481.         cmp     eax, -1
  482.         jz      @f
  483.         sub     eax, ebx
  484.         div     esi
  485.         mov     [active_screen], eax
  486. @@:
  487.         mov     eax, ebx
  488.         call    mf_free
  489.         jmp     change_screen
  490.  
  491. panels_OnKey:
  492.         mov     ebp, [active_panel]
  493.         mov     ecx, [ebp + panel1_index - panel1_data]
  494.         mov     edx, [ebp + panel1_start - panel1_data]
  495.         mov     ebx, [ebp + panel1_colst - panel1_data]
  496.         add     ebx, edx
  497.         mov     esi, panels_ctrlkeys
  498.         jmp     process_ctrl_keys
  499. .ret:
  500.         ret
  501. .up:
  502.         jecxz   .ret
  503.         dec     ecx
  504.         mov     [ebp + panel1_index - panel1_data], ecx
  505.         cmp     ecx, edx
  506.         jae     .done_redraw
  507.         mov     [ebp + panel1_start - panel1_data], ecx
  508. .done_redraw:
  509. ;        call    draw_panel
  510. ;        ret
  511.         jmp     draw_panel
  512. .down:
  513.         inc     ecx
  514.         cmp     ecx, [ebp + panel1_numfiles - panel1_data]
  515.         jae     .ret
  516.         mov     [ebp + panel1_index - panel1_data], ecx
  517.         cmp     ecx, ebx
  518.         jb      .done_redraw
  519.         sub     ecx, [ebp + panel1_colst - panel1_data]
  520.         inc     ecx
  521.         mov     [ebp + panel1_start - panel1_data], ecx
  522.         jmp     .done_redraw
  523. .left:
  524.         jecxz   .ret
  525.         sub     ecx, [ebp + panel1_colsz - panel1_data]
  526.         jae     @f
  527.         xor     ecx, ecx
  528. @@:
  529.         mov     [ebp + panel1_index - panel1_data], ecx
  530.         cmp     ecx, edx
  531.         jae     .done_redraw
  532.         sub     edx, [ebp + panel1_colsz - panel1_data]
  533.         jae     @f
  534.         xor     edx, edx
  535. @@:
  536.         mov     [ebp + panel1_start - panel1_data], edx
  537.         jmp     .done_redraw
  538. .right:
  539.         add     ecx, [ebp + panel1_colsz - panel1_data]
  540.         cmp     ecx, [ebp + panel1_numfiles - panel1_data]
  541.         jb      @f
  542.         mov     ecx, [ebp + panel1_numfiles - panel1_data]
  543.         dec     ecx
  544. @@:
  545.         mov     [ebp + panel1_index - panel1_data], ecx
  546.         cmp     ecx, ebx
  547.         jb      .done_redraw
  548.         add     ebx, [ebp + panel1_colsz - panel1_data]
  549.         cmp     ebx, [ebp + panel1_numfiles - panel1_data]
  550.         jbe     @f
  551.         mov     ebx, [ebp + panel1_numfiles - panel1_data]
  552. @@:
  553.         sub     ebx, [ebp + panel1_colst - panel1_data]
  554.         jae     @f
  555.         xor     ebx, ebx
  556. @@:
  557.         mov     [ebp + panel1_start - panel1_data], ebx
  558.         jmp     .done_redraw
  559. .tab:
  560.         xor     [active_panel], panel1_data xor panel2_data
  561.         call    draw_cmdbar
  562.         call    draw_panel
  563.         mov     ebp, [active_panel]
  564.         jmp     .done_redraw
  565. .home:
  566.         and     [ebp + panel1_start - panel1_data], 0
  567.         and     [ebp + panel1_index - panel1_data], 0
  568.         jmp     .done_redraw
  569. .end:
  570.         mov     eax, [ebp + panel1_numfiles - panel1_data]
  571.         dec     eax
  572.         mov     [ebp + panel1_index - panel1_data], eax
  573.         inc     eax
  574.         sub     eax, [ebp + panel1_colst - panel1_data]
  575.         jae     @f
  576.         xor     eax, eax
  577. @@:
  578.         mov     [ebp + panel1_start - panel1_data], eax
  579.         jmp     .done_redraw
  580. .enter:
  581.         mov     eax, [ebp + panel1_files - panel1_data]
  582.         mov     ecx, [eax+ecx*4]
  583.         mov     eax, [ebp + panel1_nfa - panel1_data]
  584.         lea     ecx, [ecx+eax*4+32]
  585.         add     ecx, [ebp + panel1_files - panel1_data]
  586.         test    byte [ecx], 10h
  587.         jnz     .enter_folder
  588. ; find extension
  589.         lea     esi, [ecx+40]
  590.         push    esi
  591. @@:
  592.         lodsb
  593.         test    al, al
  594.         jnz     @b
  595. @@:
  596.         dec     esi
  597.         cmp     byte [esi], '.'
  598.         jz      .found_ext
  599.         cmp     esi, [esp]
  600.         ja      @b
  601.         jmp     .run_app
  602. .found_ext:
  603.         inc     esi
  604.         mov     edi, associations
  605. @@:
  606.         push    esi edi
  607.         mov     edi, [edi]
  608.         call    strcmpi
  609.         pop     edi esi
  610.         jz      .run_association
  611.         add     edi, 8
  612.         cmp     edi, associations_end
  613.         jb      @b
  614.         jmp     .run_app
  615. .run_association:
  616.         mov     [execparams], execdata
  617.         mov     eax, [edi+4]
  618.         mov     [execptr], eax
  619.         jmp     .dorun
  620. .run_app:
  621.         mov     [execptr], execdata
  622.         and     [execparams], 0
  623. .dorun:
  624.         pop     esi
  625.         lea     esi, [ebp + panel1_dir - panel1_data]
  626.         mov     edi, execdata
  627. ; TODO: add overflow check
  628. @@:
  629.         lodsb
  630.         test    al, al
  631.         jz      @f
  632.         stosb
  633.         jmp     @b
  634. @@:
  635.         lea     esi, [ecx+40]
  636.         mov     al, '/'
  637.         stosb
  638. @@:
  639.         lodsb
  640.         stosb
  641.         test    al, al
  642.         jnz     @b
  643.         push    70
  644.         pop     eax
  645.         mov     ebx, execinfo
  646.         int     40h
  647.         ret
  648. .enter_folder:
  649.         lea     esi, [ecx+40]
  650.         cmp     word [esi], '..'
  651.         jnz     @f
  652.         cmp     byte [esi+2], 0
  653.         jz      .dotdot
  654. @@:
  655.         lea     edi, [ebp + panel1_dir - panel1_data]
  656.         mov     al, 0
  657.         or      ecx, -1
  658.         repnz   scasb
  659.         dec     edi
  660.         mov     al, '/'
  661.         cmp     [edi-1], al
  662.         jz      @f
  663.         stosb
  664. @@:
  665. ; TODO: add buffer overflow check
  666. @@:
  667.         lodsb
  668.         stosb
  669.         test    al, al
  670.         jnz     @b
  671. .reread:
  672.         call    read_folder
  673. .done_cmdbar:
  674.         call    draw_cmdbar
  675.         jmp     .done_redraw
  676. .dotdot:
  677.         lea     edi, [ebp + panel1_dir - panel1_data]
  678.         mov     al, 0
  679.         or      ecx, -1
  680.         repnz   scasb
  681.         dec     edi
  682.         mov     al, '/'
  683.         std
  684.         repnz   scasb
  685.         cld
  686.         inc     edi
  687.         mov     byte [edi], 0
  688.         inc     edi
  689.         push    edi
  690.         call    read_folder
  691.         pop     edi
  692.         mov     edx, [ebp + panel1_files - panel1_data]
  693.         mov     ecx, [ebp + panel1_numfiles - panel1_data]
  694. .scanloop:
  695.         mov     esi, [edx]
  696.         mov     eax, [ebp + panel1_nfa - panel1_data]
  697.         lea     esi, [esi+eax*4+32+40]
  698.         add     esi, [ebp + panel1_files - panel1_data]
  699.         push    esi edi
  700. @@:
  701.         lodsb
  702.         call    match_symbol
  703.         jnz     @f
  704.         inc     edi
  705.         test    al, al
  706.         jnz     @b
  707. @@:
  708.         pop     edi esi
  709.         jz      .scanfound
  710.         add     edx, 4
  711.         loop    .scanloop
  712.         jmp     .scandone
  713. .scanfound:
  714.         sub     edx, [ebp + panel1_files - panel1_data]
  715.         shr     edx, 2
  716.         mov     [ebp + panel1_index - panel1_data], edx
  717.         sub     edx, [ebp + panel1_colst - panel1_data]
  718.         jb      .scandone
  719.         inc     edx
  720.         mov     [ebp + panel1_start - panel1_data], edx
  721. .scandone:
  722.         jmp     .done_cmdbar
  723. .ctrl_f39:
  724.         sub     al, 0x3D
  725.         add     al, al
  726.         mov     ah, [ebp + panel1_sortmode - panel1_data]
  727.         and     ah, 0xFE
  728.         cmp     al, ah
  729.         jnz     @f
  730.         and     [ebp + panel1_sortmode - panel1_data], 1
  731.         or      al, [ebp + panel1_sortmode - panel1_data]
  732.         xor     al, 1
  733. @@:
  734.         mov     [ebp + panel1_sortmode - panel1_data], al
  735.         mov     eax, [ebp + panel1_index - panel1_data]
  736.         mov     ecx, [ebp + panel1_files - panel1_data]
  737.         push    dword [ecx+eax*4]
  738.         push    ecx
  739.         call    sort_files
  740.         pop     edi
  741.         pop     eax
  742.         or      ecx, -1
  743.         repnz   scasd
  744.         not     ecx
  745.         dec     ecx
  746.         mov     [ebp + panel1_index - panel1_data], ecx
  747.         sub     ecx, [ebp + panel1_start - panel1_data]
  748.         jb      .less_start
  749.         sub     ecx, [ebp + panel1_colst - panel1_data]
  750.         jae     .gr_end
  751. @@:     jmp     .done_redraw
  752. .less_start:
  753.         add     [ebp + panel1_start - panel1_data], ecx
  754.         jmp     @b
  755. .gr_end:
  756.         inc     ecx
  757.         add     [ebp + panel1_start - panel1_data], ecx
  758.         jmp     @b
  759. .alt_f12:
  760.         mov     ebp, panel1_data
  761.         cmp     al, 0x3B
  762.         jz      @f
  763.         mov     ebp, panel2_data
  764. @@:
  765. ; get drives list
  766.         mov     ebx, dirinfo
  767.         mov     [ebx+dirinfo.size-dirinfo], 1
  768.         mov     [ebx+dirinfo.dirdata-dirinfo], driveinfo
  769.         mov     [ebx+dirinfo.name-dirinfo], tmpname
  770.         mov     byte [tmpname], '/'
  771.         xor     ecx, ecx
  772. .drive_loop_e:
  773.         mov     byte [tmpname+1], 0
  774.         push    70
  775.         pop     eax
  776.         int     40h
  777.         mov     ebx, dirinfo
  778.         test    eax, eax
  779.         jnz     .drive_loop_e_done
  780.         mov     esi, driveinfo+32+40
  781.         mov     edi, tmpname+1
  782. @@:
  783.         lodsb
  784.         stosb
  785.         test    al, al
  786.         jnz     @b
  787.         push    [ebx+dirinfo.first-dirinfo]
  788.         and     [ebx+dirinfo.first-dirinfo], 0
  789. .drive_loop_i:
  790.         push    70
  791.         pop     eax
  792.         int     40h
  793.         mov     ebx, dirinfo
  794.         test    eax, eax
  795.         jnz     .drive_loop_i_done
  796.         mov     eax, 32+8
  797.         call    mf_alloc
  798.         test    eax, eax
  799.         jz      .drive_loop_i_done
  800.         jecxz   @f
  801.         mov     [ecx], eax
  802. @@:
  803.         and     dword [eax], 0
  804.         mov     [eax+4], ecx
  805.         mov     ecx, eax
  806.         lea     edi, [eax+8]
  807.         mov     esi, tmpname
  808. @@:
  809.         lodsb
  810.         test    al, al
  811.         jz      @f
  812.         stosb
  813.         jmp     @b
  814. @@:
  815.         mov     esi, driveinfo+32+40
  816.         mov     al, '/'
  817.         stosb
  818. @@:
  819.         lodsb
  820.         stosb
  821.         test    al, al
  822.         jnz     @b
  823.         inc     [ebx+dirinfo.first-dirinfo]
  824.         jmp     .drive_loop_i
  825. .drive_loop_i_done:
  826.         pop     [ebx+dirinfo.first-dirinfo]
  827.         inc     [ebx+dirinfo.first-dirinfo]
  828.         jmp     .drive_loop_e
  829. .drive_loop_e_done:
  830.         and     [ebx+dirinfo.first-dirinfo], 0
  831.         lea     edi, [ebp + panel1_dir - panel1_data]
  832. .find_cur_drive_loop:
  833.         push    edi
  834.         lea     esi, [ecx+8]
  835. @@:
  836.         lodsb
  837.         test    al, al
  838.         jz      .cur_drive_found
  839.         call    match_symbol
  840.         jnz     @f
  841.         inc     edi
  842.         jmp     @b
  843. @@:
  844.         cmp     dword [ecx+4], 0
  845.         jz      @f
  846.         pop     edi
  847.         mov     ecx, [ecx+4]
  848.         jmp     .find_cur_drive_loop
  849. @@:
  850. .cur_drive_found:
  851.         pop     edi
  852.         push    1
  853.         push    aDrive
  854.         push    ecx
  855.         mov     eax, [ebp + panel1_height - panel1_data]
  856.         sub     eax, 2
  857.         jae     @f
  858.         add     eax, 2
  859. @@:
  860.         push    eax
  861.         push    [ebp + panel1_width - panel1_data]
  862.         push    [ebp + panel1_top - panel1_data]
  863.         push    [ebp + panel1_left - panel1_data]
  864.         call    menu_centered_in
  865.         cmp     eax, -1
  866.         jz      .ret2
  867.         lea     esi, [eax+8]
  868.         lea     edi, [ebp + panel1_dir - panel1_data]
  869. @@:
  870.         lodsb
  871.         stosb
  872.         test    al, al
  873.         jnz     @b
  874. @@:
  875.         cmp     dword [ecx+4], 0
  876.         jz      @f
  877.         mov     ecx, [ecx+4]
  878.         jmp     @b
  879. @@:
  880.         mov     eax, ecx
  881.         mov     ecx, [ecx]
  882.         call    mf_free
  883.         test    ecx, ecx
  884.         jnz     @b
  885.         call    read_folder
  886.         jmp     .done_redraw
  887. .f3:
  888.         call    view_file
  889. .ret2:
  890.         ret
  891. .f8:
  892.         mov     eax, [ebp + panel1_files - panel1_data]
  893.         mov     ecx, [eax+ecx*4]
  894.         mov     eax, [ebp + panel1_nfa - panel1_data]
  895.         lea     ecx, [ecx+eax*4+32]
  896.         add     ecx, [ebp + panel1_files - panel1_data]
  897.         lea     esi, [ebp + panel1_dir - panel1_data]
  898.         mov     edi, execdata
  899. @@:
  900.         lodsb
  901.         test    al, al
  902.         jz      @f
  903.         stosb
  904.         jmp     @b
  905. @@:
  906.         lea     esi, [ecx+40]
  907.         mov     al, '/'
  908.         stosb
  909. @@:
  910.         lodsb
  911.         stosb
  912.         test    al, al
  913.         jnz     @b
  914.         push    70
  915.         pop     eax
  916.         mov     ebx, delinfo
  917.         int     0x40
  918. .ctrl_r:
  919. ; Rescan panel
  920. ;       call    read_folder
  921. ;       jmp     .done_redraw
  922.         mov     eax, [ebp + panel1_index - panel1_data]
  923.         push    eax
  924.         mov     ecx, [ebp + panel1_files - panel1_data]
  925.         mov     ecx, [ecx+eax*4]
  926.         mov     eax, [ebp + panel1_nfa - panel1_data]
  927.         lea     esi, [ecx+eax*4+32+40]
  928.         add     esi, [ebp + panel1_files - panel1_data]
  929.         mov     edi, saved_file_name
  930. @@:
  931.         lodsb
  932.         stosb
  933.         test    al, al
  934.         jnz     @b
  935.         push    [ebp + panel1_start - panel1_data]
  936.         call    read_folder
  937.         pop     [ebp + panel1_start - panel1_data]
  938.         pop     [ebp + panel1_index - panel1_data]
  939.         or      eax, -1
  940. @@:
  941.         inc     eax
  942.         cmp     eax, [ebp + panel1_numfiles - panel1_data]
  943.         jae     .ctrl_r.notfound
  944.         mov     esi, [ebp + panel1_nfa - panel1_data]
  945.         mov     ecx, [ebp + panel1_files - panel1_data]
  946.         lea     esi, [ecx+esi*4+32+40]
  947.         add     esi, [ecx+eax*4]
  948.         mov     edi, saved_file_name
  949.         call    strcmpi
  950.         jnz     @b
  951. .ctrl_r.found:
  952.         mov     [ebp + panel1_index - panel1_data], eax
  953. .ctrl_r.notfound:
  954.         mov     eax, [ebp + panel1_numfiles - panel1_data]
  955.         dec     eax
  956.         cmp     [ebp + panel1_index - panel1_data], eax
  957.         jbe     @f
  958.         mov     [ebp + panel1_index - panel1_data], eax
  959. @@:
  960.         mov     eax, [ebp + panel1_index - panel1_data]
  961.         cmp     [ebp + panel1_start - panel1_data], eax
  962.         jbe     @f
  963.         mov     [ebp + panel1_start - panel1_data], eax
  964. @@:
  965.         inc     eax
  966.         sub     eax, [ebp + panel1_colst - panel1_data]
  967.         jae     @f
  968.         xor     eax, eax
  969. @@:
  970.         cmp     [ebp + panel1_start - panel1_data], eax
  971.         jae     @f
  972.         mov     [ebp + panel1_start - panel1_data], eax
  973. @@:
  974.         mov     eax, [ebp + panel1_numfiles - panel1_data]
  975.         sub     eax, [ebp + panel1_colst - panel1_data]
  976.         jbe     @f
  977.         cmp     [ebp + panel1_start - panel1_data], eax
  978.         jbe     @f
  979.         mov     [ebp + panel1_start - panel1_data], eax
  980. @@:
  981.         jmp     .done_redraw
  982.  
  983. panels_OnRedraw:
  984.         call    draw_cmdbar
  985.         mov     ebp, panel1_data
  986.         call    draw_panel
  987.         mov     ebp, panel2_data
  988.         call    draw_panel
  989.         ret
  990.  
  991. init_console:
  992.         mov     ax, 0720h
  993.         mov     ecx, [cur_width]
  994.         imul    ecx, [cur_height]
  995.         mov     edi, console_data
  996.         rep     stosw
  997.         and     [panel1_left], 0
  998.         and     [panel1_top], 0
  999.         and     [panel2_top], 0
  1000.         mov     eax, [cur_width]
  1001.         inc     eax
  1002.         shr     eax, 1
  1003.         mov     [panel1_width], eax
  1004.         mov     [panel2_left], eax
  1005.         sub     eax, [cur_width]
  1006.         neg     eax
  1007.         mov     [panel2_width], eax
  1008.         mov     eax, [cur_height]
  1009.         dec     eax
  1010.         dec     eax
  1011.         mov     [panel1_height], eax
  1012.         mov     [panel2_height], eax
  1013.         ret
  1014.  
  1015. panels_getname:
  1016. if lang eq ru
  1017.         mov     eax, ' ­¥'
  1018.         stosd
  1019.         mov     eax, '«¨  '
  1020.         stosd
  1021.         mov     eax, '    '
  1022.         stosd
  1023.         stosb
  1024. else
  1025.         mov     eax, 'Pane'
  1026.         stosd
  1027.         mov     eax, 'ls  '
  1028.         stosd
  1029.         mov     eax, '    '
  1030.         stosd
  1031.         stosb
  1032. end if
  1033.         sub     ecx, 13
  1034.         mov     ebp, [active_panel]
  1035.         lea     esi, [ebp + panel1_dir - panel1_data]
  1036.         push    3
  1037.         pop     edx
  1038. @@:
  1039.         lodsb
  1040.         stosb
  1041.         dec     ecx
  1042.         test    al, al
  1043.         jz      @f
  1044.         cmp     al, '/'
  1045.         jnz     @b
  1046.         dec     edx
  1047.         jnz     @b
  1048. @@:
  1049.         test    al, al
  1050.         jnz     @f
  1051.         dec     esi
  1052.         dec     edi
  1053. @@:
  1054.         push    esi
  1055. @@:
  1056.         lodsb
  1057.         test    al, al
  1058.         jnz     @b
  1059.         dec     esi
  1060.         mov     ebx, esi
  1061.         sub     ebx, [esp]
  1062.         dec     esi
  1063.         push    esi
  1064.         mov     edx, [ebp + panel1_files - panel1_data]
  1065.         mov     esi, [ebp + panel1_index - panel1_data]
  1066.         mov     esi, [edx+esi*4]
  1067.         add     esi, edx
  1068.         mov     edx, [ebp + panel1_nfa - panel1_data]
  1069.         lea     esi, [esi+edx*4+32+40]
  1070.         push    esi
  1071. @@:
  1072.         lodsb
  1073.         test    al, al
  1074.         jnz     @b
  1075.         add     ebx, esi
  1076.         sub     ebx, [esp]
  1077.         dec     esi
  1078.         cmp     ebx, ecx
  1079.         jbe     @f
  1080.         mov     al, '.'
  1081.         stosb
  1082.         stosb
  1083.         stosb
  1084.         sub     ecx, 3
  1085.         mov     ebx, ecx
  1086. @@:
  1087.         add     edi, ebx
  1088.         inc     ecx
  1089.         std
  1090. @@:
  1091.         movsb
  1092.         dec     ecx
  1093.         jz      .nodir
  1094.         cmp     esi, [esp]
  1095.         jae     @b
  1096.         mov     al, '/'
  1097.         stosb
  1098.         dec     ecx
  1099.         jz      .nodir
  1100.         mov     esi, [esp+4]
  1101. @@:
  1102.         cmp     esi, [esp+8]
  1103.         jb      .nodir
  1104.         movsb
  1105.         loop    @b
  1106. .nodir:
  1107.         cld
  1108.         pop     eax
  1109.         pop     eax
  1110.         pop     eax
  1111.         ret
  1112.  
  1113. draw_window:
  1114.         push    12
  1115.         pop     eax
  1116.         push    1
  1117.         pop     ebx
  1118.         int     40h
  1119.         mov     al, 48
  1120.         mov     bl, 4
  1121.         int     40h
  1122.         mov     [skinh], eax
  1123.         mov     ebx, [cur_width]
  1124.         imul    ebx, font_width
  1125.         add     ebx, 100*65536 + 5*2
  1126.         mov     ecx, [cur_height]
  1127.         imul    ecx, font_height
  1128.         lea     ecx, [eax+ecx+5+100*65536]
  1129.         xor     eax, eax
  1130.         mov     edx, 0x13000000
  1131.         mov     edi, header
  1132.         int     40h
  1133.         mov     al, 48
  1134.         push    3
  1135.         pop     ebx
  1136.         mov     ecx, std_colors
  1137.         push    40
  1138.         pop     edx
  1139.         int     40h
  1140. ;        mov     bl, 7
  1141. ;        int     40h
  1142. ;        xor     ax, ax
  1143. ;        shr     ebx, 16
  1144. ;        or      ebx, eax
  1145. ;        mov     ecx, [std_colors+16]
  1146. ;        mov     edx, header
  1147. ;        push    header.length
  1148. ;        pop     esi
  1149. ;        push    4
  1150. ;        pop     eax
  1151. ;        int     40h
  1152.         xor     ecx, ecx
  1153.         call    draw_image
  1154.         push    12
  1155.         pop     eax
  1156.         push    2
  1157.         pop     ebx
  1158.         int     40h
  1159.         ret
  1160.  
  1161. draw_image.nomem:
  1162.         mov     al, 13
  1163.         xor     edx, edx
  1164.         mov     ebx, [cur_width]
  1165.         imul    ebx, font_width
  1166.         add     ebx, 5*65536
  1167.         mov     ecx, [skinh-2]
  1168.         mov     cx, word [cur_height]
  1169.         imul    cx, font_height
  1170.         int     40h
  1171.         mov     al, 4
  1172.         mov     ebx, 32*65536+32
  1173.         mov     ecx, 0xFFFFFF
  1174.         mov     edx, nomem_draw
  1175.         push    nomem_draw.size
  1176.         pop     esi
  1177.         int     40h
  1178.         ret
  1179.  
  1180. draw_image:
  1181.         cmp     [MemForImage], 0
  1182.         jnz     .allocated
  1183. ; allocate memory for image
  1184.         mov     eax, [cur_width]
  1185.         imul    eax, [cur_height]
  1186.         imul    eax, font_width*font_height*3
  1187.         call    mf_alloc
  1188.         test    eax, eax
  1189.         jz      draw_image.nomem
  1190.         mov     [MemForImage], eax
  1191. .allocated:
  1192.         mov     edi, [MemForImage]
  1193.         mov     esi, console_data
  1194.         mov     ecx, [cur_height]
  1195. .lh:
  1196.         push    ecx
  1197.         mov     ecx, [cur_width]
  1198. .lw:
  1199.         push    ecx edi
  1200.         xor     eax, eax
  1201.         mov     al, [esi+1]
  1202.         and     al, 0xF
  1203.         mov     ebx, [console_colors + eax*4]   ; 梥â ⥪áâ 
  1204.         mov     al, [esi+1]
  1205.         shr     al, 4
  1206.         mov     ebp, [console_colors + eax*4]   ; 梥â ä®­ 
  1207.         lodsb
  1208.         inc     esi
  1209. if font_width > 8
  1210.         lea     edx, [eax+eax+font]
  1211. else
  1212.         lea     edx, [eax+font]
  1213. end if
  1214.         mov     ecx, font_height
  1215. .sh:
  1216.         push    ecx edi
  1217.         xor     ecx, ecx
  1218. .sw:
  1219.         mov     eax, ebx
  1220.         bt      [edx], ecx
  1221.         jc      @f
  1222.         mov     eax, ebp
  1223. @@:
  1224.         stosw
  1225.         shr     eax, 16
  1226.         stosb
  1227.         inc     ecx
  1228.         cmp     ecx, font_width
  1229.         jb      .sw
  1230.         pop     edi ecx
  1231.         mov     eax, [cur_width]
  1232.         imul    eax, font_width*3
  1233.         add     edi, eax
  1234. if font_width > 8
  1235.         add     edx, 256*2
  1236. else
  1237.         add     edx, 256
  1238. end if
  1239.         loop    .sh
  1240.         pop     edi ecx
  1241.         add     edi, font_width*3
  1242.         loop    .lw
  1243.         mov     eax, [cur_width]
  1244.         imul    eax, (font_height-1)*font_width*3
  1245.         add     edi, eax
  1246.         pop     ecx
  1247.         loop    .lh
  1248.         push    7
  1249.         pop     eax
  1250.         mov     ebx, [MemForImage]
  1251.         mov     ecx, [cur_width]
  1252.         imul    ecx, font_width*10000h
  1253.         mov     cx, word [cur_height]
  1254.         imul    cx, font_height
  1255.         mov     edx, [skinh]
  1256.         add     edx, 5*10000h
  1257.         int     40h
  1258.         ret
  1259.  
  1260. get_console_ptr:
  1261. ; in: eax=x, edx=y
  1262. ; out: edi->console data
  1263.         push    edx
  1264.         imul    edx, [cur_width]
  1265.         add     edx, eax
  1266.         lea     edi, [console_data + edx*2]
  1267.         pop     edx
  1268.         ret
  1269.  
  1270. draw_keybar:
  1271.         pushad
  1272.         xor     eax, eax
  1273.         test    [ctrlstate], 3
  1274.         jz      @f
  1275.         inc     eax
  1276. @@:
  1277.         test    [ctrlstate], 0xC
  1278.         jz      @f
  1279.         or      al, 2
  1280. @@:
  1281.         test    [ctrlstate], 0x30
  1282.         jz      @f
  1283.         or      al, 4
  1284. @@:
  1285.         imul    eax, 6*12
  1286.         mov     esi, [active_screen_vtable]
  1287.         mov     esi, [esi+screen_vtable.keybar]
  1288.         add     esi, eax
  1289.         xor     ecx, ecx
  1290.         inc     ecx
  1291.         xor     eax, eax
  1292.         mov     edx, [cur_height]
  1293.         dec     edx
  1294.         call    get_console_ptr
  1295.         push    6
  1296.         pop     ebx
  1297.         mov     eax, [cur_width]
  1298.         sub     eax, 11+9+3*2+6
  1299.         cmp     eax, 7*11
  1300.         jl      @f
  1301.         cdq
  1302.         mov     bl, 11
  1303.         div     ebx
  1304.         mov     ebx, eax
  1305. @@:
  1306.         xor     edx, edx
  1307. .l:
  1308.         add     edx, 7
  1309.         cmp     cl, 10
  1310.         jb      @f
  1311.         inc     edx
  1312. @@:
  1313.         cmp     edx, [cur_width]
  1314.         ja      .ret
  1315.         cmp     cl, 10
  1316.         jae     .twodig
  1317.         lea     eax, [ecx+'0']
  1318.         stosb
  1319.         mov     al, [keybar_number_color]
  1320.         stosb
  1321.         jmp     .cmn
  1322. .twodig:
  1323.         mov     al, cl
  1324.         cbw
  1325.         div     [_10]
  1326.         add     al, '0'
  1327.         stosb
  1328.         mov     al, [keybar_number_color]
  1329.         stosb
  1330.         xchg    al, ah
  1331.         add     al, '0'
  1332.         stosw
  1333. .cmn:
  1334.         mov     ah, [keybar_name_color]
  1335.         push    ecx
  1336.         mov     cl, 6
  1337. @@:
  1338.         lodsb
  1339.         stosw
  1340.         loop    @b
  1341.         mov     al, ' '
  1342.         lea     ecx, [ebx-6]
  1343.         cmp     byte [esp], 12
  1344.         jz      .ret_pop
  1345.         add     edx, ecx
  1346.         rep     stosw
  1347.         pop     ecx
  1348.         inc     edx
  1349.         cmp     edx, [cur_width]
  1350.         ja      .ret
  1351.         mov     ah, [keybar_bgr_color]
  1352.         stosw
  1353.         inc     ecx
  1354.         jmp     .l
  1355. .ret_pop:
  1356.         pop     ecx
  1357. .ret:
  1358.         cmp     byte [edi-2], ' '
  1359.         jnz     @f
  1360.         dec     edi
  1361.         dec     edi
  1362. @@:
  1363.         push    edi
  1364.         mov     eax, [cur_width]
  1365.         mov     edx, [cur_height]
  1366.         call    get_console_ptr
  1367.         mov     ecx, edi
  1368.         pop     edi
  1369.         sub     ecx, edi
  1370.         shr     ecx, 1
  1371.         mov     al, ' '
  1372.         mov     ah, [keybar_name_color]
  1373.         rep     stosw
  1374. .done:
  1375.         popad
  1376.         ret
  1377.  
  1378. draw_cmdbar:
  1379.         mov     esi, [active_panel]
  1380.         add     esi, panel1_dir - panel1_data
  1381.         xor     eax, eax
  1382.         mov     edx, [cur_height]
  1383.         dec     edx
  1384.         dec     edx
  1385.         call    get_console_ptr
  1386.         mov     ah, [cmdbar_prefix_color]
  1387.         mov     ecx, [cur_width]
  1388.         dec     ecx
  1389. @@:
  1390.         lodsb
  1391.         test    al, al
  1392.         jz      @f
  1393.         stosw
  1394.         loop    @b
  1395. @@:
  1396.         mov     al, '>'
  1397.         stosw
  1398.         mov     al, ' '
  1399.         mov     ah, [cmdbar_normal_color]
  1400.         rep     stosw
  1401.         ret
  1402.  
  1403. draw_border:
  1404.         push    edi
  1405.         mov     al, 0xC9
  1406.         stosw
  1407.         mov     al, 0xCD
  1408.         lea     ecx, [ebx-2]
  1409.         rep     stosw
  1410.         mov     al, 0xBB
  1411.         stosw
  1412.         pop     edi
  1413.         add     edi, [cur_width]
  1414.         add     edi, [cur_width]
  1415.         lea     ecx, [edx-2]
  1416. .l:
  1417.         push    edi
  1418.         mov     al, 0xBA
  1419.         stosw
  1420.         mov     al, 0x20
  1421.         push    ecx
  1422.         lea     ecx, [ebx-2]
  1423.         rep     stosw
  1424.         pop     ecx
  1425.         mov     al, 0xBA
  1426.         stosw
  1427.         pop     edi
  1428.         add     edi, [cur_width]
  1429.         add     edi, [cur_width]
  1430.         loop    .l
  1431.         mov     al, 0xC8
  1432.         stosw
  1433.         mov     al, 0xCD
  1434.         lea     ecx, [ebx-2]
  1435.         rep     stosw
  1436.         mov     al, 0xBC
  1437.         stosw
  1438.         ret
  1439.  
  1440. draw_panel:
  1441.         mov     eax, [ebp + panel1_left - panel1_data]
  1442.         mov     edx, [ebp + panel1_top - panel1_data]
  1443.         call    get_console_ptr
  1444. ; draw border
  1445.         mov     ah, [panel_border_color]
  1446.         mov     ebx, [ebp + panel1_width - panel1_data]
  1447.         mov     edx, [ebp + panel1_height - panel1_data]
  1448.         call    draw_border
  1449.         push    eax
  1450.         mov     eax, [ebp + panel1_left - panel1_data]
  1451.         mov     edx, [ebp + panel1_top - panel1_data]
  1452.         add     edx, [ebp + panel1_height - panel1_data]
  1453.         sub     edx, 3
  1454.         call    get_console_ptr
  1455.         pop     eax
  1456.         mov     al, 0xC7
  1457.         stosw
  1458.         mov     al, 0xC4
  1459.         lea     ecx, [ebx-2]
  1460.         rep     stosw
  1461.         mov     al, 0xB6
  1462.         stosw
  1463.         mov     eax, [ebp + panel1_width - panel1_data]
  1464.         sub     eax, 3
  1465.         shr     eax, 1
  1466.         mov     [column_width], eax
  1467.         mov     eax, [ebp + panel1_left - panel1_data]
  1468.         inc     eax
  1469.         mov     [column_left], eax
  1470.         add     eax, [column_width]
  1471.         mov     edx, [ebp + panel1_top - panel1_data]
  1472.         inc     edx
  1473.         mov     [column_top], edx
  1474.         dec     edx
  1475.         call    get_console_ptr
  1476.         mov     ah, [panel_border_color]
  1477.         mov     al, 0xD1
  1478.         mov     [edi], ax
  1479.         add     edi, [cur_width]
  1480.         add     edi, [cur_width]
  1481.         mov     ecx, [ebp + panel1_height - panel1_data]
  1482.         sub     ecx, 4
  1483.         mov     [column_height], ecx
  1484.         mov     al, 0xB3
  1485. @@:
  1486.         mov     [edi], ax
  1487.         add     edi, [cur_width]
  1488.         add     edi, [cur_width]
  1489.         loop    @b
  1490.         mov     al, 0xC1
  1491.         stosw
  1492.         mov     eax, [column_height]
  1493.         dec     eax
  1494.         mov     [ebp + panel1_colsz - panel1_data], eax
  1495.         add     eax, eax
  1496.         mov     [ebp + panel1_colst - panel1_data], eax
  1497.         mov     eax, [ebp + panel1_start - panel1_data]
  1498.         mov     [column_index], eax
  1499.         call    draw_column
  1500.         mov     eax, [ebp + panel1_width - panel1_data]
  1501.         sub     eax, 3
  1502.         mov     ecx, [column_width]
  1503.         sub     eax, ecx
  1504.         mov     [column_width], eax
  1505.         inc     ecx
  1506.         add     [column_left], ecx
  1507.         call    draw_column
  1508. ; ‡ £®«®¢®ª ¯ ­¥«¨ (⥪ãé ï ¯ ¯ª )
  1509.         lea     esi, [ebp + panel1_dir - panel1_data]
  1510.         mov     edi, cur_header
  1511.         mov     ecx, [ebp + panel1_width - panel1_data]
  1512.         sub     ecx, 7
  1513.         movsb
  1514. @@:
  1515.         lodsb
  1516.         stosb
  1517.         dec     ecx
  1518.         test    al, al
  1519.         jz      .header_created
  1520.         cmp     al, '/'
  1521.         jnz     @b
  1522.         mov     edx, esi
  1523. @@:
  1524.         lodsb
  1525.         test    al, al
  1526.         jnz     @b
  1527.         sub     esi, edx
  1528.         dec     esi
  1529.         cmp     esi, ecx
  1530.         jbe     @f
  1531.         mov     word [edi], '..'
  1532.         mov     byte [edi+2], '.'
  1533.         add     edi, 3
  1534.         sub     ecx, 3
  1535.         add     edx, esi
  1536.         sub     edx, ecx
  1537. @@:
  1538.         mov     esi, edx
  1539. @@:
  1540.         lodsb
  1541.         stosb
  1542.         dec     ecx
  1543.         test    al, al
  1544.         jnz     @b
  1545. .header_created:
  1546.         mov     edx, [ebp + panel1_top - panel1_data]
  1547.         mov     eax, [ebp + panel1_left - panel1_data]
  1548.         shr     ecx, 1
  1549.         lea     eax, [eax+ecx+3]
  1550.         call    get_console_ptr
  1551.         mov     ah, [panel_active_header_color]
  1552.         cmp     ebp, [active_panel]
  1553.         jz      @f
  1554.         mov     ah, [panel_header_color]
  1555. @@:
  1556.         mov     al, ' '
  1557.         stosw
  1558.         mov     esi, cur_header
  1559. @@:
  1560.         lodsb
  1561.         test    al, al
  1562.         jz      @f
  1563.         stosw
  1564.         jmp     @b
  1565. @@:
  1566.         mov     al, ' '
  1567.         stosw
  1568.         mov     edx, [ebp + panel1_top - panel1_data]
  1569.         inc     edx
  1570.         mov     eax, [ebp + panel1_left - panel1_data]
  1571.         inc     eax
  1572.         call    get_console_ptr
  1573.         movzx   eax, [ebp + panel1_sortmode - panel1_data]
  1574.         mov     al, [compare_names+eax]
  1575.         stosb
  1576.         cmp     [ebp + panel1_numfiles - panel1_data], 0
  1577.         jz      .skip_curinfo
  1578. ; ˆ­ä®à¬ æ¨ï ® ¢ë¡à ­­®¬ ä ©«¥
  1579.         mov     ebx, [ebp + panel1_index - panel1_data]
  1580.         mov     eax, [ebp + panel1_files - panel1_data]
  1581.         mov     ebx, [eax+ebx*4]
  1582.         mov     eax, [ebp + panel1_nfa - panel1_data]
  1583.         lea     ebx, [ebx+eax*4+32]
  1584.         add     ebx, [ebp + panel1_files - panel1_data]
  1585.         mov     eax, [ebp + panel1_left - panel1_data]
  1586.         add     eax, [ebp + panel1_width - panel1_data]
  1587.         dec     eax
  1588.         mov     edx, [ebp + panel1_top - panel1_data]
  1589.         add     edx, [ebp + panel1_height - panel1_data]
  1590.         dec     edx
  1591.         dec     edx
  1592.         call    get_console_ptr
  1593.         mov     ecx, [ebp + panel1_width - panel1_data]
  1594.         dec     ecx
  1595.         dec     ecx
  1596. ; ‚à¥¬ï ¬®¤¨ä¨ª æ¨¨
  1597.         sub     edi, 5*2
  1598.         sub     ecx, 6
  1599.         mov     al, [ebx+24+2]
  1600.         aam
  1601.         or      ax, 0x3030
  1602.         mov     [edi], ah
  1603.         mov     [edi+2], al
  1604.         mov     [edi+4], byte ':'
  1605.         mov     al, [ebx+24+1]
  1606.         aam
  1607.         or      ax, 0x3030
  1608.         mov     [edi+6], ah
  1609.         mov     [edi+8], al
  1610.         mov     al, [panel_normal_color]
  1611.         mov     [edi+1], al
  1612.         mov     [edi+3], al
  1613.         mov     [edi+5], al
  1614.         mov     [edi+7], al
  1615.         mov     [edi+9], al
  1616.         dec     edi
  1617.         mov     [edi], al
  1618.         dec     edi
  1619.         mov     byte [edi], ' '
  1620. ; „ â  ¬®¤¨ä¨ª æ¨¨
  1621.         sub     edi, 8*2
  1622.         sub     ecx, 9
  1623.         mov     al, [ebx+28+0]
  1624.         aam
  1625.         or      ax, 0x3030
  1626.         mov     [edi], ah
  1627.         mov     [edi+2], al
  1628.         mov     [edi+4], byte '.'
  1629.         mov     al, [ebx+28+1]
  1630.         aam
  1631.         or      ax, 0x3030
  1632.         mov     [edi+6], ah
  1633.         mov     [edi+8], al
  1634.         mov     [edi+10], byte '.'
  1635.         mov     ax, [ebx+28+2]
  1636.         div     [_100]
  1637.         mov     al, ah
  1638.         aam
  1639.         or      ax, 0x3030
  1640.         mov     [edi+12], ah
  1641.         mov     [edi+14], al
  1642.         mov     al, [panel_normal_color]
  1643.         mov     [edi+1], al
  1644.         mov     [edi+3], al
  1645.         mov     [edi+5], al
  1646.         mov     [edi+7], al
  1647.         mov     [edi+9], al
  1648.         mov     [edi+11], al
  1649.         mov     [edi+13], al
  1650.         mov     [edi+15], al
  1651.         dec     edi
  1652.         mov     [edi], al
  1653.         dec     edi
  1654.         mov     [edi], byte ' '
  1655. ;  §¬¥à
  1656.         std
  1657.         mov     ah, [panel_normal_color]
  1658.         dec     edi
  1659.         dec     edi
  1660.         dec     ecx
  1661.         test    byte [ebx], 0x10
  1662.         jz      .size_file
  1663.         push    ecx
  1664.         mov     esi, aFolder+aFolder.size-1
  1665.         mov     ecx, aFolder.size
  1666.         cmp     word [ebx+40], '..'
  1667.         jnz     @f
  1668.         cmp     byte [ebx+42], 0
  1669.         jnz     @f
  1670.         mov     esi, aUp+aUp.size-1
  1671.         mov     cl, aUp.size
  1672. @@:
  1673.         sub     [esp], ecx
  1674. @@:
  1675.         lodsb
  1676.         stosw
  1677.         loop    @b
  1678.         pop     ecx
  1679.         jmp     .size_done
  1680. .size_file:
  1681.         mov     edx, [ebx+36]
  1682.         test    edx, edx
  1683.         jz      .size_less_4g
  1684.         cmp     edx, 10*256
  1685.         jae     .size_tera
  1686. ; ¢ £¨£ ¡ ©â å
  1687.         mov     al, 'G'
  1688.         jmp     .size_letter
  1689. .size_tera:
  1690. ; ¢ â¥à ¡ ©â å
  1691.         shr     edx, 8
  1692.         mov     al, 'T'
  1693.         jmp     .size_letter
  1694. .size_less_4g:
  1695.         mov     edx, [ebx+32]
  1696.         cmp     edx, 10*(1 shl 20)
  1697.         jae     .size_mega
  1698.         cmp     edx, 1 shl 20
  1699.         jb      .size_num
  1700.         shr     edx, 10
  1701.         mov     al, 'K'
  1702.         jmp     .size_letter
  1703. .size_mega:
  1704.         mov     al, 'M'
  1705.         shr     edx, 20
  1706. .size_letter:
  1707.         stosw
  1708.         dec     ecx
  1709.         mov     al, ' '
  1710.         stosw
  1711.         dec     ecx
  1712. .size_num:
  1713.         xchg    eax, edx
  1714.         xor     edx, edx
  1715.         div     [_10d]
  1716.         xchg    eax, edx
  1717.         add     al, '0'
  1718.         mov     ah, [panel_normal_color]
  1719.         stosw
  1720.         dec     ecx
  1721.         test    edx, edx
  1722.         jnz     .size_num
  1723. .size_done:
  1724.         cld
  1725. ; ˆ¬ï
  1726.         sub     edi, ecx
  1727.         sub     edi, ecx
  1728.         lea     esi, [ebx+40]
  1729. @@:
  1730.         lodsb
  1731.         test    al, al
  1732.         jnz     @b
  1733.         sub     esi, ebx
  1734.         sub     esi, 41
  1735.         mov     ah, [panel_normal_color]
  1736.         cmp     esi, ecx
  1737.         lea     edx, [ebx+40]
  1738.         jbe     @f
  1739.         mov     al, '{'
  1740.         mov     [edi-2], ax
  1741.         add     edx, esi
  1742.         sub     edx, ecx
  1743. @@:
  1744.         mov     esi, edx
  1745. @@:
  1746.         lodsb
  1747.         test    al, al
  1748.         jz      @f
  1749.         stosw
  1750.         loop    @b
  1751. @@:
  1752.         mov     al, ' '
  1753.         rep     stosw
  1754. .skip_curinfo:
  1755.         call    draw_image
  1756.         ret
  1757.  
  1758. draw_column:
  1759.         mov     eax, [column_left]
  1760.         mov     edx, [column_top]
  1761.         call    get_console_ptr
  1762. ; § £®«®¢®ª á⮫¡æ 
  1763.         push    edi
  1764.         mov     ah, [column_header_color]
  1765.         mov     al, ' '
  1766.         mov     ecx, [column_width]
  1767. if lang eq ru
  1768.         sub     ecx, 3
  1769. else
  1770.         sub     ecx, 4
  1771. end if
  1772.         shr     ecx, 1
  1773.         rep     stosw
  1774. if lang eq ru
  1775.         mov     al, 'ˆ'
  1776.         stosw
  1777.         mov     al, '¬'
  1778.         stosw
  1779.         mov     al, 'ï'
  1780.         stosw
  1781. else
  1782.         mov     al, 'N'
  1783.         stosw
  1784.         mov     al, 'a'
  1785.         stosw
  1786.         mov     al, 'm'
  1787.         stosw
  1788.         mov     al, 'e'
  1789.         stosw
  1790. end if
  1791.         mov     al, ' '
  1792.         mov     ecx, [column_width]
  1793. if lang eq ru
  1794.         sub     ecx, 2
  1795. else
  1796.         sub     ecx, 3
  1797. end if
  1798.         shr     ecx, 1
  1799.         rep     stosw
  1800.         pop     edi
  1801.         add     edi, [cur_width]
  1802.         add     edi, [cur_width]
  1803. ; ä ©«ë
  1804.         mov     edx, [ebp + panel1_numfiles - panel1_data]
  1805.         mov     ecx, [column_height]
  1806.         dec     ecx
  1807. .l:
  1808.         cmp     [column_index], edx
  1809.         jae     .ret
  1810.         push    ecx
  1811.         mov     esi, [column_index]
  1812.         mov     ecx, [ebp + panel1_files - panel1_data]
  1813.         mov     esi, [ecx+esi*4]
  1814.         mov     ecx, [ebp + panel1_nfa - panel1_data]
  1815.         lea     esi, [esi + ecx*4 + 32 + 40]
  1816.         add     esi, [ebp + panel1_files - panel1_data]
  1817. ; ¯®¤á¢¥âª 
  1818. ;        call    insert_last_dot
  1819.         xor     ecx, ecx
  1820. .highlight_test_loop:
  1821.         mov     ebx, [highlight_groups+ecx*4]
  1822.         mov     al, [ebx + highlight.IncludeAttributes]
  1823.         mov     ah, [esi - 40]
  1824.         and     ah, al
  1825.         cmp     ah, al
  1826.         jnz     .highlight_test_failed
  1827.         push    edi
  1828.         lea     edi, [ebx + highlight.Mask]
  1829.         call    match_mask
  1830.         pop     edi
  1831.         jc      .highlight_test_failed
  1832.         mov     ah, [ebx + highlight.NormalColor]
  1833.         cmp     ebp, [active_panel]
  1834.         jnz     @f
  1835.         mov     ecx, [column_index]
  1836.         cmp     ecx, [ebp + panel1_index - panel1_data]
  1837.         jnz     @f
  1838.         mov     ah, [ebx + highlight.CursorColor]
  1839. @@:
  1840.         test    ah, ah
  1841.         jz      .nohighlight
  1842.         jmp     .doname
  1843. .highlight_test_failed:
  1844.         inc     ecx
  1845.         cmp     ecx, [highlight_num_groups]
  1846.         jb      .highlight_test_loop
  1847. .nohighlight:
  1848.         mov     ah, [panel_normal_color]
  1849.         cmp     ebp, [active_panel]
  1850.         jnz     @f
  1851.         mov     ecx, [column_index]
  1852.         cmp     ecx, [ebp + panel1_index - panel1_data]
  1853.         jnz     @f
  1854.         mov     ah, [panel_cursor_color]
  1855. @@:
  1856. .doname:
  1857. ;        call    delete_last_dot
  1858.         mov     ecx, [column_width]
  1859.         push    edi
  1860. @@:
  1861.         lodsb
  1862.         test    al, al
  1863.         jz      @f
  1864.         stosw
  1865.         loop    @b
  1866.         cmp     byte [esi], 0
  1867.         jz      @f
  1868.         mov     byte [edi], '}'
  1869. @@:
  1870.         mov     al, ' '
  1871.         rep     stosw
  1872.         pop     edi
  1873.         add     edi, [cur_width]
  1874.         add     edi, [cur_width]
  1875.         inc     [column_index]
  1876.         pop     ecx
  1877.         dec     ecx
  1878.         jnz     .l
  1879. .ret:
  1880.         cmp     ebp, panel1_data
  1881.         jnz     .ret2
  1882. ; —¨á«® íªà ­®¢
  1883.         mov     eax, [num_screens]
  1884.         dec     eax
  1885.         jz      .ret2
  1886.         push    eax
  1887.         xor     eax, eax
  1888.         xor     edx, edx
  1889.         call    get_console_ptr
  1890.         mov     ah, [panel_nscreens_color]
  1891.         mov     al, '['
  1892.         stosw
  1893.         pop     eax
  1894.         push    -'0'
  1895. @@:
  1896.         xor     edx, edx
  1897.         div     [_10d]
  1898.         push    edx
  1899.         test    eax, eax
  1900.         jnz     @b
  1901. @@:
  1902.         pop     eax
  1903.         add     eax, '0'
  1904.         jz      @f
  1905.         mov     ah, [panel_nscreens_color]
  1906.         stosw
  1907.         jmp     @b
  1908. @@:
  1909.         mov     al, ']'
  1910.         mov     ah, [panel_nscreens_color]
  1911.         stosw
  1912. .ret2:
  1913.         ret
  1914.  
  1915. ;insert_last_dot:
  1916. ;        push    eax esi
  1917. ;        mov     ah, 0
  1918. ;.loop:
  1919. ;        lodsb
  1920. ;        test    al, al
  1921. ;        jz      .done
  1922. ;        cmp     al, '.'
  1923. ;        jnz     .loop
  1924. ;        mov     ah, 1
  1925. ;        jmp     .loop
  1926. ;.done:
  1927. ;        test    ah, ah
  1928. ;        jnz     @f
  1929. ;        mov     byte [esi-1], '.'
  1930. ;        mov     byte [esi], 0
  1931. ;@@:
  1932. ;        pop     esi eax
  1933. ;        ret
  1934.  
  1935. ;delete_last_dot:
  1936. ;        push    esi
  1937. ;@@:
  1938. ;        cmp     byte [esi], 0
  1939. ;        jz      @f
  1940. ;        inc     esi
  1941. ;        jmp     @b
  1942. ;@@:
  1943. ;        cmp     byte [esi-1], '.'
  1944. ;        jnz     @f
  1945. ;        mov     byte [esi-1], 0
  1946. ;@@:     pop     esi
  1947. ;        ret
  1948.  
  1949. read_folder:
  1950.         mov     eax, [ebp + panel1_nfa - panel1_data]
  1951.         mov     [dirinfo.size], eax
  1952.         shl     eax, 2
  1953.         add     eax, [ebp + panel1_files - panel1_data]
  1954.         mov     [dirinfo.dirdata], eax
  1955.         lea     eax, [ebp + panel1_dir - panel1_data]
  1956.         mov     [dirinfo.name], eax
  1957.         push    70
  1958.         pop     eax
  1959.         mov     ebx, dirinfo
  1960.         int     40h
  1961.         test    eax, eax
  1962.         jz      .ok
  1963.         cmp     eax, 6
  1964.         jz      .ok
  1965. ; TODO: add error handling
  1966.         mov     [ebp + panel1_numfiles - panel1_data], 2
  1967.         mov     eax, [ebp + panel1_nfa - panel1_data]
  1968.         shl     eax, 2
  1969.         add     eax, [ebp + panel1_files - panel1_data]
  1970.         add     eax, 32+40
  1971.         mov     word [eax], '..'
  1972.         mov     byte [eax+2], 0
  1973.         add     eax, 304
  1974.         mov     dword [eax], 'Read'
  1975.         mov     dword [eax+4], ' err'
  1976.         mov     dword [eax+8], 'or'
  1977.         mov     eax, [ebp + panel1_files - panel1_data]
  1978.         mov     dword [eax], 0
  1979.         mov     dword [eax+4], 304
  1980.         and     dword [ebp + panel1_index - panel1_data], 0
  1981.         and     dword [ebp + panel1_start - panel1_data], 0
  1982.         ret
  1983. .ok:
  1984.         mov     eax, [dirinfo.dirdata]
  1985.         cmp     [eax+8], ebx
  1986.         jz      .readdone
  1987.         push    eax
  1988.         mov     eax, [ebp + panel1_files - panel1_data]
  1989.         cmp     eax, buf1
  1990.         jz      @f
  1991.         cmp     eax, buf2
  1992.         jz      @f
  1993.         call    mf_free
  1994. @@:
  1995.         pop     eax
  1996.         mov     eax, [eax+8]
  1997.         add     eax, 0xF
  1998.         and     eax, not 0xF
  1999.         push    eax
  2000.         imul    eax, 4+304
  2001.         add     eax, 32
  2002.         call    mf_alloc
  2003.         test    eax, eax
  2004.         jnz     .succ1
  2005.         pop     eax
  2006. ; TODO: add error handling
  2007.         jmp     .readdone
  2008. .succ1:
  2009.         mov     [ebp + panel1_files - panel1_data], eax
  2010.         pop     [ebp + panel1_nfa - panel1_data]
  2011.         jmp     read_folder
  2012. .readdone:
  2013.         and     [ebp + panel1_start - panel1_data], 0
  2014.         and     [ebp + panel1_index - panel1_data], 0
  2015.         and     [ebp + panel1_start - panel1_data], 0
  2016.         mov     edi, [ebp + panel1_files - panel1_data]
  2017.         mov     eax, [ebp + panel1_nfa - panel1_data]
  2018.         lea     esi, [edi + eax*4 + 32]
  2019.         xor     eax, eax
  2020.         mov     ecx, [esi-32+4]
  2021.         jecxz   .loopdone
  2022. ; ˆ£­®à¨à㥬 ᯥ樠«ì­ë¥ ¢å®¤ë, ᮮ⢥âáâ¢ãî騥 ¯ ¯ª¥ '.' ¨ ¬¥âª¥ ⮬ 
  2023. .ptrinit:
  2024.         cmp     word [esi+eax+40], '.'
  2025.         jz      .loopcont
  2026.         test    byte [esi+eax], 8
  2027.         jnz     .loopcont
  2028.         stosd
  2029. .loopcont:
  2030.         add     eax, 304
  2031.         loop    .ptrinit
  2032. .loopdone:
  2033.         sub     edi, [ebp + panel1_files - panel1_data]
  2034.         shr     edi, 2
  2035.         mov     [ebp + panel1_numfiles - panel1_data], edi
  2036. .done:
  2037. ; ‘®àâ¨à®¢ª 
  2038. sort_files:
  2039.         movzx   eax, [ebp + panel1_sortmode - panel1_data]
  2040.         mov     ebx, [compare_fns + eax*4]
  2041.         mov     edx, [ebp + panel1_files - panel1_data]
  2042.         mov     ecx, [ebp + panel1_numfiles - panel1_data]
  2043.         call    sort
  2044.         ret
  2045.  
  2046. compare_name:
  2047.         push    eax
  2048.         mov     eax, [ebp + panel1_nfa - panel1_data]
  2049.         add     esi, [ebp + panel1_files - panel1_data]
  2050.         add     edi, [ebp + panel1_files - panel1_data]
  2051.         lea     esi, [esi+eax*4+0x20]
  2052.         lea     edi, [edi+eax*4+0x20]
  2053.         pop     eax
  2054.         cmp     word [esi+40], '..'
  2055.         jnz     @f
  2056.         cmp     byte [esi+42], 0
  2057.         jz      .less
  2058. @@:     cmp     word [edi+40], '..'
  2059.         jnz     @f
  2060.         cmp     byte [edi+42], 0
  2061.         jz      .greater
  2062. @@:
  2063.         test    byte [esi], 10h
  2064.         jnz     .1dir
  2065.         test    byte [edi], 10h
  2066.         jnz     .greater
  2067. .eq1:
  2068.         add     esi, 40
  2069.         add     edi, 40
  2070.         jmp     strcmpi
  2071. .greater:
  2072.         test    esi, esi
  2073.         ret
  2074. .1dir:
  2075.         test    byte [edi], 10h
  2076.         jnz     .eq1
  2077. .less:
  2078.         xor     edi, edi
  2079.         stc
  2080.         ret
  2081.  
  2082. compare_name_rev:
  2083.         push    eax
  2084.         mov     eax, [ebp + panel1_nfa - panel1_data]
  2085.         add     esi, [ebp + panel1_files - panel1_data]
  2086.         add     edi, [ebp + panel1_files - panel1_data]
  2087.         lea     esi, [esi+eax*4+0x20]
  2088.         lea     edi, [edi+eax*4+0x20]
  2089.         pop     eax
  2090.         cmp     word [esi+40], '..'
  2091.         jnz     @f
  2092.         cmp     byte [esi+42], 0
  2093.         jz      .less
  2094. @@:     cmp     word [edi+40], '..'
  2095.         jnz     @f
  2096.         cmp     byte [edi+42], 0
  2097.         jz      .greater
  2098. @@:
  2099.         test    byte [esi], 10h
  2100.         jnz     .1dir
  2101.         test    byte [edi], 10h
  2102.         jnz     .greater
  2103. .eq1:
  2104.         add     esi, 40
  2105.         add     edi, 40
  2106.         xchg    esi, edi
  2107.         jmp     strcmpi
  2108. .greater:
  2109.         test    esi, esi
  2110.         ret
  2111. .1dir:
  2112.         test    byte [edi], 10h
  2113.         jnz     .eq1
  2114. .less:
  2115.         xor     edi, edi
  2116.         stc
  2117.         ret
  2118.  
  2119. strcmpi:
  2120.         push    eax
  2121. @@:
  2122.         lodsb
  2123.         call    match_symbol
  2124.         jnz     .ret
  2125.         inc     edi
  2126.         test    al, al
  2127.         jnz     @b
  2128. .ret:
  2129.         pop     eax
  2130.         ret
  2131.  
  2132. compare_ext:
  2133.         push    eax
  2134.         mov     eax, [ebp + panel1_nfa - panel1_data]
  2135.         add     esi, [ebp + panel1_files - panel1_data]
  2136.         add     edi, [ebp + panel1_files - panel1_data]
  2137.         lea     esi, [esi+eax*4+0x20]
  2138.         lea     edi, [edi+eax*4+0x20]
  2139.         pop     eax
  2140.         cmp     word [esi+40], '..'
  2141.         jnz     @f
  2142.         cmp     byte [esi+42], 0
  2143.         jz      .less
  2144. @@:     cmp     word [edi+40], '..'
  2145.         jnz     @f
  2146.         cmp     byte [edi+42], 0
  2147.         jz      .greater
  2148. @@:
  2149.         test    byte [esi], 10h
  2150.         jnz     .1dir
  2151.         test    byte [edi], 10h
  2152.         jnz     .greater
  2153. .eq1:
  2154.         add     esi, 40
  2155.         add     edi, 40
  2156.         push    esi edi
  2157.         call    seek_ext
  2158.         xchg    esi, edi
  2159.         call    seek_ext
  2160.         xchg    esi, edi
  2161.         call    strcmpi
  2162.         jnz     .ret
  2163.         pop     edi esi
  2164.         jmp     strcmpi
  2165. .ret:
  2166.         pop     edi esi
  2167.         ret
  2168. .greater:
  2169.         test    esi, esi
  2170.         ret
  2171. .1dir:
  2172.         test    byte [edi], 10h
  2173.         jnz     .eq1
  2174. .less:
  2175.         xor     edi, edi
  2176.         stc
  2177.         ret
  2178.  
  2179. compare_ext_rev:
  2180.         push    eax
  2181.         mov     eax, [ebp + panel1_nfa - panel1_data]
  2182.         add     esi, [ebp + panel1_files - panel1_data]
  2183.         add     edi, [ebp + panel1_files - panel1_data]
  2184.         lea     esi, [esi+eax*4+0x20]
  2185.         lea     edi, [edi+eax*4+0x20]
  2186.         pop     eax
  2187.         cmp     word [esi+40], '..'
  2188.         jnz     @f
  2189.         cmp     byte [esi+42], 0
  2190.         jz      .less
  2191. @@:     cmp     word [edi+40], '..'
  2192.         jnz     @f
  2193.         cmp     byte [edi+42], 0
  2194.         jz      .greater
  2195. @@:
  2196.         test    byte [esi], 10h
  2197.         jnz     .1dir
  2198.         test    byte [edi], 10h
  2199.         jnz     .greater
  2200. .eq1:
  2201.         add     esi, 40
  2202.         add     edi, 40
  2203.         push    esi edi
  2204.         call    seek_ext
  2205.         xchg    esi, edi
  2206.         call    seek_ext
  2207.         call    strcmpi
  2208.         jnz     .ret
  2209.         pop     edi esi
  2210.         xchg    esi, edi
  2211.         jmp     strcmpi
  2212. .ret:
  2213.         pop     edi esi
  2214.         ret
  2215. .greater:
  2216.         test    esi, esi
  2217.         ret
  2218. .1dir:
  2219.         test    byte [edi], 10h
  2220.         jnz     .eq1
  2221. .less:
  2222.         xor     edi, edi
  2223.         stc
  2224.         ret
  2225.  
  2226. seek_ext:
  2227.         push    eax
  2228.         xor     eax, eax
  2229. .l:
  2230.         inc     esi
  2231.         cmp     byte [esi-1], '.'
  2232.         jnz     @f
  2233.         mov     eax, esi
  2234. @@:
  2235.         cmp     byte [esi-1], 0
  2236.         jnz     .l
  2237.         test    eax, eax
  2238.         jnz     @f
  2239.         lea     eax, [esi-1]
  2240. @@:
  2241.         mov     esi, eax
  2242.         pop     eax
  2243.         ret
  2244.  
  2245. compare_modified:
  2246.         push    eax
  2247.         mov     eax, [ebp + panel1_nfa - panel1_data]
  2248.         add     esi, [ebp + panel1_files - panel1_data]
  2249.         add     edi, [ebp + panel1_files - panel1_data]
  2250.         lea     esi, [esi+eax*4+0x20]
  2251.         lea     edi, [edi+eax*4+0x20]
  2252.         pop     eax
  2253.         cmp     word [esi+40], '..'
  2254.         jnz     @f
  2255.         cmp     byte [esi+42], 0
  2256.         jz      .less
  2257. @@:     cmp     word [edi+40], '..'
  2258.         jnz     @f
  2259.         cmp     byte [edi+42], 0
  2260.         jz      .greater
  2261. @@:
  2262.         test    byte [esi], 10h
  2263.         jnz     .1dir
  2264.         test    byte [edi], 10h
  2265.         jnz     .greater
  2266. .eq1:
  2267.         push    edi
  2268.         mov     edi, [edi+28]
  2269.         cmp     edi, [esi+28]
  2270.         pop     edi
  2271.         jnz     @f
  2272.         push    edi
  2273.         mov     edi, [edi+24]
  2274.         cmp     edi, [esi+24]
  2275.         pop     edi
  2276.         jnz     @f
  2277.         add     esi, 40
  2278.         add     edi, 40
  2279.         jmp     strcmpi
  2280. @@:
  2281.         ret
  2282. .greater:
  2283.         test    esi, esi
  2284.         ret
  2285. .1dir:
  2286.         test    byte [edi], 10h
  2287.         jnz     .eq1
  2288. .less:
  2289.         xor     edi, edi
  2290.         stc
  2291.         ret
  2292.  
  2293. compare_modified_rev:
  2294.         push    eax
  2295.         mov     eax, [ebp + panel1_nfa - panel1_data]
  2296.         add     esi, [ebp + panel1_files - panel1_data]
  2297.         add     edi, [ebp + panel1_files - panel1_data]
  2298.         lea     esi, [esi+eax*4+0x20]
  2299.         lea     edi, [edi+eax*4+0x20]
  2300.         pop     eax
  2301.         cmp     word [esi+40], '..'
  2302.         jnz     @f
  2303.         cmp     byte [esi+42], 0
  2304.         jz      .less
  2305. @@:     cmp     word [edi+40], '..'
  2306.         jnz     @f
  2307.         cmp     byte [edi+42], 0
  2308.         jz      .greater
  2309. @@:
  2310.         test    byte [esi], 10h
  2311.         jnz     .1dir
  2312.         test    byte [edi], 10h
  2313.         jnz     .greater
  2314. .eq1:
  2315.         push    esi
  2316.         mov     esi, [esi+28]
  2317.         cmp     esi, [edi+28]
  2318.         pop     esi
  2319.         jnz     @f
  2320.         push    esi
  2321.         mov     esi, [esi+24]
  2322.         cmp     esi, [edi+24]
  2323.         pop     esi
  2324.         jnz     @f
  2325.         add     esi, 40
  2326.         add     edi, 40
  2327.         xchg    esi, edi
  2328.         jmp     strcmpi
  2329. @@:
  2330.         ret
  2331. .greater:
  2332.         test    esi, esi
  2333.         ret
  2334. .1dir:
  2335.         test    byte [edi], 10h
  2336.         jnz     .eq1
  2337. .less:
  2338.         xor     edi, edi
  2339.         stc
  2340.         ret
  2341.  
  2342. compare_size:
  2343.         push    eax
  2344.         mov     eax, [ebp + panel1_nfa - panel1_data]
  2345.         add     esi, [ebp + panel1_files - panel1_data]
  2346.         add     edi, [ebp + panel1_files - panel1_data]
  2347.         lea     esi, [esi+eax*4+0x20]
  2348.         lea     edi, [edi+eax*4+0x20]
  2349.         pop     eax
  2350.         cmp     word [esi+40], '..'
  2351.         jnz     @f
  2352.         cmp     byte [esi+42], 0
  2353.         jz      .less
  2354. @@:     cmp     word [edi+40], '..'
  2355.         jnz     @f
  2356.         cmp     byte [edi+42], 0
  2357.         jz      .greater
  2358. @@:
  2359.         test    byte [esi], 10h
  2360.         jnz     .1dir
  2361.         test    byte [edi], 10h
  2362.         jnz     .greater
  2363. .eq1:
  2364.         push    edi
  2365.         mov     edi, [edi+36]
  2366.         cmp     edi, [esi+36]
  2367.         pop     edi
  2368.         jnz     @f
  2369.         push    edi
  2370.         mov     edi, [edi+32]
  2371.         cmp     edi, [esi+32]
  2372.         pop     edi
  2373.         jnz     @f
  2374.         add     esi, 40
  2375.         add     edi, 40
  2376.         jmp     strcmpi
  2377. @@:
  2378.         ret
  2379. .greater:
  2380.         test    esi, esi
  2381.         ret
  2382. .1dir:
  2383.         test    byte [edi], 10h
  2384.         jnz     .eq1
  2385. .less:
  2386.         xor     edi, edi
  2387.         stc
  2388.         ret
  2389.  
  2390. compare_size_rev:
  2391.         push    eax
  2392.         mov     eax, [ebp + panel1_nfa - panel1_data]
  2393.         add     esi, [ebp + panel1_files - panel1_data]
  2394.         add     edi, [ebp + panel1_files - panel1_data]
  2395.         lea     esi, [esi+eax*4+0x20]
  2396.         lea     edi, [edi+eax*4+0x20]
  2397.         pop     eax
  2398.         cmp     word [esi+40], '..'
  2399.         jnz     @f
  2400.         cmp     byte [esi+42], 0
  2401.         jz      .less
  2402. @@:     cmp     word [edi+40], '..'
  2403.         jnz     @f
  2404.         cmp     byte [edi+42], 0
  2405.         jz      .greater
  2406. @@:
  2407.         test    byte [esi], 10h
  2408.         jnz     .1dir
  2409.         test    byte [edi], 10h
  2410.         jnz     .greater
  2411. .eq1:
  2412.         push    esi
  2413.         mov     esi, [esi+36]
  2414.         cmp     esi, [edi+36]
  2415.         pop     esi
  2416.         jnz     @f
  2417.         push    esi
  2418.         mov     esi, [esi+32]
  2419.         cmp     esi, [edi+32]
  2420.         pop     esi
  2421.         jnz     @f
  2422.         add     esi, 40
  2423.         add     edi, 40
  2424.         xchg    esi, edi
  2425.         jmp     strcmpi
  2426. @@:
  2427.         ret
  2428. .greater:
  2429.         test    esi, esi
  2430.         ret
  2431. .1dir:
  2432.         test    byte [edi], 10h
  2433.         jnz     .eq1
  2434. .less:
  2435.         xor     edi, edi
  2436.         stc
  2437.         ret
  2438.  
  2439. compare_unordered:
  2440.         cmp     esi, edi
  2441.         ret
  2442. compare_unordered_rev:
  2443.         push    eax
  2444.         mov     eax, [ebp + panel1_nfa - panel1_data]
  2445.         add     esi, [ebp + panel1_files - panel1_data]
  2446.         add     edi, [ebp + panel1_files - panel1_data]
  2447.         lea     esi, [esi+eax*4+0x20]
  2448.         lea     edi, [edi+eax*4+0x20]
  2449.         pop     eax
  2450.         cmp     word [esi+40], '..'
  2451.         jnz     @f
  2452.         cmp     byte [esi+42], 0
  2453.         jz      .less
  2454. @@:     cmp     word [edi+40], '..'
  2455.         jnz     @f
  2456.         cmp     byte [edi+42], 0
  2457.         jz      .greater
  2458. @@:
  2459.         cmp     edi, esi
  2460.         ret
  2461. .greater:
  2462.         test    esi, esi
  2463.         ret
  2464. .less:
  2465.         xor     edi, edi
  2466.         stc
  2467.         ret
  2468.  
  2469. compare_created:
  2470.         push    eax
  2471.         mov     eax, [ebp + panel1_nfa - panel1_data]
  2472.         add     esi, [ebp + panel1_files - panel1_data]
  2473.         add     edi, [ebp + panel1_files - panel1_data]
  2474.         lea     esi, [esi+eax*4+0x20]
  2475.         lea     edi, [edi+eax*4+0x20]
  2476.         pop     eax
  2477.         cmp     word [esi+40], '..'
  2478.         jnz     @f
  2479.         cmp     byte [esi+42], 0
  2480.         jz      .less
  2481. @@:     cmp     word [edi+40], '..'
  2482.         jnz     @f
  2483.         cmp     byte [edi+42], 0
  2484.         jz      .greater
  2485. @@:
  2486.         test    byte [esi], 10h
  2487.         jnz     .1dir
  2488.         test    byte [edi], 10h
  2489.         jnz     .greater
  2490. .eq1:
  2491.         push    edi
  2492.         mov     edi, [edi+12]
  2493.         cmp     edi, [esi+12]
  2494.         pop     edi
  2495.         jnz     @f
  2496.         push    edi
  2497.         mov     edi, [edi+8]
  2498.         cmp     edi, [esi+8]
  2499.         pop     edi
  2500.         jnz     @f
  2501.         add     esi, 40
  2502.         add     edi, 40
  2503.         jmp     strcmpi
  2504. @@:
  2505.         ret
  2506. .greater:
  2507.         test    esi, esi
  2508.         ret
  2509. .1dir:
  2510.         test    byte [edi], 10h
  2511.         jnz     .eq1
  2512. .less:
  2513.         xor     edi, edi
  2514.         stc
  2515.         ret
  2516.  
  2517. compare_created_rev:
  2518.         push    eax
  2519.         mov     eax, [ebp + panel1_nfa - panel1_data]
  2520.         add     esi, [ebp + panel1_files - panel1_data]
  2521.         add     edi, [ebp + panel1_files - panel1_data]
  2522.         lea     esi, [esi+eax*4+0x20]
  2523.         lea     edi, [edi+eax*4+0x20]
  2524.         pop     eax
  2525.         cmp     word [esi+40], '..'
  2526.         jnz     @f
  2527.         cmp     byte [esi+42], 0
  2528.         jz      .less
  2529. @@:     cmp     word [edi+40], '..'
  2530.         jnz     @f
  2531.         cmp     byte [edi+42], 0
  2532.         jz      .greater
  2533. @@:
  2534.         test    byte [esi], 10h
  2535.         jnz     .1dir
  2536.         test    byte [edi], 10h
  2537.         jnz     .greater
  2538. .eq1:
  2539.         push    esi
  2540.         mov     esi, [esi+12]
  2541.         cmp     esi, [edi+12]
  2542.         pop     esi
  2543.         jnz     @f
  2544.         push    esi
  2545.         mov     esi, [esi+8]
  2546.         cmp     esi, [edi+8]
  2547.         pop     esi
  2548.         jnz     @f
  2549.         add     esi, 40
  2550.         add     edi, 40
  2551.         xchg    esi, edi
  2552.         jmp     strcmpi
  2553. @@:
  2554.         ret
  2555. .greater:
  2556.         test    esi, esi
  2557.         ret
  2558. .1dir:
  2559.         test    byte [edi], 10h
  2560.         jnz     .eq1
  2561. .less:
  2562.         xor     edi, edi
  2563.         stc
  2564.         ret
  2565.  
  2566. compare_accessed:
  2567.         push    eax
  2568.         mov     eax, [ebp + panel1_nfa - panel1_data]
  2569.         add     esi, [ebp + panel1_files - panel1_data]
  2570.         add     edi, [ebp + panel1_files - panel1_data]
  2571.         lea     esi, [esi+eax*4+0x20]
  2572.         lea     edi, [edi+eax*4+0x20]
  2573.         pop     eax
  2574.         cmp     word [esi+40], '..'
  2575.         jnz     @f
  2576.         cmp     byte [esi+42], 0
  2577.         jz      .less
  2578. @@:     cmp     word [edi+40], '..'
  2579.         jnz     @f
  2580.         cmp     byte [edi+42], 0
  2581.         jz      .greater
  2582. @@:
  2583.         test    byte [esi], 10h
  2584.         jnz     .1dir
  2585.         test    byte [edi], 10h
  2586.         jnz     .greater
  2587. .eq1:
  2588.         push    edi
  2589.         mov     edi, [edi+20]
  2590.         cmp     edi, [esi+20]
  2591.         pop     edi
  2592.         jnz     @f
  2593.         push    edi
  2594.         mov     edi, [edi+16]
  2595.         cmp     edi, [esi+16]
  2596.         pop     edi
  2597.         jnz     @f
  2598.         add     esi, 40
  2599.         add     edi, 40
  2600.         jmp     strcmpi
  2601. @@:
  2602.         ret
  2603. .greater:
  2604.         test    esi, esi
  2605.         ret
  2606. .1dir:
  2607.         test    byte [edi], 10h
  2608.         jnz     .eq1
  2609. .less:
  2610.         xor     edi, edi
  2611.         stc
  2612.         ret
  2613.  
  2614. compare_accessed_rev:
  2615.         push    eax
  2616.         mov     eax, [ebp + panel1_nfa - panel1_data]
  2617.         add     esi, [ebp + panel1_files - panel1_data]
  2618.         add     edi, [ebp + panel1_files - panel1_data]
  2619.         lea     esi, [esi+eax*4+0x20]
  2620.         lea     edi, [edi+eax*4+0x20]
  2621.         pop     eax
  2622.         cmp     word [esi+40], '..'
  2623.         jnz     @f
  2624.         cmp     byte [esi+42], 0
  2625.         jz      .less
  2626. @@:     cmp     word [edi+40], '..'
  2627.         jnz     @f
  2628.         cmp     byte [edi+42], 0
  2629.         jz      .greater
  2630. @@:
  2631.         test    byte [esi], 10h
  2632.         jnz     .1dir
  2633.         test    byte [edi], 10h
  2634.         jnz     .greater
  2635. .eq1:
  2636.         push    esi
  2637.         mov     esi, [esi+20]
  2638.         cmp     esi, [edi+20]
  2639.         pop     esi
  2640.         jnz     @f
  2641.         push    esi
  2642.         mov     esi, [esi+16]
  2643.         cmp     esi, [edi+16]
  2644.         pop     esi
  2645.         jnz     @f
  2646.         add     esi, 40
  2647.         add     edi, 40
  2648.         xchg    esi, edi
  2649.         jmp     strcmpi
  2650. @@:
  2651.         ret
  2652. .greater:
  2653.         test    esi, esi
  2654.         ret
  2655. .1dir:
  2656.         test    byte [edi], 10h
  2657.         jnz     .eq1
  2658. .less:
  2659.         xor     edi, edi
  2660.         stc
  2661.         ret
  2662.  
  2663. match_mask:
  2664. ; in: esi->name, edi->mask
  2665. ; out: CF clear <=> match
  2666.         pusha
  2667.         xchg    esi, edi
  2668. .main_cycle:
  2669.         push    esi
  2670. @@:
  2671.         lodsb
  2672.         test    al, al
  2673.         jz      @f
  2674.         cmp     al, ','
  2675.         jz      @f
  2676.         cmp     al, '|'
  2677.         jnz     @b
  2678. @@:
  2679.         mov     [esi-1], byte 0
  2680.         xchg    esi, [esp]
  2681.         call    match_single_mask
  2682.         pop     esi
  2683.         mov     [esi-1], al
  2684.         jnc     .found
  2685.         cmp     al, ','
  2686.         jz      .main_cycle
  2687. .done_fail:
  2688.         stc
  2689.         popa
  2690.         ret
  2691. .found:
  2692.         test    al, al
  2693.         jz      .done_succ
  2694.         cmp     al, '|'
  2695.         jz      .test_exclude
  2696.         lodsb
  2697.         jmp     .found
  2698. .done_succ:
  2699.         clc
  2700.         popa
  2701.         ret
  2702. .test_exclude:
  2703.         push    esi
  2704. @@:
  2705.         lodsb
  2706.         test    al, al
  2707.         jz      @f
  2708.         cmp     al, ','
  2709.         jnz     @b
  2710. @@:
  2711.         mov     byte [esi-1], 0
  2712.         xchg    esi, [esp]
  2713.         call    match_single_mask
  2714.         pop     esi
  2715.         mov     [esi-1], al
  2716.         jnc     .done_fail
  2717.         test    al, al
  2718.         jz      .done_succ
  2719.         jmp     .test_exclude
  2720.  
  2721. match_single_mask:
  2722. ; in: esi->mask, edi->name
  2723. ; out: CF clear <=> match
  2724.         pusha
  2725. .mask_symbol:
  2726.         lodsb
  2727.         test    al, al
  2728.         jz      .mask_done
  2729.         cmp     al, '*'
  2730.         jz      .asterisk
  2731.         cmp     al, '?'
  2732.         jz      .quest
  2733.         cmp     al, '['
  2734.         jz      .list
  2735.         call    match_symbol
  2736.         jnz     .done_fail
  2737.         inc     edi
  2738.         jmp     .mask_symbol
  2739. .done_fail:
  2740.         stc
  2741.         popa
  2742.         ret
  2743. .mask_done:
  2744.         scasb
  2745.         jnz     .done_fail
  2746. .done_succ:
  2747.         clc
  2748.         popa
  2749.         ret
  2750. .quest:
  2751.         mov     al, 0
  2752.         scasb
  2753.         jz      .done_fail
  2754.         jmp     .mask_symbol
  2755. .list:
  2756.         lodsb
  2757.         cmp     al, ']'
  2758.         jz      .done_fail
  2759.         cmp     byte [esi+1], '-'
  2760.         jz      .range
  2761.         call    match_symbol
  2762.         jnz     .list
  2763. .listok:
  2764.         inc     edi
  2765. @@:
  2766.         lodsb
  2767.         cmp     al, ']'
  2768.         jnz     @b
  2769.         jmp     .mask_symbol
  2770. .range:
  2771.         call    match_symbol
  2772.         ja      @f
  2773.         mov     al, [esi+2]
  2774.         call    match_symbol
  2775.         jae     .listok
  2776. @@:
  2777.         inc     esi
  2778.         jmp     .list
  2779. .asterisk:
  2780.         push    edi
  2781. @@:
  2782.         call    match_single_mask
  2783.         jnc     @f
  2784.         mov     al, 0
  2785.         scasb
  2786.         jnz     @b
  2787.         pop     edi
  2788.         jmp     .done_fail
  2789. @@:
  2790.         pop     edi
  2791.         jmp     .done_succ
  2792.  
  2793. tolower:
  2794.         cmp     al, 'A'
  2795.         jb      @f
  2796.         cmp     al, 'Z'
  2797.         ja      @f
  2798.         add     al, ' '
  2799. @@:     ret
  2800.  
  2801. match_symbol:
  2802. ; in: al,[edi]=symbols
  2803. ; out: flags as 'cmp al,[edi]'
  2804.         push    eax
  2805.         call    tolower
  2806.         mov     ah, [edi]
  2807.         xchg    al, ah
  2808.         call    tolower
  2809.         cmp     ah, al
  2810.         pop     eax
  2811.         ret
  2812.  
  2813.  
  2814. header  db      'Kolibri Far 0.13'
  2815. ;.length = $ - header
  2816.         db      0
  2817.  
  2818. nomem_draw      db      'No memory for redraw.',0
  2819. .size = $ - nomem_draw
  2820.  
  2821. def_left_dir    db      '/rd/1',0
  2822. def_right_dir   db      '/hd0/1',0
  2823.  
  2824. if lang eq ru
  2825. aFolder         db      ' ¯ª '
  2826. .size = $-aFolder
  2827. aUp             db      '‚¢¥àå'
  2828. .size = $-aUp
  2829. aDrive          db      '„¨áª',0
  2830. aScreens        db      'ªà ­ë',0
  2831. else
  2832. aFolder         db      'Folder'
  2833. .size = $-aFolder
  2834. aUp             db      'Up'
  2835. .size = $-aUp
  2836. aDrive          db      'Drive',0
  2837. aScreens        db      'Screens',0
  2838. end if
  2839.  
  2840. _10d dd 10
  2841. _100d dd 100
  2842. _10 db 10
  2843. _100 db 100
  2844.  
  2845. fpu_cw  dw      000011100111111b
  2846.  
  2847. keybar_panels:
  2848. if lang eq ru
  2849. ; ¡¥§ ª« ¢¨è-¬®¤¨ä¨ª â®à®¢
  2850.         db      '®¬®éì'
  2851.         db      '®«ì§Œ'
  2852.         db      'à®á¬ '
  2853.         db      '¥¤ ªâ'
  2854.         db      'Š®¯¨à '
  2855.         db      '¥à¥­ '
  2856.         db      ' ¯ª  '
  2857.         db      '“¤ «¥­'
  2858.         db      'Š®­äŒ­'
  2859.         db      '‚ë室 '
  2860.         db      'Œ®¤ã«¨'
  2861.         db      'ªà ­ë'
  2862. ; Shift
  2863.         db      '„®¡ ¢«'
  2864.         db      ' á¯ ª'
  2865.         db      '€à劮¬'
  2866.         db      '¥¤ ª.'
  2867.         db      'Š®¯¨à '
  2868.         db      '¥à¥¨¬'
  2869.         db      '      '
  2870.         db      '“¤ «¥­'
  2871.         db      '‘®åà ­'
  2872.         db      '®á«¤­'
  2873.         db      'ƒà㯯ë'
  2874.         db      '‚ë¡à ­'
  2875. ; Ctrl
  2876.         db      '‹¥¢ ï '
  2877.         db      'à ¢ ï'
  2878.         db      'ˆ¬ï   '
  2879.         db      ' áè¨à'
  2880.         db      'Œ®¤¨ä '
  2881.         db      ' §¬¥à'
  2882.         db      '¥á®àâ'
  2883.         db      '‘®§¤ ­'
  2884.         db      '„®áâã¯'
  2885.         db      'Ž¯¨á ­'
  2886.         db      '‚« ¤¥«'
  2887.         db      '‘®àâ  '
  2888. ; Ctrl+Shift
  2889.         db      '      '
  2890.         db      '      '
  2891.         db      'à®á¬ '
  2892.         db      '¥¤ ªâ'
  2893.         db      '      '
  2894.         db      '      '
  2895.         db      '      '
  2896.         db      '      '
  2897.         db      '      '
  2898.         db      '      '
  2899.         db      '      '
  2900.         db      '      '
  2901. ; Alt
  2902.         db      '‹¥¢ ï '
  2903.         db      'à ¢ ï'
  2904.         db      '‘¬®âà.'
  2905.         db      '¥¤ ª.'
  2906.         db      '¥ç âì'
  2907.         db      '‘¢ï§ì '
  2908.         db      'ˆáª âì'
  2909.         db      'ˆáâ®à '
  2910.         db      '‚¨¤¥® '
  2911.         db      '„¥à¥¢®'
  2912.         db      'ˆáâà '
  2913.         db      'ˆá⏠¯'
  2914. ; Alt+Shift
  2915.         db      '      '
  2916.         db      '      '
  2917.         db      '      '
  2918.         db      '      '
  2919.         db      '      '
  2920.         db      '      '
  2921.         db      '      '
  2922.         db      '      '
  2923.         db      'Š®­ä«'
  2924.         db      '      '
  2925.         db      '      '
  2926.         db      '      '
  2927. ; Alt+Ctrl
  2928. times 12 db     '      '
  2929. ; Alt+Ctrl+Shift
  2930. times 12 db     '      '
  2931. else
  2932. ; No modificators
  2933.         db      'Help  '
  2934.         db      'UserMn'
  2935.         db      'View  '
  2936.         db      'Edit  '
  2937.         db      'Copy  '
  2938.         db      'RenMov'
  2939.         db      'MkFold'
  2940.         db      'Delete'
  2941.         db      'ConfMn'
  2942.         db      'Quit  '
  2943.         db      'Plugin'
  2944.         db      'Screen'
  2945. ; Shift
  2946.         db      'Add   '
  2947.         db      'Extrct'
  2948.         db      'ArcCmd'
  2949.         db      'Edit..'
  2950.         db      'Copy  '
  2951.         db      'Rename'
  2952.         db      '      '
  2953.         db      'Delete'
  2954.         db      'Save  '
  2955.         db      'Last  '
  2956.         db      'Group '
  2957.         db      'SelUp '
  2958. ; Ctrl
  2959.         db      'Left  '
  2960.         db      'Right '
  2961.         db      'Name  '
  2962.         db      'Extens'
  2963.         db      'Modifn'
  2964.         db      'Size  '
  2965.         db      'Unsort'
  2966.         db      'Creatn'
  2967.         db      'Access'
  2968.         db      'Descr '
  2969.         db      'Owner '
  2970.         db      'Sort  '
  2971. ; Ctrl+Shift
  2972.         db      '      '
  2973.         db      '      '
  2974.         db      'View  '
  2975.         db      'Edit  '
  2976.         db      '      '
  2977.         db      '      '
  2978.         db      '      '
  2979.         db      '      '
  2980.         db      '      '
  2981.         db      '      '
  2982.         db      '      '
  2983.         db      '      '
  2984. ; Alt
  2985.         db      'Left  '
  2986.         db      'Right '
  2987.         db      'View..'
  2988.         db      'Edit..'
  2989.         db      'Print '
  2990.         db      'MkLink'
  2991.         db      'Find  '
  2992.         db      'Histry'
  2993.         db      'Video '
  2994.         db      'Tree  '
  2995.         db      'ViewHs'
  2996.         db      'FoldHs'
  2997. ; Alt+Shift
  2998.         db      '      '
  2999.         db      '      '
  3000.         db      '      '
  3001.         db      '      '
  3002.         db      '      '
  3003.         db      '      '
  3004.         db      '      '
  3005.         db      '      '
  3006.         db      'ConfPl'
  3007.         db      '      '
  3008.         db      '      '
  3009.         db      '      '
  3010. ; Alt+Ctrl
  3011. times 12 db     '      '
  3012. ; Alt+Ctrl+Shift
  3013. times 12 db     '      '
  3014. end if
  3015.  
  3016. keybar_viewer:
  3017. if lang eq ru
  3018. ; ¡¥§ ª« ¢¨è-¬®¤¨ä¨ª â®à®¢
  3019.         db      '®¬®éì'
  3020.         db      ' §¢¥à'
  3021.         db      '‚ë室 '
  3022.         db      'Š®¤   '
  3023.         db      '      '
  3024.         db      '¥¤ ªâ'
  3025.         db      '®¨áª '
  3026. keybar_cp:
  3027.         db      'cp1251'
  3028.         db      '      '
  3029.         db      '‚ë室 '
  3030.         db      'Œ®¤ã«¨'
  3031.         db      'ªà ­ë'
  3032. ; Shift
  3033.         db      '      '
  3034.         db      '‘«®¢  '
  3035.         db      '      '
  3036.         db      '      '
  3037.         db      '      '
  3038.         db      '      '
  3039.         db      '„ «ìè¥'
  3040.         db      '’ ¡«¨æ'
  3041.         db      '      '
  3042.         db      '      '
  3043.         db      '      '
  3044.         db      '      '
  3045. ; Ctrl
  3046.         db      '      '
  3047.         db      '      '
  3048.         db      '      '
  3049.         db      '      '
  3050.         db      '      '
  3051.         db      '      '
  3052.         db      '      '
  3053.         db      '      '
  3054.         db      '      '
  3055.         db      '®§¨æ '
  3056.         db      '      '
  3057.         db      '      '
  3058. ; Ctrl+Shift
  3059.         db      '      '
  3060.         db      '      '
  3061.         db      '      '
  3062.         db      '      '
  3063.         db      '      '
  3064.         db      '      '
  3065.         db      '      '
  3066.         db      '      '
  3067.         db      '      '
  3068.         db      '      '
  3069.         db      '      '
  3070.         db      '      '
  3071. ; Alt
  3072.         db      '      '
  3073.         db      '      '
  3074.         db      '      '
  3075.         db      '      '
  3076.         db      '¥ç âì'
  3077.         db      '      '
  3078.         db      ' § ¤ '
  3079.         db      '¥à¥©â'
  3080.         db      '‚¨¤¥® '
  3081.         db      '      '
  3082.         db      'ˆáâà '
  3083.         db      '      '
  3084. ; Alt+Shift
  3085.         db      '      '
  3086.         db      '      '
  3087.         db      '      '
  3088.         db      '      '
  3089.         db      '      '
  3090.         db      '      '
  3091.         db      '      '
  3092.         db      '      '
  3093.         db      'Š®­ä¨£'
  3094.         db      '      '
  3095.         db      '      '
  3096.         db      '      '
  3097. ; Alt+Ctrl
  3098. times 12 db     '      '
  3099. ; Alt+Ctrl+Shift
  3100. times 12 db     '      '
  3101. else
  3102. ; No modificators
  3103.         db      'Help  '
  3104.         db      'Unwrap'
  3105.         db      'Quit  '
  3106.         db      'Hex   '
  3107.         db      '      '
  3108.         db      'Edit  '
  3109.         db      'Search'
  3110. keybar_cp:
  3111.         db      'cp1251'
  3112.         db      '      '
  3113.         db      'Quit  '
  3114.         db      'Plugin'
  3115.         db      'Screen'
  3116. ; Shift
  3117.         db      '      '
  3118.         db      'WWrap '
  3119.         db      '      '
  3120.         db      '      '
  3121.         db      '      '
  3122.         db      '      '
  3123.         db      'Next  '
  3124.         db      'Table '
  3125.         db      '      '
  3126.         db      '      '
  3127.         db      '      '
  3128.         db      '      '
  3129. ; Ctrl
  3130.         db      '      '
  3131.         db      '      '
  3132.         db      '      '
  3133.         db      '      '
  3134.         db      '      '
  3135.         db      '      '
  3136.         db      '      '
  3137.         db      '      '
  3138.         db      '      '
  3139.         db      'GoFile'
  3140.         db      '      '
  3141.         db      '      '
  3142. ; Ctrl+Shift
  3143.         db      '      '
  3144.         db      '      '
  3145.         db      '      '
  3146.         db      '      '
  3147.         db      '      '
  3148.         db      '      '
  3149.         db      '      '
  3150.         db      '      '
  3151.         db      '      '
  3152.         db      '      '
  3153.         db      '      '
  3154.         db      '      '
  3155. ; Alt
  3156.         db      '      '
  3157.         db      '      '
  3158.         db      '      '
  3159.         db      '      '
  3160.         db      'Print '
  3161.         db      '      '
  3162.         db      'Prev  '
  3163.         db      'Goto  '
  3164.         db      'Video '
  3165.         db      '      '
  3166.         db      'ViewHs'
  3167.         db      '      '
  3168. ; Alt+Shift
  3169.         db      '      '
  3170.         db      '      '
  3171.         db      '      '
  3172.         db      '      '
  3173.         db      '      '
  3174.         db      '      '
  3175.         db      '      '
  3176.         db      '      '
  3177.         db      'Config'
  3178.         db      '      '
  3179.         db      '      '
  3180.         db      '      '
  3181. ; Alt+Ctrl
  3182. times 12 db     '      '
  3183. ; Alt+Ctrl+Shift
  3184. times 12 db     '      '
  3185. end if
  3186.  
  3187.         align   4
  3188. cur_width       dd      80
  3189. cur_height      dd      25
  3190. max_width = 256
  3191. max_height = 256
  3192.  
  3193. active_panel    dd      panel1_data
  3194.  
  3195. console_colors  dd      0x000000, 0x000080, 0x008000, 0x008080
  3196.                 dd      0x800000, 0x800080, 0x808000, 0xC0C0C0
  3197.                 dd      0x808080, 0x0000FF, 0x00FF00, 0x00FFFF
  3198.                 dd      0xFF0000, 0xFF00FF, 0xFFFF00, 0xFFFFFF
  3199.  
  3200. compare_fns     dd      compare_name
  3201.                 dd      compare_name_rev
  3202.                 dd      compare_ext
  3203.                 dd      compare_ext_rev
  3204.                 dd      compare_modified
  3205.                 dd      compare_modified_rev
  3206.                 dd      compare_size
  3207.                 dd      compare_size_rev
  3208.                 dd      compare_unordered
  3209.                 dd      compare_unordered_rev
  3210.                 dd      compare_created
  3211.                 dd      compare_created_rev
  3212.                 dd      compare_accessed
  3213.                 dd      compare_accessed_rev
  3214.  
  3215. ctrlkey_tests   dd      ctrlkey_test0
  3216.                 dd      ctrlkey_test1
  3217.                 dd      ctrlkey_test2
  3218.                 dd      ctrlkey_test3
  3219.                 dd      ctrlkey_test4
  3220. ctrlkey_tests_num = 5
  3221.  
  3222. virtual at 0
  3223. screen_vtable:
  3224.         .OnRedraw       dd      ?
  3225.         .OnKey          dd      ?
  3226.         .keybar         dd      ?
  3227.         .getname        dd      ?
  3228. end virtual
  3229.  
  3230. panels_vtable:
  3231.         dd      panels_OnRedraw
  3232.         dd      panels_OnKey
  3233.         dd      keybar_panels
  3234.         dd      panels_getname
  3235.  
  3236. viewer_vtable:
  3237.         dd      viewer_OnRedraw
  3238.         dd      viewer_OnKey
  3239.         dd      keybar_viewer
  3240.         dd      viewer_getname
  3241.  
  3242. encodings:
  3243. .cp866 = 0
  3244. .cp1251 = 1
  3245.  
  3246. .names:
  3247.         db      'cp866   '
  3248.         db      'cp1251  '
  3249.  
  3250. .tables:
  3251. ; cp866 - trivial map
  3252.         times 128 db %+127
  3253. ; cp1251
  3254.         db      0x3F,0x3F,0x27,0x3F,0x22,0x3A,0xC5,0xD8,0x3F,0x25,0x3F,0x3C,0x3F,0x3F,0x3F,0x3F
  3255.         db      0x3F,0x27,0x27,0x22,0x22,0x07,0x2D,0x2D,0x3F,0x54,0x3F,0x3E,0x3F,0x3F,0x3F,0x3F
  3256.         db      0xFF,0xF6,0xF7,0x3F,0xFD,0x3F,0xB3,0x15,0xF0,0x63,0xF2,0x3C,0xBF,0x2D,0x52,0xF4
  3257.         db      0xF8,0x2B,0x49,0x69,0x3F,0xE7,0x14,0xFA,0xF1,0xFC,0xF3,0x3E,0x3F,0x3F,0x3F,0xF5
  3258.         times 0x30 db %-1+0x80
  3259.         times 0x10 db %-1+0xE0
  3260.  
  3261. active_screen   dd      0
  3262. tabsize         dd      8
  3263.  
  3264. ascii2scan:
  3265.         times 32 db 0
  3266.         db      0x39,0x02,0x03,0x04,0x05,0x06,0x08,0x28,0x0A,0x0B,0x09,0x0D,0x33,0x0C,0x34,0x35
  3267.         db      0x0B,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x27,0x27,0x33,0x0D,0x34,0x35
  3268.         db      0x03,0x1E,0x30,0x2E,0x20,0x12,0x21,0x22,0x23,0x17,0x24,0x25,0x26,0x32,0x31,0x18
  3269.         db      0x19,0x10,0x13,0x1F,0x14,0x16,0x2F,0x11,0x2D,0x15,0x2C,0x1A,0x2B,0x1B,0x07,0x0C
  3270.         db      0x29,0x1E,0x30,0x2E,0x20,0x12,0x21,0x22,0x23,0x17,0x24,0x25,0x26,0x32,0x31,0x18
  3271.         db      0x19,0x10,0x13,0x1F,0x14,0x16,0x2F,0x11,0x2D,0x15,0x2C,0x1A,0x2B,0x1B,0x29,0x00
  3272.         db      0x21,0x33,0x20,0x16,0x26,0x14,0x27,0x19,0x30,0x10,0x13,0x25,0x2F,0x15,0x24,0x22
  3273.         db      0x23,0x2E,0x31,0x12,0x1E,0x1A,0x11,0x2D,0x17,0x18,0x1B,0x1F,0x32,0x28,0x34,0x2C
  3274.         db      0x21,0x33,0x20,0x16,0x26,0x14,0x27,0x19,0x30,0x10,0x13,0x25,0x2F,0x15,0x24,0x22
  3275.         times 48 db 0
  3276.         db      0x23,0x2E,0x31,0x12,0x1E,0x1A,0x11,0x2D,0x17,0x18,0x1B,0x1F,0x32,0x28,0x34,0x2C
  3277.         db      0x29,0x29,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
  3278.  
  3279. ; Š« ¢¨è­ë¥ á®ç¥â ­¨ï
  3280. ; db scancode, reserved
  3281. ; dw ctrlstate
  3282. ; dd handler
  3283. ; ctrlstate: ¬« ¤è¨¥ 4 ¡¨â  - ¤«ï Shift, á«¥¤ãî騥 - ¤«ï Ctrl, á«¥¤ãî騥 - ¤«ï Alt
  3284. ; 0 = ­¨ ®¤­  ª« ¢¨è  ­¥ ­ ¦ â 
  3285. ; 1 = ஢­® ®¤­  ­ ¦ â 
  3286. ; 2 = ®¡¥ ­ ¦ âë
  3287. ; 3 = «¥¢ ï ­ ¦ â , ¯à ¢ ï ­¥â
  3288. ; 4 = ¯à ¢ ï ­ ¦ â , «¥¢ ï ­¥â
  3289. panels_ctrlkeys:
  3290.         dw      0x48, 0
  3291.         dd      panels_OnKey.up
  3292.         dw      0x50, 0
  3293.         dd      panels_OnKey.down
  3294.         dw      0x4B, 0
  3295.         dd      panels_OnKey.left
  3296.         dw      0x4D, 0
  3297.         dd      panels_OnKey.right
  3298.         dw      0xF, 0
  3299.         dd      panels_OnKey.tab
  3300.         dw      0x47, 0
  3301.         dd      panels_OnKey.home
  3302.         dw      0x4F, 0
  3303.         dd      panels_OnKey.end
  3304.         dw      0x1C, 0
  3305.         dd      panels_OnKey.enter
  3306.         dw      0x3D, 0
  3307.         dd      panels_OnKey.f3
  3308.         dw      0x42, 0
  3309.         dd      panels_OnKey.f8
  3310.         dw      0x44, 0
  3311.         dd      exit
  3312. repeat 9-3+1
  3313.         dw      0x3D+%-1, 0x10
  3314.         dd      panels_OnKey.ctrl_f39
  3315. end repeat
  3316.         dw      0x3B, 0x100
  3317.         dd      panels_OnKey.alt_f12
  3318.         dw      0x3C, 0x100
  3319.         dd      panels_OnKey.alt_f12
  3320.         dw      0x58, 0
  3321.         dd      F12
  3322.         dw      0x13, 0x10
  3323.         dd      panels_OnKey.ctrl_r
  3324.         db      0
  3325.  
  3326. viewer_ctrlkeys:
  3327.         dw      1, 0
  3328.         dd      viewer_OnKey.exit
  3329.         dw      0x51, 0
  3330.         dd      viewer_OnKey.pgdn
  3331.         dw      0x49, 0
  3332.         dd      viewer_OnKey.pgup
  3333.         dw      0x50, 0
  3334.         dd      viewer_OnKey.down
  3335.         dw      0x48, 0
  3336.         dd      viewer_OnKey.up
  3337.         dw      0x4B, 0
  3338.         dd      viewer_OnKey.left
  3339.         dw      0x4B, 0x10
  3340.         dd      viewer_OnKey.ctrl_left
  3341.         dw      0x4B, 0x11
  3342.         dd      viewer_OnKey.ctrl_shift_left
  3343.         dw      0x4C, 0
  3344.         dd      viewer_OnKey.exit
  3345.         dw      0x4D, 0
  3346.         dd      viewer_OnKey.right
  3347.         dw      0x4D, 0x10
  3348.         dd      viewer_OnKey.ctrl_right
  3349.         dw      0x4D, 0x11
  3350.         dd      viewer_OnKey.ctrl_shift_right
  3351.         dw      0x3C, 0
  3352.         dd      viewer_OnKey.f2
  3353.         dw      0x3D, 0
  3354.         dd      viewer_OnKey.exit
  3355.         dw      0x3E, 0
  3356.         dd      viewer_OnKey.f4
  3357.         dw      0x42, 0
  3358.         dd      viewer_OnKey.f8
  3359.         dw      0x44, 0
  3360.         dd      viewer_OnKey.exit
  3361.         dw      0x47, 0
  3362.         dd      viewer_OnKey.home
  3363.         dw      0x4F, 0
  3364.         dd      viewer_OnKey.end
  3365.         dw      0x58, 0
  3366.         dd      F12
  3367.         db      0
  3368.  
  3369. dirinfo:
  3370.                 dd      1
  3371. .first          dd      0
  3372.                 dd      0
  3373. .size           dd      300
  3374. .dirdata        dd      0
  3375.                 db      0
  3376. .name           dd      0
  3377.  
  3378. readinfo:
  3379.                 dd      0
  3380. .first          dq      0
  3381. .size           dd      0
  3382. .data           dd      0
  3383.                 db      0
  3384. .name           dd      0
  3385.  
  3386. attrinfo:
  3387.                 dd      5
  3388.                 dd      0
  3389.                 dd      0
  3390.                 dd      0
  3391.                 dd      .attr
  3392.                 db      0
  3393. .name           dd      0
  3394.  
  3395. delinfo:
  3396.                 dd      8
  3397.                 dd      0
  3398.                 dd      0
  3399.                 dd      0
  3400.                 dd      0
  3401.                 db      0
  3402.                 dd      execdata
  3403.  
  3404. if lang eq ru
  3405. compare_names   db      '¨ˆà¬Œ €­á‘¤„'
  3406. else
  3407. compare_names   db      'nNxXmMsSuUcCaA'
  3408. end if
  3409.  
  3410. ;  ­¥«ì
  3411. panel_normal_color      db      1Bh
  3412. panel_border_color      db      1Bh
  3413. panel_cursor_color      db      30h
  3414. panel_header_color      db      1Bh
  3415. panel_active_header_color db    30h
  3416. column_header_color     db      1Eh
  3417. panel_nscreens_color    db      0Bh
  3418. ; Œ¥­î
  3419. menu_normal_color       db      3Fh
  3420. menu_selected_color     db      0Fh
  3421. menu_highlight_color    db      3Eh
  3422. menu_selected_highlight_color db 0Eh
  3423. menu_border_color       db      3Fh
  3424. menu_header_color       db      3Fh
  3425. menu_scrollbar_color    db      3Fh
  3426. ; ‹¨­¥©ª  ª« ¢¨è
  3427. keybar_number_color     db      7
  3428. keybar_name_color       db      30h
  3429. keybar_bgr_color        db      7
  3430. ; Š®¬ ­¤­ ï áâப 
  3431. cmdbar_normal_color     db      7
  3432. cmdbar_prefix_color     db      7
  3433. ; à®á¬®âà騪
  3434. view_normal_color       db      1Bh
  3435. view_status_color       db      30h
  3436. view_arrows_color       db      1Eh
  3437.  
  3438. ; ®¤á¢¥âª  ä ©«®¢
  3439. highlight_num_groups    dd      10
  3440. highlight_groups        dd      highlight_group0
  3441.                 dd      highlight_group1
  3442.                 dd      highlight_group2
  3443.                 dd      highlight_group3
  3444.                 dd      highlight_group4
  3445.                 dd      highlight_group5
  3446.                 dd      highlight_group6
  3447.                 dd      highlight_group7
  3448.                 dd      highlight_group8
  3449.                 dd      highlight_group9
  3450.  
  3451. ; ”®à¬ â ®¯¨á ­¨ï £àã¯¯ë ¯®¤á¢¥âª¨:
  3452. virtual at 0
  3453. highlight:
  3454.         .NormalColor            db ?
  3455.         .CursorColor            db ?
  3456.         .IncludeAttributes      db ?
  3457.         .Mask:                  ; ASCIIZ-string
  3458. end virtual
  3459.  
  3460. highlight_group0:
  3461.         db      13h
  3462.         db      38h
  3463.         db      2
  3464.         db      '*',0
  3465. highlight_group1:
  3466.         db      13h
  3467.         db      38h
  3468.         db      4
  3469.         db      '*',0
  3470. highlight_group2:
  3471.         db      1Fh
  3472.         db      3Fh
  3473.         db      10h
  3474.         db      '*|..',0
  3475. highlight_group3:
  3476.         db      0
  3477.         db      0
  3478.         db      10h
  3479.         db      '..',0
  3480. highlight_group4:
  3481.         db      1Ah
  3482.         db      3Ah
  3483.         db      0
  3484.         db      '*.exe,*.com,*.bat,*.cmd',0
  3485. highlight_group5:
  3486.         db      1Ah
  3487.         db      3Ah
  3488.         db      0
  3489.         db      '*|*.*',0
  3490. highlight_group6:
  3491.         db      1Dh
  3492.         db      3Dh
  3493.         db      0
  3494.         db      '*.rar,*.zip,*.[zj],*.[bg7]z,*.[bg]zip,*.tar,*.t[ag]z,*.ar[cj],*.r[0-9][0-9],'
  3495.         db      '*.a[0-9][0-9],*.bz2,*.cab,*.msi,*.jar,*.lha,*.lzh,*.ha,*.ac[bei],*.pa[ck],'
  3496.         db      '*.rk,*.cpio,*.rpm,*.zoo,*.hqx,*.sit,*.ice,*.uc2,*.ain,*.imp,*.777,*.ufa,*.boa,'
  3497.         db      '*.bs[2a],*.sea,*.hpk,*.ddi,*.x2,*.rkv,*.[lw]sz,*.h[ay]p,*.lim,*.sqz,*.chz',0
  3498. highlight_group7:
  3499.         db      16h
  3500.         db      36h
  3501.         db      0
  3502.         db      '*.bak,*.tmp',0
  3503. highlight_group8:
  3504.         db      17h
  3505.         db      37h
  3506.         db      0
  3507.         db      '*.asm,*.inc',0
  3508. highlight_group9:
  3509.         db      1Fh
  3510.         db      3Fh
  3511.         db      10h
  3512.         db      '*',0
  3513.  
  3514. bWasE0          db      0
  3515. ctrlstate       db      0
  3516. MemForImage     dd      0
  3517.  
  3518. associations:
  3519.         dd      aAsm, tinypad
  3520.         dd      aInc, tinypad
  3521.         dd      aTxt, tinypad
  3522.         dd      aJpg, jpegview
  3523.         dd      aJpeg, jpegview
  3524.         dd      aGif, gifview
  3525.         dd      aWav, ac97wav
  3526.         dd      aMp3, ac97wav
  3527.         dd      aMid, midamp
  3528.         dd      aBmp, mv
  3529.         dd      aPng, archer
  3530.         dd      aRtf, rtfread
  3531. associations_end:
  3532.  
  3533. aAsm db 'asm',0
  3534. aInc db 'inc',0
  3535. aTxt db 'txt',0
  3536. tinypad db '/rd/1/TinyPad',0
  3537.  
  3538. aJpg db 'jpg',0
  3539. aJpeg db 'jpeg',0
  3540. jpegview db '/rd/1/JpegView',0
  3541.  
  3542. aGif db 'gif',0
  3543. gifview db '/rd/1/GIFVIEW',0
  3544.  
  3545. aWav db 'wav',0
  3546. aMp3 db 'mp3',0
  3547. ac97wav db '/rd/1/AC97WAV',0
  3548.  
  3549. aMid db 'mid',0
  3550. midamp db '/rd/1/MIDAMP',0
  3551.  
  3552. aBmp db 'bmp',0
  3553. mv db '/rd/1/MV',0
  3554.  
  3555. aPng db 'png',0
  3556. archer db '/rd/1/@rcher',0
  3557.  
  3558. aRtf db 'rtf',0
  3559. rtfread db '/rd/1/RtfRead',0
  3560.  
  3561. execinfo:
  3562.         dd      7
  3563.         dd      0
  3564. execparams dd   0
  3565.         dd      0
  3566.         dd      0
  3567.         db      0
  3568. execptr dd      ?
  3569.  
  3570. IncludeIGlobals
  3571.  
  3572. i_end:
  3573.  
  3574. IncludeUGlobals
  3575.  
  3576. execdata rb     1024
  3577.         align   4
  3578. attrinfo.attr   rb      40
  3579.  
  3580. panel1_data:
  3581. panel1_left     dd      ?
  3582. panel1_top      dd      ?
  3583. panel1_width    dd      ?
  3584. panel1_height   dd      ?
  3585. panel1_index    dd      ?
  3586. panel1_start    dd      ?
  3587. panel1_colsz    dd      ?
  3588. panel1_colst    dd      ?
  3589. panel1_sortmode db      ?
  3590.                 rb      3
  3591. panel1_nfa      dd      ?
  3592. panel1_numfiles dd      ?
  3593. panel1_files    dd      ?
  3594. panel1_dir      rb      1024
  3595.  
  3596. panel2_data:
  3597. panel2_left     dd      ?
  3598. panel2_top      dd      ?
  3599. panel2_width    dd      ?
  3600. panel2_height   dd      ?
  3601. panel2_index    dd      ?
  3602. panel2_start    dd      ?
  3603. panel2_colsz    dd      ?
  3604. panel2_colst    dd      ?
  3605. panel2_sortmode db      ?
  3606.                 rb      3
  3607. panel2_nfa      dd      ?
  3608. panel2_numfiles dd      ?
  3609. panel2_files    dd      ?
  3610. panel2_dir      rb      1024
  3611.  
  3612. console_data    rb      max_width*max_height*2
  3613.  
  3614. cur_header      rb      max_width
  3615. tmp             dd      ?
  3616.  
  3617. skinh           dd      ?
  3618. std_colors      rd      10
  3619.  
  3620. column_left     dd      ?
  3621. column_top      dd      ?
  3622. column_width    dd      ?
  3623. column_height   dd      ?
  3624. column_index    dd      ?
  3625.  
  3626. scrpos          dq      ?
  3627. viewer_right_side dq    ?
  3628.  
  3629. saved_file_name:
  3630. procinfo        rb      1024
  3631.  
  3632. driveinfo       rb      32+304
  3633. tmpname         rb      32
  3634.  
  3635. screens         dd      ?
  3636. num_screens     dd      ?
  3637. active_screen_vtable dd ?
  3638. active_screen_data dd   ?
  3639.  
  3640. ; stack
  3641.         align   512
  3642.         rb      512
  3643. stacktop:
  3644. ; buffers for directory - may be resized dynamically
  3645. buf1    rb      4*304 + 32 + 304*304
  3646. buf2    rb      4*304 + 32 + 304*304
  3647.  
  3648. mem:
  3649.