Subversion Repositories Kolibri OS

Rev

Rev 485 | Rev 522 | 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, app_path
  9.  
  10. include 'lang.inc'
  11. include 'font.inc'
  12. include 'sort.inc'
  13. include 'kglobals.inc'
  14. include 'dialogs.inc'
  15. include 'viewer.inc'
  16. include 'tools.inc'
  17. include 'filetool.inc'
  18.  
  19. start:
  20.         mov     edi, tolower_table
  21.         push    'A'
  22.         pop     ecx
  23.         xor     eax, eax
  24. @@:
  25.         stosb
  26.         inc     eax
  27.         loop    @b
  28.         add     al, 0x20
  29.         mov     cl, 'Z'-'A'+1
  30. @@:
  31.         stosb
  32.         inc     eax
  33.         loop    @b
  34.         sub     al, 0x20
  35.         mov     cl, '€'-'Z'-1
  36. @@:
  37.         stosb
  38.         inc     eax
  39.         loop    @b
  40.         add     al, 0x20
  41.         mov     cl, ''-'€'
  42. @@:
  43.         stosb
  44.         inc     eax
  45.         loop    @b
  46.         add     al, 0x30
  47.         mov     cl, 'Ÿ'-''+1
  48. @@:
  49.         stosb
  50.         inc     eax
  51.         loop    @b
  52.         sub     al, 0x50
  53.         mov     cl, 256-'Ÿ'-1
  54. @@:
  55.         stosb
  56.         inc     eax
  57.         loop    @b
  58.         mov     byte [edi-256+'ð'], 'ñ'
  59.         push    68
  60.         pop     eax
  61.         push    11
  62.         pop     ebx
  63.         int     0x40
  64.         call    init_console
  65.         call    draw_window
  66.         push    66
  67.         pop     eax
  68.         push    1
  69.         pop     ebx
  70.         mov     ecx, ebx
  71.         int     40h     ; set keyboard mode to scancodes
  72.         mov     eax, 200
  73.         mov     [panel1_nfa], eax
  74.         mov     [panel2_nfa], eax
  75.         mov     ecx, 200*4 + 32 + 200*304
  76.         call    pgalloc
  77.         mov     [panel1_files], eax
  78.         call    pgalloc
  79.         mov     [panel2_files], eax
  80.         test    eax, eax
  81.         jz      exit
  82.         cmp     [panel1_files], 0
  83.         jz      exit
  84.         mov     [panel1_sortmode], 0    ; sort by name
  85.         mov     [panel2_sortmode], 0
  86.         push    2                       ; "á।­¨©" ä®à¬ â
  87.         pop     eax
  88.         mov     [panel1_colmode], eax
  89.         mov     [panel2_colmode], eax
  90.         mov     [num_screens], 1
  91.         mov     ecx, 0x1000
  92.         call    pgalloc
  93.         mov     [screens], eax
  94.         test    eax, eax
  95.         jz      exit
  96.         mov     ecx, panels_vtable
  97.         mov     [eax], ecx
  98.         mov     [active_screen_vtable], ecx
  99. ; load libini.obj and kfar.ini
  100.         mov     eax, libini_name
  101.         mov     esi, ini_import
  102.         push    3
  103.         pop     ebp     ; we use version 3 of libini
  104.         call    load_dll_and_import
  105.         test    eax, eax
  106.         jnz     .noini
  107.         mov     edi, app_path
  108.         or      ecx, -1
  109.         repnz   scasb
  110.         mov     dword [edi-1], '.ini'
  111.         mov     byte [edi+3], 0
  112.         push    1
  113.         push    dword aConfirmDelete
  114.         push    dword aConfirmations
  115.         push    dword app_path
  116.         call    [ini.get_int]
  117.         mov     [bConfirmDelete], al
  118.         push    0
  119.         push    dword aConfirmDeleteIncomplete
  120.         push    dword aConfirmations
  121.         push    dword app_path
  122.         call    [ini.get_int]
  123.         mov     [bConfirmDeleteIncomplete], al
  124.         mov     ecx, 0x1000
  125.         call    xpgalloc
  126.         test    eax, eax
  127.         jz      .skip_assoc
  128.         mov     [associations], eax
  129.         push    enum_associations_callback
  130.         push    aAssociations
  131.         push    app_path
  132.         call    [ini.enum_keys]
  133. .skip_assoc:
  134.         xor     ebp, ebp
  135.         xor     esi, esi
  136.         mov     edi, saved_file_name
  137.         push    dword nullstr
  138.         push    512
  139.         push    edi
  140.         push    dword aShortcut
  141.         push    dword aFolderShortcuts
  142.         push    dword app_path
  143.         call    [ini.get_str]
  144.         cmp     byte [edi], 0
  145.         jz      .shortcut_cont
  146.         or      ecx, -1
  147.         xor     eax, eax
  148.         repnz   scasb
  149.         not     ecx
  150.         cmp     ecx, 2
  151.         jz      @f
  152.         cmp     byte [edi-2], '/'
  153.         jnz     @f
  154.         mov     byte [edi-2], 0
  155.         dec     ecx
  156. @@:
  157.         mov     al, [aShortcut.d]
  158.         push    esi
  159.         inc     esi
  160.         mov     [FolderShortcuts+(eax-'0')*4], esi
  161.         lea     esi, [esi+ecx-1]
  162.         push    esi
  163.         and     esi, 0xFFF
  164.         cmp     esi, ecx
  165.         pop     esi
  166.         ja      .norealloc
  167.         mov     edx, ebp
  168.         mov     ecx, esi
  169.         call    xpgrealloc
  170.         test    eax, eax
  171.         jnz     @f
  172.         mov     edi, FolderShortcuts
  173.         mov     ecx, 10
  174.         rep     stosd
  175.         jmp     .skip_shortcuts
  176. @@:
  177.         mov     ebp, eax
  178. .norealloc:
  179.         pop     edi
  180.         add     edi, ebp
  181.         mov     ecx, saved_file_name
  182. @@:
  183.         mov     al, [ecx]
  184.         inc     ecx
  185.         stosb
  186.         test    al, al
  187.         jnz     @b
  188. .shortcut_cont:
  189.         inc     [aShortcut.d]
  190.         cmp     [aShortcut.d], '9'
  191.         jbe     .skip_assoc
  192.         mov     esi, FolderShortcuts
  193.         mov     ecx, 10
  194.         dec     ebp
  195. .l3:
  196.         lodsd
  197.         test    eax, eax
  198.         jz      @f
  199.         add     [esi-4], ebp
  200. @@:
  201.         loop    .l3
  202. .skip_shortcuts:
  203. .noini:
  204.         mov     esi, def_left_dir
  205.         mov     edi, panel1_dir
  206. @@:
  207.         lodsb
  208.         stosb
  209.         test    al, al
  210.         jnz     @b
  211.         mov     esi, def_right_dir
  212.         mov     edi, panel2_dir
  213. @@:
  214.         lodsb
  215.         stosb
  216.         test    al, al
  217.         jnz     @b
  218.         call    draw_keybar
  219.         call    draw_cmdbar
  220.         mov     [prev_dir], 0
  221.         mov     ebp, panel1_data
  222.         call    calc_colwidths
  223.         call    read_folder
  224.         call    draw_panel
  225.         mov     [bSilentFolderMode], 1
  226.         mov     ebp, panel2_data
  227.         call    calc_colwidths
  228.         call    read_folder
  229.         call    draw_panel
  230. event:
  231.         push    10
  232.         pop     eax
  233.         int     40h
  234.         dec     eax
  235.         jz      redraw
  236.         dec     eax
  237.         jz      key
  238. ; button - we have only one button, close
  239. exit:
  240.         or      eax, -1
  241.         int     40h
  242. redraw:
  243. ; query kbd state from OS
  244.         mov     al, 66
  245.         push    3
  246.         pop     ebx
  247.         int     0x40
  248.         and     eax, 0x3F
  249.         cmp     al, [ctrlstate]
  250.         mov     [ctrlstate], al
  251.         jz      @f
  252.         call    draw_keybar
  253. @@:
  254.         mov     al, 9
  255.         mov     ebx, procinfo
  256.         or      ecx, -1
  257.         int     40h
  258. ; test if rolled up
  259. ; height of rolled up window is [skinh]+3
  260.         mov     eax, [ebx+46]
  261.         sub     eax, [skinh]
  262.         cmp     eax, 5
  263.         ja      @f
  264.         mov     al, 12
  265.         push    1
  266.         pop     ebx
  267.         int     0x40
  268.         xor     eax, eax
  269. ; ebx, ecx, edi are ignored by function 0 after first redraw
  270.         mov     edx, 0x53000000
  271.         int     0x40
  272.         mov     al, 12
  273.         inc     ebx
  274.         int     0x40
  275.         jmp     event
  276. @@:
  277.         xor     ecx, ecx
  278.         mov     eax, [ebx+42]
  279.         mov     [wnd_width], eax
  280.         sub     eax, 5*2-1
  281.         jae     @f
  282.         xor     eax, eax
  283. @@:
  284.         cdq
  285.         mov     esi, font_width
  286.         div     esi
  287.         cmp     eax, 54
  288.         jae     @f
  289.         mov     al, 54
  290.         mov     ch, 1
  291. @@:
  292.         cmp     eax, 255
  293.         jbe     @f
  294.         mov     eax, 255
  295.         mov     ch, 1
  296. @@:
  297.         cmp     eax, [cur_width]
  298.         mov     [cur_width], eax
  299.         setnz   cl
  300.         or      cl, ch
  301.         test    edx, edx
  302.         mov     [fill_width], edx
  303.         setnz   ch
  304.         mov     eax, [ebx+46]
  305.         mov     [wnd_height], eax
  306.         sub     eax, [skinh]
  307.         sub     eax, 5-1
  308.         jns     @f
  309.         xor     eax, eax
  310. @@:
  311.         cdq
  312.         mov     esi, font_height
  313.         div     esi
  314.         cmp     eax, 8
  315.         jae     @f
  316.         mov     al, 8
  317.         mov     cl, 1
  318. @@:
  319.         cmp     eax, 255
  320.         jbe     @f
  321.         mov     eax, 255
  322.         mov     cl, 1
  323. @@:
  324.         mov     [fill_height], edx
  325.         cmp     eax, [cur_height]
  326.         mov     [cur_height], eax
  327.         jnz     .resize
  328.         test    cl, cl
  329.         jnz     .resize
  330.         test    edx, edx
  331.         setnz   cl
  332.         or      cl, ch
  333.         jz      @f
  334.         test    byte [ebx+70], 1
  335.         jnz     @f
  336. .resize:
  337.         push    67
  338.         pop     eax
  339.         or      ebx, -1
  340.         or      ecx, -1
  341.         mov     edx, [cur_width]
  342.         imul    edx, font_width
  343.         add     edx, 5*2-1
  344.         mov     esi, [cur_height]
  345.         imul    esi, font_height
  346.         add     esi, [skinh]
  347.         add     esi, 5-1
  348.         int     40h
  349. .resize_draw:
  350.         mov     ecx, [MemForImage]
  351.         call    pgfree
  352.         and     [MemForImage], 0
  353.         call    init_console
  354. ;        call    draw_window
  355.         call    draw_keybar
  356.         mov     ebp, [active_screen_data]
  357.         mov     eax, [active_screen_vtable]
  358.         call    dword [eax+screen_vtable.OnRedraw]
  359.         jmp     event
  360. @@:
  361.         call    draw_window
  362.         jmp     event
  363. alt_f9:
  364.         cmp     [saved_width], -1
  365.         jz      @f
  366.         mov     eax, [saved_width]
  367.         mov     [cur_width], eax
  368.         or      [saved_width], -1
  369.         mov     eax, [saved_height]
  370.         mov     [cur_height], eax
  371.         or      [saved_height], -1
  372.         jmp     redraw.resize
  373. @@:
  374.         push    48
  375.         pop     eax
  376.         push    5
  377.         pop     ebx
  378.         int     0x40
  379.         push    eax
  380.         sub     eax, [esp+2]
  381.         inc     eax
  382.         movzx   eax, ax
  383.         sub     eax, 10
  384.         xor     edx, edx
  385.         mov     ecx, font_width
  386.         div     ecx
  387.         xchg    [cur_width], eax
  388.         mov     [saved_width], eax
  389.         mov     eax, ebx
  390.         shr     ebx, 16
  391.         sub     eax, ebx
  392.         sub     eax, 5-1
  393.         sub     eax, [skinh]
  394.         xor     edx, edx
  395.         mov     ecx, font_height
  396.         div     ecx
  397.         xchg    [cur_height], eax
  398.         mov     [saved_height], eax
  399.         mov     ecx, ebx
  400.         pop     ebx
  401.         shr     ebx, 16
  402.         mov     edx, [cur_width]
  403.         imul    edx, font_width
  404.         add     edx, 5*2-1
  405.         mov     esi, [cur_height]
  406.         imul    esi, font_height
  407.         add     esi, [skinh]
  408.         add     esi, 4
  409.         push    67
  410.         pop     eax
  411.         int     0x40
  412.         jmp     redraw.resize_draw
  413. key:
  414.         mov     al, 2
  415.         int     40h
  416.         test    al, al
  417.         jnz     event
  418.         xchg    al, ah
  419.         cmp     al, 0xE0
  420.         jnz     @f
  421.         mov     [bWasE0], 1
  422.         jmp     event
  423. @@:
  424.         xchg    ah, [bWasE0]
  425.         mov     ebp, [active_screen_data]
  426.         mov     edx, [active_screen_vtable]
  427.         cmp     al, 0x1D
  428.         jz      .ctrl_down
  429.         cmp     al, 0x9D
  430.         jz      .ctrl_up
  431.         cmp     al, 0x2A
  432.         jz      .lshift_down
  433.         cmp     al, 0xAA
  434.         jz      .lshift_up
  435.         cmp     al, 0x36
  436.         jz      .rshift_down
  437.         cmp     al, 0xB6
  438.         jz      .rshift_up
  439.         cmp     al, 0x38
  440.         jz      .alt_down
  441.         cmp     al, 0xB8
  442.         jz      .alt_up
  443.         call    [edx+screen_vtable.OnKey]
  444.         jmp     event
  445. .ctrl_down:
  446.         test    ah, ah
  447.         jnz     .rctrl_down
  448.         or      [ctrlstate], 4
  449.         jmp     .keybar
  450. .rctrl_down:
  451.         or      [ctrlstate], 8
  452.         jmp     .keybar
  453. .ctrl_up:
  454.         test    ah, ah
  455.         jnz     .rctrl_up
  456.         and     [ctrlstate], not 4
  457.         jmp     .keybar
  458. .rctrl_up:
  459.         and     [ctrlstate], not 8
  460. .keybar:
  461.         call    draw_keybar
  462.         call    draw_image
  463. @@:     jmp     event
  464. .lshift_down:
  465. ; ignore E0 2A sequence
  466. ; e.g. arrow keys with NumLock on generate sequence E0 2A E0 xx / E0 xx+80 E0 AA
  467. ; where xx is scancode, so we can safely ignore E0 2A
  468.         test    ah, ah
  469.         jnz     @b
  470.         or      [ctrlstate], 1
  471.         jmp     .keybar
  472. .lshift_up:
  473. ; ignore E0 AA sequence
  474.         test    ah, ah
  475.         jnz     @b
  476.         and     [ctrlstate], not 1
  477.         jmp     .keybar
  478. .rshift_down:
  479.         or      [ctrlstate], 2
  480.         jmp     .keybar
  481. .rshift_up:
  482.         and     [ctrlstate], not 2
  483.         jmp     .keybar
  484. .alt_down:
  485.         test    ah, ah
  486.         jnz     .ralt_down
  487.         or      [ctrlstate], 0x10
  488.         jmp     .keybar
  489. .ralt_down:
  490.         or      [ctrlstate], 0x20
  491.         jmp     .keybar
  492. .alt_up:
  493.         test    ah, ah
  494.         jnz     .ralt_up
  495.         and     [ctrlstate], not 0x10
  496.         jmp     .keybar
  497. .ralt_up:
  498.         and     [ctrlstate], not 0x20
  499.         jmp     .keybar
  500.  
  501. process_ctrl_keys:
  502.         cmp     byte [esi], 0
  503.         jz      .done
  504.         push    ecx
  505.         cmp     al, [esi]
  506.         jz      .check
  507. .cont:
  508.         pop     ecx
  509.         add     esi, 8
  510.         jmp     process_ctrl_keys
  511. .done:
  512.         stc
  513.         ret
  514. .check:
  515.         mov     cl, 0
  516.         call    .check_ctrlkey
  517.         jc      .cont
  518.         mov     cl, 2
  519.         call    .check_ctrlkey
  520.         jc      .cont
  521.         mov     cl, 4
  522.         call    .check_ctrlkey
  523.         jc      .cont
  524.         pop     ecx
  525.         call    dword [esi+4]
  526.         clc
  527.         ret
  528. .check_ctrlkey:
  529.         push    eax edx
  530.         movzx   edx, [ctrlstate]
  531.         shr     edx, cl
  532.         add     cl, cl
  533.         movzx   eax, word [esi+2]
  534.         shr     eax, cl
  535.         and     eax, 15
  536.         cmp     al, ctrlkey_tests_num
  537.         jae     .fail
  538.         xchg    eax, edx
  539.         and     al, 3
  540.         call    [ctrlkey_tests + edx*4]
  541.         cmp     al, 1
  542.         pop     edx eax
  543.         ret
  544. .fail:
  545.         stc
  546.         pop     edx eax
  547.         ret
  548.  
  549. ctrlkey_test0:
  550.         test    al, al
  551.         setz    al
  552.         ret
  553. ctrlkey_test1:
  554.         test    al, al
  555.         setnp   al
  556.         ret
  557. ctrlkey_test2:
  558.         cmp     al, 3
  559.         setz    al
  560.         ret
  561. ctrlkey_test3:
  562.         cmp     al, 1
  563.         setz    al
  564.         ret
  565. ctrlkey_test4:
  566.         cmp     al, 2
  567.         setz    al
  568.         ret
  569.  
  570. enum_associations_callback:
  571. ; LongBool __stdcall callback(f_name,sec_name,key_name);
  572. ; [esp+4] = f_name, [esp+8] = sec_name, [esp+12] = key_name
  573.         mov     esi, [esp+12]
  574.         mov     edi, esi
  575. @@:
  576.         lodsb
  577.         test    al, al
  578.         jnz     @b
  579.         sub     esi, edi        ; esi = size of key name
  580.         push    nullstr
  581.         push    1024
  582.         push    saved_file_name
  583.         push    edi
  584.         push    dword [esp+16+8]
  585.         push    dword [esp+20+4]
  586.         call    [ini.get_str]
  587.         test    eax, eax
  588.         jnz     .ret
  589.         mov     eax, saved_file_name
  590. @@:
  591.         inc     esi
  592.         inc     eax
  593.         cmp     byte [eax-1], 0
  594.         jnz     @b
  595. ; esi = total size of entry
  596.         push    esi
  597.         add     esi, [associations_size]
  598.         mov     ecx, [associations_allocated]
  599. @@:
  600.         cmp     esi, ecx
  601.         jbe     @f
  602.         add     ecx, ecx
  603.         jmp     @b
  604. @@:
  605.         pop     esi
  606.         cmp     [associations_allocated], ecx
  607.         jz      @f
  608.         mov     [associations_allocated], ecx
  609.         mov     edx, [associations]
  610.         call    xpgrealloc
  611.         mov     [associations], eax
  612.         test    eax, eax
  613.         jz      .err
  614. @@:
  615.         mov     eax, esi
  616.         mov     esi, edi
  617.         mov     edi, [associations]
  618.         add     edi, [associations_size]
  619.         dec     edi
  620.         add     [associations_size], eax
  621. @@:
  622.         lodsb
  623.         stosb
  624.         test    al, al
  625.         jnz     @b
  626.         mov     esi, saved_file_name
  627. @@:
  628.         lodsb
  629.         stosb
  630.         test    al, al
  631.         jnz     @b
  632. .ret:
  633.         mov     al, 1
  634.         ret     12
  635. .err:
  636.         mov     ecx, edx
  637.         call    pgfree
  638.         xor     eax, eax
  639.         ret     12
  640.  
  641. new_screen:
  642. ; in: ecx=sizeof(screen data), edx->vtable
  643. ; out: ebp=pointer or NULL, eax!=0 if successful
  644. ; destroys ebx,ecx
  645.         call    xpgalloc
  646.         test    eax, eax
  647.         jnz     @f
  648.         ret
  649. @@:
  650.         mov     ebp, eax
  651.         mov     eax, [screens]
  652.         mov     ecx, [num_screens]
  653.         inc     ecx
  654.         shl     ecx, 3
  655.         test    ecx, 0xFFF
  656.         jnz     .norealloc
  657.         push    edx
  658.         mov     edx, eax
  659.         call    xpgrealloc
  660.         pop     edx
  661.         test    eax, eax
  662.         jnz     @f
  663.         mov     ecx, ebp
  664.         call    pgfree
  665.         xor     eax, eax
  666.         ret
  667. @@:
  668.         mov     [screens], eax
  669. .norealloc:
  670.         inc     [num_screens]
  671.         mov     [eax+ecx-8], edx
  672.         mov     [eax+ecx-4], ebp
  673.         mov     eax, [num_screens]
  674.         dec     eax
  675.         mov     [active_screen], eax
  676.         mov     [active_screen_vtable], edx
  677.         mov     [active_screen_data], ebp
  678.         jmp     draw_keybar
  679.  
  680. next_screen:
  681.         mov     eax, [active_screen]
  682.         inc     eax
  683.         cmp     eax, [num_screens]
  684.         jnz     @f
  685.         xor     eax, eax
  686. @@:     mov     [active_screen], eax
  687.         jmp     change_screen
  688.  
  689. delete_active_screen:
  690.         mov     edi, [screens]
  691.         mov     eax, [active_screen]
  692.         shl     eax, 3
  693.         add     edi, eax
  694.         push    dword [edi+4]
  695.         lea     esi, [edi+8]
  696.         mov     ecx, [num_screens]
  697.         sub     ecx, [active_screen]
  698.         dec     ecx
  699.         add     ecx, ecx
  700.         rep     movsd
  701.         dec     [num_screens]
  702.         mov     ecx, [num_screens]
  703.         shl     ecx, 3
  704.         test    ecx, 0xFFF
  705.         jnz     .norealloc
  706.         mov     edx, [screens]
  707.         call    pgrealloc               ; must succeed, because we decrease size
  708.         mov     [screens], eax
  709. .norealloc:
  710.         pop     ecx
  711.         call    pgfree
  712.         and     [active_screen], 0
  713.  
  714. change_screen:
  715.         pusha
  716.         mov     eax, [active_screen]
  717.         mov     esi, [screens]
  718.         mov     ebp, [esi+eax*8+4]
  719.         mov     eax, [esi+eax*8]
  720.         mov     [active_screen_vtable], eax
  721.         mov     [active_screen_data], ebp
  722.         call    draw_keybar
  723.         call    [eax+screen_vtable.OnRedraw]
  724.         popa
  725.         ret
  726.  
  727. F12:
  728.         mov     eax, [cur_width]
  729.         add     eax, 8
  730.         mov     esi, eax
  731.         mul     [num_screens]
  732.         mov     ecx, eax
  733.         call    xpgalloc
  734.         test    eax, eax
  735.         jnz     @f
  736.         ret
  737. @@:
  738.         mov     ebx, eax
  739.         mov     edi, eax
  740.         xor     ecx, ecx
  741. .next:
  742.         xor     eax, eax
  743.         stosd
  744.         inc     ecx
  745.         cmp     ecx, [num_screens]
  746.         jz      @f
  747.         lea     eax, [edi+esi-4]
  748.         mov     dword [edi-4], eax
  749. @@:
  750.         xor     eax, eax
  751.         stosd
  752.         dec     ecx
  753.         jz      @f
  754.         lea     eax, [edi-8]
  755.         sub     eax, esi
  756.         mov     dword [edi-4], eax
  757. @@:
  758.         mov     al, '&'
  759.         stosb
  760.         cmp     ecx, 36
  761.         jae     .noletter
  762.         lea     eax, [ecx+'0']
  763.         cmp     al, '9'
  764.         jbe     @f
  765.         add     al, 7
  766. @@:
  767.         stosb
  768.         mov     al, '.'
  769.         stosb
  770.         jmp     .letter_done
  771. .noletter:
  772.         mov     al, ' '
  773.         stosb
  774.         stosb
  775. .letter_done:
  776.         mov     al, ' '
  777.         stosb
  778.         pushad
  779.         mov     eax, [screens]
  780.         mov     ebp, [eax+ecx*8+4]
  781.         mov     eax, [eax+ecx*8]
  782.         mov     ecx, [cur_width]
  783.         sub     ecx, 12
  784.         call    [eax + screen_vtable.getname]
  785.         popad
  786.         sub     edi, 4
  787.         add     edi, [cur_width]
  788.         inc     ecx
  789.         cmp     ecx, [num_screens]
  790.         jb      .next
  791.         mov     eax, [active_screen]
  792.         mul     esi
  793.         add     eax, ebx
  794.         push    1
  795.         push    dword aScreens
  796.         push    eax
  797.         call    menu
  798.         cmp     eax, -1
  799.         jz      @f
  800.         sub     eax, ebx
  801.         div     esi
  802.         mov     [active_screen], eax
  803. @@:
  804.         mov     ecx, ebx
  805.         call    pgfree
  806.         jmp     change_screen
  807.  
  808. panels_OnKey:
  809.         mov     ebp, [active_panel]
  810.         mov     ecx, [ebp + panel1_index - panel1_data]
  811.         mov     edx, [ebp + panel1_start - panel1_data]
  812.         mov     ebx, [ebp + panel1_colst - panel1_data]
  813.         add     ebx, edx
  814.         mov     esi, panels_ctrlkeys
  815.         jmp     process_ctrl_keys
  816. .ret:
  817.         ret
  818. .up:
  819.         jecxz   .ret
  820.         dec     ecx
  821.         mov     [ebp + panel1_index - panel1_data], ecx
  822.         cmp     ecx, edx
  823.         jae     .done_redraw
  824.         mov     [ebp + panel1_start - panel1_data], ecx
  825. .done_redraw:
  826. ;        call    draw_panel
  827. ;        ret
  828.         jmp     draw_panel
  829. .insert:
  830.         lea     eax, [ecx*4]
  831.         add     eax, [ebp + panel1_files - panel1_data]
  832.         mov     eax, [eax]
  833.         cmp     word [eax+40], '..'
  834.         jnz     @f
  835.         cmp     byte [eax+42], 0
  836.         jz      .insert.down
  837. @@:
  838.         xor     byte [eax+303], 1
  839.         mov     edx, [eax+32]
  840.         test    byte [eax+303], 1
  841.         mov     eax, [eax+36]
  842.         jnz     .insert.increase
  843.         sub     dword [ebp + panel1_selected_size - panel1_data], edx
  844.         sbb     dword [ebp + panel1_selected_size+4 - panel1_data], eax
  845.         dec     [ebp + panel1_selected_num - panel1_data]
  846.         jmp     .insert.down
  847. .insert.increase:
  848.         add     dword [ebp + panel1_selected_size - panel1_data], edx
  849.         adc     dword [ebp + panel1_selected_size+4 - panel1_data], eax
  850.         inc     [ebp + panel1_selected_num - panel1_data]
  851. .insert.down:
  852.         inc     ecx
  853.         cmp     ecx, [ebp + panel1_numfiles - panel1_data]
  854.         jae     .done_redraw
  855.         jmp     @f
  856. .down:
  857.         inc     ecx
  858.         cmp     ecx, [ebp + panel1_numfiles - panel1_data]
  859.         jae     .ret
  860. @@:
  861.         mov     [ebp + panel1_index - panel1_data], ecx
  862.         cmp     ecx, ebx
  863.         jb      .done_redraw
  864.         sub     ecx, [ebp + panel1_colst - panel1_data]
  865.         inc     ecx
  866.         mov     [ebp + panel1_start - panel1_data], ecx
  867.         jmp     .done_redraw
  868. .left:
  869.         test    ecx, ecx
  870.         jnz     @f
  871.         ret
  872. @@:
  873.         mov     eax, [ebp + panel1_colsz - panel1_data]
  874.         sub     ecx, eax
  875.         jae     @f
  876.         xor     ecx, ecx
  877. @@:
  878.         mov     [ebp + panel1_index - panel1_data], ecx
  879. .finalize_left:
  880.         cmp     ecx, edx
  881.         jae     .done_redraw
  882.         sub     edx, eax
  883.         jae     @f
  884.         xor     edx, edx
  885. @@:
  886.         mov     [ebp + panel1_start - panel1_data], edx
  887.         jmp     .done_redraw
  888. .pgup:
  889.         mov     eax, [ebp + panel1_colst - panel1_data]
  890.         dec     eax
  891.         jnz     @f
  892.         inc     eax
  893. @@:
  894.         test    ecx, ecx
  895.         jnz     @f
  896.         ret
  897. @@:
  898.         sub     ecx, eax
  899.         jae     @f
  900.         xor     ecx, ecx
  901. @@:
  902.         mov     [ebp + panel1_index - panel1_data], ecx
  903.         dec     ecx
  904.         jmp     .finalize_left
  905. .right:
  906.         mov     eax, [ebp + panel1_colsz - panel1_data]
  907.         add     ecx, eax
  908.         cmp     ecx, [ebp + panel1_numfiles - panel1_data]
  909.         jb      @f
  910.         mov     ecx, [ebp + panel1_numfiles - panel1_data]
  911.         dec     ecx
  912. @@:
  913.         mov     [ebp + panel1_index - panel1_data], ecx
  914. .finalize_right:
  915.         cmp     ecx, ebx
  916.         jb      .done_redraw
  917.         add     ebx, eax
  918.         cmp     ebx, [ebp + panel1_numfiles - panel1_data]
  919.         jbe     @f
  920.         mov     ebx, [ebp + panel1_numfiles - panel1_data]
  921. @@:
  922.         sub     ebx, [ebp + panel1_colst - panel1_data]
  923.         jae     @f
  924.         xor     ebx, ebx
  925. @@:
  926.         mov     [ebp + panel1_start - panel1_data], ebx
  927.         jmp     .done_redraw
  928. .pgdn:
  929.         mov     eax, [ebp + panel1_colst - panel1_data]
  930.         dec     eax
  931.         jnz     @f
  932.         inc     eax
  933. @@:
  934.         add     ecx, eax
  935.         cmp     ecx, [ebp + panel1_numfiles - panel1_data]
  936.         jb      @f
  937.         mov     ecx, [ebp + panel1_numfiles - panel1_data]
  938.         dec     ecx
  939. @@:
  940.         mov     [ebp + panel1_index - panel1_data], ecx
  941.         inc     ecx
  942.         jmp     .finalize_right
  943. .tab:
  944.         xor     [active_panel], panel1_data xor panel2_data
  945.         call    draw_cmdbar
  946.         call    draw_panel
  947.         mov     ebp, [active_panel]
  948.         jmp     .done_redraw
  949. .home:
  950.         and     [ebp + panel1_start - panel1_data], 0
  951.         and     [ebp + panel1_index - panel1_data], 0
  952.         jmp     .done_redraw
  953. .end:
  954.         mov     eax, [ebp + panel1_numfiles - panel1_data]
  955.         dec     eax
  956.         mov     [ebp + panel1_index - panel1_data], eax
  957.         inc     eax
  958.         sub     eax, [ebp + panel1_colst - panel1_data]
  959.         jae     @f
  960.         xor     eax, eax
  961. @@:
  962.         mov     [ebp + panel1_start - panel1_data], eax
  963.         jmp     .done_redraw
  964. .enter:
  965.         call    get_curfile_folder_entry
  966.         test    byte [ecx], 10h
  967.         jnz     .enter_folder
  968.         call    find_extension
  969.         jc      .run_app
  970. .run_association:
  971.         cmp     byte [edi], 0
  972.         jz      .l1
  973.         cmp     byte [edi], ';'
  974.         jnz     @f
  975. .l1:
  976.         ret
  977. @@:
  978.         mov     esi, edi
  979. @@:
  980.         lodsb
  981.         test    al, al
  982.         jz      @f
  983.         cmp     al, ';'
  984.         jnz     @b
  985.         dec     esi
  986.         mov     byte [esi], 0
  987.         mov     [restore_semicolon], esi
  988. @@:
  989. .run_association2:
  990.         mov     [execparams], execdata
  991.         mov     [execptr], edi
  992.         jmp     .dorun
  993. .run_app:
  994.         mov     [execptr], execdata
  995.         and     [execparams], 0
  996. .dorun:
  997.         lea     esi, [ebp + panel1_dir - panel1_data]
  998.         mov     edi, execdata
  999. @@:
  1000.         lodsb
  1001.         test    al, al
  1002.         jz      @f
  1003.         stosb
  1004.         cmp     edi, execdataend-1
  1005.         jae     .bigfilename
  1006.         jmp     @b
  1007. @@:
  1008.         lea     esi, [ecx+40]
  1009.         mov     al, '/'
  1010.         stosb
  1011. @@:
  1012.         lodsb
  1013.         stosb
  1014.         cmp     edi, execdataend
  1015.         ja      .bigfilename
  1016.         test    al, al
  1017.         jnz     @b
  1018. ; for fasm call - special handling, because
  1019. ; 1) fasm command line convention is different : fasm infile,outfile[,path] rather than tinypad infile
  1020. ; 2) fasm will probably create new file in directory, so we want to reload panel data
  1021.         xor     edx, edx
  1022.         cmp     [execparams], edx
  1023.         jz      .nofasm
  1024.         mov     esi, [execptr]
  1025. @@:
  1026.         lodsb
  1027.         test    al, al
  1028.         jnz     @b
  1029.         mov     eax, [esi-5]
  1030.         or      eax, 0x20202020
  1031.         cmp     eax, 'fasm'
  1032.         jnz     .nofasm
  1033.         cmp     edi, execdata+(execdataend-execdata)/2
  1034.         ja      .bigfilename
  1035.         mov     esi, execdata
  1036. @@:
  1037.         lodsb
  1038.         stosb
  1039.         test    al, al
  1040.         jnz     @b
  1041.         mov     byte [esi-1], ','
  1042.         inc     edx
  1043. ; output file: no extension if input file has extension, '.bin' otherwise
  1044.         push    edi
  1045. @@:
  1046.         dec     edi
  1047.         cmp     byte [edi], '.'
  1048.         jz      .ptfound
  1049.         cmp     byte [edi], '/'
  1050.         jnz     @b
  1051.         pop     edi
  1052.         cmp     edi, execdataend-4
  1053.         ja      .bigfilename
  1054.         mov     dword [edi-1], '.bin'
  1055.         mov     byte [edi+3], 0
  1056.         jmp     .nofasm
  1057. .ptfound:
  1058.         mov     byte [edi], 0
  1059.         pop     edi
  1060. .nofasm:
  1061.         mov     ebx, execinfo
  1062. ; if command line is more than 256 symbols, the kernel will truncate it
  1063. ; we do not want this!
  1064. ; N.B. We know that command line is either NULL or execdata, which is always ASCIIZ string,
  1065. ;      but can be up to 1023 symbols
  1066.         mov     esi, [ebx+8]
  1067.         test    esi, esi
  1068.         jz      .cmdlinelenok
  1069. @@:
  1070.         lodsb
  1071.         test    al, al
  1072.         jnz     @b
  1073.         sub     esi, [ebx+8]
  1074.         dec     esi
  1075.         cmp     esi, 256
  1076.         ja      .bigcmdline
  1077. .cmdlinelenok:
  1078.         push    70
  1079.         pop     eax
  1080.         int     40h
  1081.         xor     esi, esi
  1082.         xchg    esi, [restore_semicolon]
  1083.         test    esi, esi
  1084.         jz      @f
  1085.         mov     byte [esi], ';'
  1086. @@:
  1087.         neg     eax
  1088.         js      @f
  1089.         call    get_error_msg
  1090.         push    eax
  1091.         push    dword aRunError
  1092.         mov     eax, esp
  1093.         push    ContinueBtn
  1094.         push    1
  1095.         push    eax
  1096.         push    2
  1097.         push    -1
  1098.         push    -1
  1099.         push    dword aError
  1100.         call    SayErr
  1101.         pop     eax
  1102.         pop     eax
  1103.         ret
  1104. @@:
  1105.         test    edx, edx
  1106.         jz      @f
  1107.         push    5
  1108.         pop     eax
  1109.         push    20
  1110.         pop     ebx
  1111.         int     0x40
  1112.         jmp     .ctrl_r
  1113. @@:
  1114.         ret
  1115. .bigfilename3:
  1116.         pop     esi
  1117. .bigfilename2:
  1118.         pop     esi
  1119. .bigfilename:
  1120.         mov     eax, aFileNameTooBig
  1121. .l2:
  1122.         xor     esi, esi
  1123.         xchg    esi, [restore_semicolon]
  1124.         test    esi, esi
  1125.         jz      @f
  1126.         mov     byte [esi], ';'
  1127. @@:
  1128.         push    eax
  1129.         mov     eax, esp
  1130.         push    ContinueBtn
  1131.         push    1
  1132.         push    eax
  1133.         push    1
  1134.         push    -1
  1135.         push    -1
  1136.         push    dword aError
  1137.         call    SayErr
  1138.         pop     eax
  1139.         ret
  1140. .bigcmdline:
  1141.         mov     eax, aCmdLineTooBig
  1142.         jmp     .l2
  1143. .bigfoldername2:
  1144.         mov     byte [ecx], 0
  1145. .bigfoldername:
  1146.         mov     eax, aFolderNameTooBig
  1147.         jmp     .l2
  1148. .enter_folder:
  1149.         lea     esi, [ecx+40]
  1150.         cmp     word [esi], '..'
  1151.         jnz     @f
  1152.         cmp     byte [esi+2], 0
  1153.         jz      .dotdot
  1154. @@:
  1155.         push    esi
  1156.         lea     esi, [ebp + panel1_dir - panel1_data]
  1157.         mov     edi, prev_dir
  1158. @@:
  1159.         lodsb
  1160.         stosb
  1161.         test    al, al
  1162.         jnz     @b
  1163.         lea     edi, [esi-1]
  1164.         lea     edx, [ebp + panel1_dir - panel1_data + 1024]
  1165.         cmp     esi, edx
  1166.         pop     esi
  1167.         jae     .bigfoldername
  1168.         mov     ecx, edi
  1169.         mov     al, '/'
  1170.         cmp     [edi-1], al
  1171.         jz      @f
  1172.         stosb
  1173. @@:
  1174.         lodsb
  1175.         cmp     edi, edx
  1176.         jae     .bigfoldername2
  1177.         stosb
  1178.         test    al, al
  1179.         jnz     @b
  1180. .reread:
  1181.         call    read_folder
  1182. .done_cmdbar:
  1183.         call    draw_cmdbar
  1184.         jmp     .done_redraw
  1185. .dotdot:
  1186.         lea     edi, [ebp + panel1_dir - panel1_data]
  1187.         mov     al, 0
  1188.         or      ecx, -1
  1189.         repnz   scasb
  1190.         dec     edi
  1191.         mov     al, '/'
  1192.         std
  1193.         repnz   scasb
  1194.         cld
  1195.         inc     edi
  1196.         mov     byte [edi], 0
  1197.         inc     edi
  1198.         push    edi
  1199.         call    read_folder
  1200.         pop     edi
  1201.         mov     edx, [ebp + panel1_files - panel1_data]
  1202.         mov     ecx, [ebp + panel1_numfiles - panel1_data]
  1203. .scanloop:
  1204.         mov     esi, [edx]
  1205.         add     esi, 40
  1206.         push    esi edi
  1207. @@:
  1208.         lodsb
  1209.         call    match_symbol
  1210.         jnz     @f
  1211.         inc     edi
  1212.         test    al, al
  1213.         jnz     @b
  1214. @@:
  1215.         pop     edi esi
  1216.         jz      .scanfound
  1217.         add     edx, 4
  1218.         loop    .scanloop
  1219.         jmp     .scandone
  1220. .scanfound:
  1221.         sub     edx, [ebp + panel1_files - panel1_data]
  1222.         shr     edx, 2
  1223.         mov     [ebp + panel1_index - panel1_data], edx
  1224.         sub     edx, [ebp + panel1_colst - panel1_data]
  1225.         jb      .scandone
  1226.         inc     edx
  1227.         mov     [ebp + panel1_start - panel1_data], edx
  1228. .scandone:
  1229.         jmp     .done_cmdbar
  1230. .ctrl_f39:
  1231.         sub     al, 0x3D
  1232.         add     al, al
  1233.         mov     ah, [ebp + panel1_sortmode - panel1_data]
  1234.         and     ah, 0xFE
  1235.         cmp     al, ah
  1236.         jnz     @f
  1237.         and     [ebp + panel1_sortmode - panel1_data], 1
  1238.         or      al, [ebp + panel1_sortmode - panel1_data]
  1239.         xor     al, 1
  1240. @@:
  1241.         mov     [ebp + panel1_sortmode - panel1_data], al
  1242.         mov     eax, [ebp + panel1_index - panel1_data]
  1243.         mov     ecx, [ebp + panel1_files - panel1_data]
  1244.         push    dword [ecx+eax*4]
  1245.         push    ecx
  1246.         call    sort_files
  1247.         pop     edi
  1248.         pop     eax
  1249.         or      ecx, -1
  1250.         repnz   scasd
  1251.         not     ecx
  1252.         dec     ecx
  1253.         mov     [ebp + panel1_index - panel1_data], ecx
  1254.         sub     ecx, [ebp + panel1_start - panel1_data]
  1255.         jb      .less_start
  1256.         sub     ecx, [ebp + panel1_colst - panel1_data]
  1257.         jae     .gr_end
  1258. @@:     jmp     .done_redraw
  1259. .less_start:
  1260.         add     [ebp + panel1_start - panel1_data], ecx
  1261.         jmp     @b
  1262. .gr_end:
  1263.         inc     ecx
  1264.         add     [ebp + panel1_start - panel1_data], ecx
  1265.         jmp     @b
  1266. .alt_f12:
  1267.         mov     ebp, panel1_data
  1268.         cmp     al, 0x3B
  1269.         jz      @f
  1270.         mov     ebp, panel2_data
  1271. @@:
  1272. ; get drives list
  1273.         mov     ebx, dirinfo
  1274.         mov     [ebx+dirinfo.size-dirinfo], 1
  1275.         mov     [ebx+dirinfo.dirdata-dirinfo], driveinfo
  1276.         mov     [ebx+dirinfo.name-dirinfo], tmpname
  1277.         mov     byte [tmpname], '/'
  1278.         xor     edx, edx
  1279.         xor     ecx, ecx
  1280. .drive_loop_e:
  1281.         mov     byte [tmpname+1], 0
  1282.         push    70
  1283.         pop     eax
  1284.         int     40h
  1285.         mov     ebx, dirinfo
  1286.         test    eax, eax
  1287.         jnz     .drive_loop_e_done
  1288.         mov     esi, driveinfo+32+40
  1289.         mov     edi, tmpname+1
  1290. @@:
  1291.         lodsb
  1292.         stosb
  1293.         test    al, al
  1294.         jnz     @b
  1295.         push    [ebx+dirinfo.first-dirinfo]
  1296.         and     [ebx+dirinfo.first-dirinfo], 0
  1297. .drive_loop_i:
  1298.         push    70
  1299.         pop     eax
  1300.         int     40h
  1301.         mov     ebx, dirinfo
  1302.         test    eax, eax
  1303.         jnz     .drive_loop_i_done
  1304.         add     ecx, 32+8
  1305.         push    ecx
  1306.         and     ecx, 0xFFF
  1307.         cmp     ecx, 32+8
  1308.         pop     ecx
  1309.         ja      @f
  1310.         call    xpgrealloc
  1311.         mov     edx, eax
  1312.         test    eax, eax
  1313.         jnz     @f
  1314.         pop     eax
  1315.         ret
  1316. @@:
  1317.         lea     edi, [edx+ecx-32]
  1318.         mov     esi, tmpname
  1319. @@:
  1320.         lodsb
  1321.         test    al, al
  1322.         jz      @f
  1323.         stosb
  1324.         jmp     @b
  1325. @@:
  1326.         mov     esi, driveinfo+32+40
  1327.         mov     al, '/'
  1328.         stosb
  1329. @@:
  1330.         lodsb
  1331.         stosb
  1332.         test    al, al
  1333.         jnz     @b
  1334.         inc     [ebx+dirinfo.first-dirinfo]
  1335.         jmp     .drive_loop_i
  1336. .drive_loop_i_done:
  1337.         pop     [ebx+dirinfo.first-dirinfo]
  1338.         inc     [ebx+dirinfo.first-dirinfo]
  1339.         jmp     .drive_loop_e
  1340. .drive_loop_e_done:
  1341.         and     [ebx+dirinfo.first-dirinfo], 0
  1342.         mov     edi, edx
  1343.         xor     esi, esi
  1344.         add     ecx, edx
  1345. @@:
  1346.         and     dword [edi], 0
  1347.         mov     dword [edi+4], esi
  1348.         mov     esi, edi
  1349.         add     edi, 32+8
  1350.         cmp     edi, ecx
  1351.         jae     @f
  1352.         mov     [esi], edi
  1353.         jmp     @b
  1354. @@:
  1355.         mov     ecx, edx
  1356.         lea     edi, [ebp + panel1_dir - panel1_data]
  1357. .find_cur_drive_loop:
  1358.         push    edi
  1359.         lea     esi, [ecx+8]
  1360. @@:
  1361.         lodsb
  1362.         test    al, al
  1363.         jz      .cur_drive_found
  1364.         call    match_symbol
  1365.         jnz     @f
  1366.         inc     edi
  1367.         jmp     @b
  1368. @@:
  1369.         cmp     dword [ecx], 0
  1370.         jz      @f
  1371.         pop     edi
  1372.         mov     ecx, [ecx]
  1373.         jmp     .find_cur_drive_loop
  1374. @@:
  1375.         mov     ecx, edx
  1376. .cur_drive_found:
  1377.         pop     edi
  1378.         push    1
  1379.         push    aDrive
  1380.         push    ecx
  1381.         mov     eax, [ebp + panel1_height - panel1_data]
  1382.         sub     eax, 2
  1383.         jae     @f
  1384.         add     eax, 2
  1385. @@:
  1386.         push    eax
  1387.         push    [ebp + panel1_width - panel1_data]
  1388.         push    [ebp + panel1_top - panel1_data]
  1389.         push    [ebp + panel1_left - panel1_data]
  1390.         call    menu_centered_in
  1391.         cmp     eax, -1
  1392.         jz      .ret2
  1393.         lea     esi, [eax+8]
  1394.         lea     edi, [ebp + panel1_dir - panel1_data]
  1395.         push    ecx esi edi
  1396.         mov     esi, edi
  1397.         mov     edi, prev_dir
  1398.         mov     ecx, 1024/4
  1399.         rep     movsd
  1400.         pop     edi esi ecx
  1401. @@:
  1402.         lodsb
  1403.         stosb
  1404.         test    al, al
  1405.         jnz     @b
  1406.         mov     ecx, edx
  1407.         call    pgfree
  1408.         call    read_folder
  1409.         jmp     .done_redraw
  1410. .shift_f5:
  1411.         mov     esi, ebp
  1412.         cmp     [ebp + panel1_selected_num - panel1_data], 0
  1413.         jnz     .f5_2
  1414.         call    get_curfile_folder_entry
  1415.         lea     esi, [ecx+40]
  1416.         mov     edi, CopyDestEditBuf
  1417.         mov     eax, CopyDestEditBuf.length
  1418.         stosd
  1419.         scasd
  1420.         xor     eax, eax
  1421.         stosd
  1422.         mov     edx, edi
  1423. @@:
  1424.         lodsb
  1425.         test    al, al
  1426.         jz      .f5_common
  1427.         stosb
  1428.         jmp     @b
  1429. .f5:
  1430.         mov     esi, ebp
  1431.         xor     esi, panel1_data xor panel2_data
  1432. .f5_2:
  1433.         add     esi, panel1_dir - panel1_data
  1434.         mov     edi, CopyDestEditBuf
  1435.         mov     eax, CopyDestEditBuf.length
  1436.         stosd
  1437.         scasd
  1438.         xor     eax, eax
  1439.         stosd
  1440.         mov     edx, edi
  1441. @@:
  1442.         lodsb
  1443.         test    al, al
  1444.         jz      @f
  1445.         cmp     edi, CopyDestEditBuf+12+511
  1446.         jae     .bigfoldername
  1447.         stosb
  1448.         jmp     @b
  1449. @@:
  1450.         mov     al, '/'
  1451.         stosb
  1452. .f5_common:
  1453.         mov     byte [edi], 0
  1454.         sub     edi, edx
  1455.         mov     [edx-8], edi
  1456.         mov     edi, CopySourceTextBuf
  1457.         mov     esi, aCopy1
  1458. @@:
  1459.         lodsb
  1460.         test    al, al
  1461.         jz      @f
  1462.         stosb
  1463.         jmp     @b
  1464. @@:
  1465.         mov     eax, [ebp + panel1_selected_num - panel1_data]
  1466.         test    eax, eax
  1467.         jz      .f5_noselected1
  1468.         mov     ebx, eax
  1469.         push    10
  1470.         pop     ecx
  1471.         push    -'0'
  1472. @@:
  1473.         xor     edx, edx
  1474.         div     ecx
  1475.         push    edx
  1476.         test    eax, eax
  1477.         jnz     @b
  1478. @@:
  1479.         pop     eax
  1480.         add     al, '0'
  1481.         jz      @f
  1482.         stosb
  1483.         jmp     @b
  1484. @@:
  1485. if lang eq ru
  1486.         mov     dword [edi], ' í«¥'
  1487.         mov     dword [edi+4], '¬¥­â'
  1488.         add     edi, 8
  1489.         cmp     ebx, 1
  1490.         jz      @f
  1491.         mov     al, ' '
  1492.         stosb
  1493.         cmp     ebx, 4
  1494.         jbe     @f
  1495.         mov     word [edi-1], '®¢'
  1496.         inc     edi
  1497. @@:
  1498. else
  1499.         mov     dword [edi], ' ite'
  1500.         mov     byte [edi+4], 'm'
  1501.         add     edi, 5
  1502.         cmp     ebx, 1
  1503.         jz      @f
  1504.         mov     al, 's'
  1505.         stosb
  1506. @@:
  1507. end if
  1508.         jmp     .f5_selected1
  1509. .f5_noselected1:
  1510.         mov     al, '"'
  1511.         stosb
  1512.         call    get_curfile_folder_entry
  1513.         lea     esi, [ecx+40]
  1514.         lea     eax, [esi+1]
  1515. @@:
  1516.         inc     esi
  1517.         cmp     byte [esi-1], 0
  1518.         jnz     @b
  1519.         sub     esi, eax
  1520.         xchg    eax, esi
  1521.         dec     esi
  1522.         mov     edx, [cur_width]
  1523.         sub     edx, 50
  1524.         sub     eax, edx
  1525.         jbe     @f
  1526.         add     esi, eax
  1527.         mov     al, '.'
  1528.         stosb
  1529.         stosb
  1530.         stosb
  1531. @@:
  1532.         lodsb
  1533.         test    al, al
  1534.         jz      @f
  1535.         stosb
  1536.         jmp     @b
  1537. @@:
  1538.         mov     al, '"'
  1539.         stosb
  1540. .f5_selected1:
  1541.         mov     esi, aCopy2
  1542. @@:
  1543.         lodsb
  1544.         stosb
  1545.         test    al, al
  1546.         jnz     @b
  1547.         mov     ebx, copy_dlgdata
  1548.         mov     eax, [cur_width]
  1549.         sub     eax, 12
  1550.         mov     [ebx + dlgtemplate.width], eax
  1551.         dec     eax
  1552.         dec     eax
  1553.         mov     [ebx - copy_dlgdata + copy_dlgdata.width2], eax
  1554.         mov     [ebx - copy_dlgdata + copy_dlgdata.width3], eax
  1555.         shr     eax, 1
  1556.         dec     eax
  1557.         dec     eax
  1558.         mov     [ebx - copy_dlgdata + copy_dlgdata.copy_x2], eax
  1559.         sub     eax, aCopyLength-1
  1560.         mov     [ebx - copy_dlgdata + copy_dlgdata.copy_x1], eax
  1561.         add     eax, aCopyLength+3
  1562.         mov     [ebx - copy_dlgdata + copy_dlgdata.cnl_x1], eax
  1563.         add     eax, aCancelBLength - 1
  1564.         mov     [ebx - copy_dlgdata + copy_dlgdata.cnl_x2], eax
  1565.         mov     byte [ebx - copy_dlgdata + copy_dlgdata.flags0], 0xC
  1566.         and     byte [ebx - copy_dlgdata + copy_dlgdata.flags1], not 4
  1567.         and     byte [ebx - copy_dlgdata + copy_dlgdata.flags2], not 4
  1568.         push    ebx
  1569.         call    DialogBox
  1570.         cmp     eax, copy_dlgdata.copy_btn
  1571.         jnz     .ret2
  1572. ; Š®¯¨à㥬
  1573.         mov     esi, CopyDestEditBuf+12
  1574.         mov     edi, esi
  1575.         xor     eax, eax
  1576.         or      ecx, -1
  1577.         repnz   scasb
  1578.         dec     edi
  1579.         dec     edi
  1580.         cmp     edi, esi
  1581.         jb      .ret2
  1582.         mov     [bEndSlash], 0
  1583.         cmp     byte [edi], '/'
  1584.         jnz     @f
  1585.         cmp     edi, esi
  1586.         jz      @f
  1587.         mov     byte [edi], 0
  1588.         dec     edi
  1589.         mov     [bEndSlash], 1
  1590. @@:
  1591. ; …᫨ ¯ãâì ­¥ ­ ç¨­ ¥âáï á® á«íè , áç¨â ¥¬ ¥£® ®â­®á¨â¥«ì­® ⥪ã饩 ¯ ¯ª¨
  1592.         cmp     byte [esi], '/'
  1593.         jz      .copy_absolute_path
  1594.         push    esi
  1595.         push    edi
  1596.         lea     edi, [ebp + panel1_dir - panel1_data]
  1597.         or      ecx, -1
  1598.         xor     eax, eax
  1599.         repnz   scasb
  1600.         not     ecx
  1601.         pop     edi
  1602.         push    edi
  1603.         add     edi, ecx
  1604.         cmp     edi, CopyDestEditBuf+12+513
  1605.         pop     edi
  1606.         jb      @f
  1607.         pop     esi
  1608.         jmp     .bigfilename
  1609. @@:
  1610.         lea     edx, [edi+2]
  1611.         sub     edx, esi
  1612.         lea     edi, [edi+ecx+1]
  1613.         xchg    ecx, edx
  1614.         std
  1615.         lea     esi, [esi+ecx-1]
  1616.         rep     movsb
  1617.         cld
  1618.         pop     edi
  1619.         lea     esi, [ebp + panel1_dir - panel1_data]
  1620.         push    edi
  1621.         mov     ecx, edx
  1622.         rep     movsb
  1623.         mov     byte [edi-1], '/'
  1624.         pop     esi
  1625. .copy_absolute_path:
  1626. ; ‘­ ç «  ᮧ¤ ñ¬ ¢á¥ ¢ë襫¥¦ é¨¥ ¯ ¯ª¨, ª®â®àë¥ ¥éñ ­¥ áãé¥áâ¢ãîâ
  1627. ; ®á«¥¤­¨© ¨§ í«¥¬¥­â®¢ ¬®¦¥â ¡ëâì ª ª ä ©«®¬, â ª ¨ ¯ ¯ª®©;
  1628. ; ä®àá¨à㥬 ¯ ¯ªã ¢ á«ãç ¥, ¥á«¨ å®âï ¡ë ®¤¨­ ¨§ ¨áâ®ç­¨ª®¢ ï¥âáï ¯ ¯ª®©
  1629.         xor     edx, edx
  1630.         cmp     [ebp + panel1_selected_num - panel1_data], 0
  1631.         jz      .f5_noselected2
  1632.         mov     ecx, [ebp + panel1_numfiles - panel1_data]
  1633.         mov     edi, [ebp + panel1_files - panel1_data]
  1634. .scanselected2:
  1635.         mov     eax, [edi]
  1636.         add     edi, 4
  1637.         test    byte [eax+303], 1
  1638.         jz      @f
  1639.         test    byte [eax], 10h
  1640.         jz      @f
  1641.         inc     edx
  1642. @@:
  1643.         loop    .scanselected2
  1644.         jmp     .f5_selected2
  1645. .f5_noselected2:
  1646.         call    get_curfile_folder_entry
  1647.         test    byte [ecx], 10h
  1648.         setnz   dl
  1649. .f5_selected2:
  1650.         xor     eax, eax
  1651.         mov     edi, esi
  1652. .countslashloop:
  1653.         cmp     byte [edi], '/'
  1654.         jnz     @f
  1655.         inc     eax
  1656.         mov     ecx, edi
  1657. @@:
  1658.         inc     edi
  1659.         cmp     byte [edi], 0
  1660.         jnz     .countslashloop
  1661.         mov     [bNeedRestoreName], 0
  1662. ; "/file-system/partition" folders already exist, so we don't need to create them
  1663.         cmp     eax, 2
  1664.         jbe     .createupdone
  1665. ; we interpret destination as folder if edx!=0 or bEndSlash!=0
  1666.         test    edx, edx
  1667.         jnz     @f
  1668.         cmp     [bEndSlash], 0
  1669.         jnz     @f
  1670.         mov     edi, ecx
  1671.         dec     eax
  1672. @@:
  1673.         mov     [attrinfo.name], esi
  1674.         mov     ecx, eax
  1675. ; ¨é¥¬ ¯®á«¥¤­îî ¯ ¯ªã, ª®â®à ï ¥éñ áãé¥áâ¢ã¥â
  1676. .createuploop1:
  1677.         cmp     eax, 2
  1678.         jbe     .createupdone1
  1679.         mov     dl, [edi]
  1680.         mov     byte [edi], 0
  1681.         push    eax
  1682.         push    70
  1683.         pop     eax
  1684.         mov     ebx, attrinfo
  1685.         int     0x40
  1686.         test    eax, eax
  1687.         pop     eax
  1688.         jnz     .createupcont1
  1689.         test    byte [attrinfo.attr], 10h
  1690.         jnz     .createupdone1
  1691. ; the item required to be a folder, but is file
  1692.         push    aNotFolder
  1693.         push    esi
  1694.         mov     eax, esp
  1695.         push    ContinueBtn
  1696.         push    1
  1697.         push    eax
  1698.         push    2
  1699.         push    -1
  1700.         push    -1
  1701.         push    aError
  1702.         call    SayErr
  1703.         pop     eax
  1704.         pop     eax
  1705. .ret3:
  1706.         ret
  1707. .createupcont1:
  1708.         mov     [edi], dl
  1709.         dec     eax
  1710. @@:
  1711.         dec     edi
  1712.         cmp     byte [edi], '/'
  1713.         jnz     @b
  1714.         jmp     .createuploop1
  1715. .createupdone1:
  1716. ; ᮧ¤ ñ¬ ¢á¥ ¯ ¯ª¨, ª®â®àë¥ ­ ¬ ­ã¦­ë
  1717.         cmp     eax, ecx
  1718.         jae     .createupdone
  1719. @@:
  1720.         inc     edi
  1721.         cmp     byte [edi], 0
  1722.         jz      @f
  1723.         cmp     byte [edi], '/'
  1724.         jnz     @b
  1725. @@:
  1726.         mov     dl, byte [edi]
  1727.         mov     byte [edi], 0
  1728.         push    eax
  1729.         push    RetryOrCancelBtn
  1730.         push    2
  1731.         call    makedir
  1732.         mov     [bNeedRestoreName], 1
  1733.         pop     eax
  1734.         jnz     .ret3
  1735.         inc     eax
  1736.         jmp     .createupdone1
  1737. .createupdone:
  1738.         mov     dl, 1
  1739.         cmp     byte [edi], 1
  1740.         sbb     eax, -1
  1741.         cmp     eax, 2
  1742.         jbe     .docopy
  1743.         mov     [attrinfo.attr], 0      ; assume zero attributes if error
  1744.         push    70
  1745.         pop     eax
  1746.         mov     ebx, attrinfo
  1747.         int     0x40
  1748.         test    [attrinfo.attr], 10h
  1749.         setnz   dl
  1750. .docopy:
  1751.         call    get_curfile_folder_entry
  1752.         mov     eax, ecx
  1753.         cmp     [bNeedRestoreName], 0
  1754.         jz      @f
  1755.         cmp     [bEndSlash], 0
  1756.         jnz     @f
  1757.         cmp     [ebp + panel1_selected_num - panel1_data], 0
  1758.         jnz     @f
  1759.         test    byte [eax], 10h
  1760.         jz      @f
  1761.         mov     dl, 0
  1762. @@:
  1763. ; ­ ç¨­ ¥¬ ᮡá⢥­­® ª®¯¨à®¢ ­¨¥
  1764.         mov     [bDestIsFolder], dl
  1765.         mov     [copy_bSkipAll], 0
  1766.         mov     [copy_bSkipAll2], 0
  1767.         cmp     [ebp + panel1_selected_num - panel1_data], 0
  1768.         jnz     .f5_selected3
  1769.         call    copy_file
  1770. .copydone:
  1771.         push    ebp
  1772.         call    .ctrl_r
  1773.         pop     ebp
  1774.         xor     ebp, panel1_data xor panel2_data
  1775.         jmp     .ctrl_r
  1776. .f5_selected3:
  1777.         mov     ecx, [ebp + panel1_numfiles - panel1_data]
  1778.         mov     esi, [ebp + panel1_files - panel1_data]
  1779. .f5_selected_copyloop:
  1780.         lodsd
  1781.         test    byte [eax+303], 1
  1782.         jz      .f5_selected_copycont
  1783.         mov     [bDestIsFolder], dl
  1784.         call    copy_file
  1785.         ja      .f5_multiple_cancel
  1786.         and     byte [eax+303], not 1
  1787.         pushad
  1788.         call    draw_panel
  1789.         cmp     [bNeedRestoreName], 0
  1790.         jz      @f
  1791.         mov     esi, CopyDestEditBuf+12
  1792.         call    delete_last_name_from_end
  1793. @@:
  1794.         popad
  1795. .f5_selected_copycont:
  1796.         loop    .f5_selected_copyloop
  1797. .f5_multiple_cancel:
  1798.         jmp     .copydone
  1799.  
  1800. .f3:
  1801.         call    view_file
  1802. .ret2:
  1803.         ret
  1804. .f8_has_selected:
  1805.         mov     edi, saved_file_name+511
  1806.         mov     byte [edi], 0
  1807.         mov     eax, [ebp + panel1_selected_num - panel1_data]
  1808. if lang eq ru
  1809.         cmp     eax, 1
  1810.         jz      @f
  1811.         dec     edi
  1812.         mov     byte [edi], ' '
  1813.         cmp     eax, 4
  1814.         jbe     @f
  1815.         dec     edi
  1816.         mov     word [edi], '®¢'
  1817. @@:
  1818.         mov     dword [edi-4], '¬¥­â'
  1819.         mov     dword [edi-8], ' í«¥'
  1820.         sub     edi, 8
  1821. else
  1822.         cmp     eax, 1
  1823.         jz      @f
  1824.         dec     edi
  1825.         mov     byte [edi], 's'
  1826. @@:
  1827.         mov     dword [edi-4], 'item'
  1828.         mov     byte [edi-5], ' '
  1829.         sub     edi, 5
  1830. end if
  1831.         xor     edx, edx
  1832.         push    10
  1833.         pop     ecx
  1834. @@:
  1835.         div     ecx
  1836.         add     dl, '0'
  1837.         dec     edi
  1838.         mov     [edi], dl
  1839.         xor     edx, edx
  1840.         test    eax, eax
  1841.         jnz     @b
  1842.         push    edi
  1843.         push    aConfirmDeleteText
  1844.         mov     eax, esp
  1845.         push    DeleteOrCancelBtn
  1846.         push    2
  1847.         push    eax
  1848.         push    2
  1849.         push    -1
  1850.         push    -1
  1851.         push    aDeleteCaption
  1852.         call    Message
  1853.         add     esp, 8
  1854.         test    eax, eax
  1855.         jnz     .ret2
  1856.         mov     [del_bSkipAll], 0
  1857.         mov     ecx, [ebp + panel1_numfiles - panel1_data]
  1858.         jecxz   .ret2
  1859.         mov     esi, [ebp + panel1_files - panel1_data]
  1860. .f8_loop:
  1861.         lodsd
  1862.         test    byte [eax+303], 1
  1863.         jz      @f
  1864.         call    delete_file
  1865.         ja      .f8_multiple_cancel
  1866. @@:
  1867.         loop    .f8_loop
  1868. .f8_multiple_cancel:
  1869.         jmp     .ctrl_r
  1870. .f8:
  1871.         cmp     [ebp + panel1_selected_num - panel1_data], 0
  1872.         jnz     .f8_has_selected
  1873.         call    get_curfile_folder_entry
  1874.         cmp     [bConfirmDelete], 0
  1875.         jz      .f8_allowed
  1876.         lea     eax, [ecx+40]
  1877.         push    eax
  1878.         mov     esi, aConfirmDeleteText
  1879.         mov     edi, aConfirmDeleteTextBuf
  1880.         push    edi
  1881. @@:
  1882.         lodsb
  1883.         stosb
  1884.         test    al, al
  1885.         jnz     @b
  1886.         dec     edi
  1887.         mov     esi, aDeleteFolder
  1888.         test    byte [ecx], 10h
  1889.         jnz     @f
  1890.         mov     esi, aDeleteFile
  1891. @@:
  1892.         lodsb
  1893.         stosb
  1894.         test    al, al
  1895.         jnz     @b
  1896.         mov     eax, esp
  1897.         push    DeleteOrCancelBtn
  1898.         push    2
  1899.         push    eax
  1900.         push    2
  1901.         push    -1
  1902.         push    -1
  1903.         push    aDeleteCaption
  1904.         call    Message
  1905.         add     esp, 8
  1906.         test    eax, eax
  1907.         jz      .f8_allowed
  1908.         ret
  1909. .f8_allowed:
  1910.         mov     [del_bSkipAll], 0
  1911.         mov     eax, ecx
  1912.         call    delete_file
  1913. .ctrl_r:
  1914. ; Rescan panel
  1915. ;       call    read_folder
  1916. ;       jmp     .done_redraw
  1917.         mov     eax, [ebp + panel1_index - panel1_data]
  1918.         push    eax
  1919.         call    get_curfile_name
  1920.         mov     esi, ecx
  1921.         mov     edi, saved_file_name
  1922. @@:
  1923.         lodsb
  1924.         stosb
  1925.         test    al, al
  1926.         jnz     @b
  1927.         push    [ebp + panel1_start - panel1_data]
  1928.         call    read_folder
  1929.         pop     [ebp + panel1_start - panel1_data]
  1930.         pop     [ebp + panel1_index - panel1_data]
  1931.         or      eax, -1
  1932. @@:
  1933.         inc     eax
  1934.         cmp     eax, [ebp + panel1_numfiles - panel1_data]
  1935.         jae     .ctrl_r.notfound
  1936.         mov     ecx, [ebp + panel1_files - panel1_data]
  1937.         mov     esi, [ecx+eax*4]
  1938.         add     esi, 40
  1939.         mov     edi, saved_file_name
  1940.         call    strcmpi
  1941.         jnz     @b
  1942. .ctrl_r.found:
  1943.         mov     [ebp + panel1_index - panel1_data], eax
  1944. .ctrl_r.notfound:
  1945.         mov     eax, [ebp + panel1_numfiles - panel1_data]
  1946.         dec     eax
  1947.         cmp     [ebp + panel1_index - panel1_data], eax
  1948.         jbe     @f
  1949.         mov     [ebp + panel1_index - panel1_data], eax
  1950. @@:
  1951.         mov     eax, [ebp + panel1_index - panel1_data]
  1952.         cmp     [ebp + panel1_start - panel1_data], eax
  1953.         jbe     @f
  1954.         mov     [ebp + panel1_start - panel1_data], eax
  1955. @@:
  1956.         inc     eax
  1957.         sub     eax, [ebp + panel1_colst - panel1_data]
  1958.         jae     @f
  1959.         xor     eax, eax
  1960. @@:
  1961.         cmp     [ebp + panel1_start - panel1_data], eax
  1962.         jae     @f
  1963.         mov     [ebp + panel1_start - panel1_data], eax
  1964. @@:
  1965.         mov     eax, [ebp + panel1_numfiles - panel1_data]
  1966.         sub     eax, [ebp + panel1_colst - panel1_data]
  1967.         jbe     @f
  1968.         cmp     [ebp + panel1_start - panel1_data], eax
  1969.         jbe     @f
  1970.         mov     [ebp + panel1_start - panel1_data], eax
  1971. @@:
  1972.         jmp     .done_redraw
  1973. .menu:
  1974. ; display context menu
  1975. ; ignore folders
  1976.         call    get_curfile_folder_entry
  1977.         test    byte [ecx], 10h
  1978.         jz      @f
  1979. .menuret:
  1980.         ret
  1981. @@:
  1982.         call    find_extension
  1983.         jc      .menuret
  1984. ; known extension
  1985. @@:
  1986.         cmp     byte [edi], 0
  1987.         jz      .menuret
  1988.         cmp     byte [edi], ';'
  1989.         jz      @f
  1990.         inc     edi
  1991.         jmp     @b
  1992. @@:
  1993.         inc     edi
  1994. @@:
  1995.         inc     edi
  1996.         cmp     byte [edi-1], ' '
  1997.         jz      @b
  1998.         cmp     byte [edi-1], 9
  1999.         jz      @b
  2000.         dec     edi
  2001.         cmp     byte [edi], 0
  2002.         jz      .menuret
  2003.         mov     ecx, esi
  2004. @@:
  2005.         inc     ecx
  2006.         cmp     byte [ecx-1], 0
  2007.         jnz     @b
  2008.         sub     ecx, esi        ; ecx = ¤«¨­  ¨¬¥­¨ ä ©« +1 = ¤«¨­  § £®«®¢ª +1
  2009.         cmp     ecx, 15
  2010.         jb      @f
  2011.         mov     cl, 15
  2012. @@:
  2013.         xor     edx, edx
  2014.         xor     ebp, ebp
  2015.         push    edx
  2016. .menucreateloop:
  2017.         mov     eax, edi
  2018.         xor     ebx, ebx
  2019. @@:
  2020.         cmp     byte [edi], ','
  2021.         jz      @f
  2022.         cmp     byte [edi], bl
  2023.         jz      @f
  2024.         inc     edi
  2025.         jmp     @b
  2026. @@:
  2027.         xchg    bl, [edi]
  2028.         pushad
  2029.         push    nullstr
  2030.         push    1024
  2031.         push    saved_file_name
  2032.         push    eax
  2033.         push    aMenu
  2034.         push    app_path
  2035.         call    [ini.get_str]
  2036.         popad
  2037.         mov     [edi], bl
  2038.         mov     eax, saved_file_name
  2039. @@:
  2040.         cmp     byte [eax], 0
  2041.         jz      .menucreatecont
  2042.         cmp     byte [eax], ','
  2043.         jz      @f
  2044.         inc     eax
  2045.         jmp     @b
  2046. @@:
  2047.         mov     byte [eax], 0
  2048.         push    eax
  2049.         sub     eax, saved_file_name-1
  2050.         cmp     eax, ecx
  2051.         ja      @f
  2052.         mov     eax, ecx
  2053. @@:
  2054.         xchg    eax, [esp]
  2055.         inc     eax
  2056.         push    eax
  2057. @@:
  2058.         inc     eax
  2059.         cmp     byte [eax-1], 0
  2060.         jnz     @b
  2061.         sub     eax, [esp]
  2062.         add     [esp+4], eax
  2063.         pop     eax eax
  2064.         add     eax, 8
  2065.         add     ebp, eax
  2066.         push    ebp
  2067.         and     ebp, 0xFFF
  2068.         cmp     ebp, eax
  2069.         pop     ebp
  2070.         ja      @f
  2071.         push    eax
  2072.         xchg    edx, [esp+4]
  2073.         push    ecx
  2074.         mov     ecx, ebp
  2075.         call    xpgrealloc
  2076.         pop     ecx
  2077.         pop     edx
  2078.         xchg    edx, [esp]
  2079.         test    eax, eax
  2080.         xchg    eax, [esp]
  2081.         jz      .menucreated
  2082. @@:
  2083.         neg     eax
  2084.         add     eax, ebp
  2085.         add     eax, [esp]
  2086.         and     dword [eax], 0
  2087.         and     dword [eax+4], 0
  2088.         test    edx, edx
  2089.         jz      @f
  2090.         sub     eax, [esp]
  2091.         mov     [edx], eax
  2092.         add     eax, [esp]
  2093.         sub     edx, [esp]
  2094.         mov     [eax+4], edx
  2095. @@:
  2096.         mov     edx, eax
  2097.         push    esi edi
  2098.         mov     esi, saved_file_name
  2099.         lea     edi, [eax+8]
  2100. @@:
  2101.         lodsb
  2102.         stosb
  2103.         test    al, al
  2104.         jnz     @b
  2105.         push    esi
  2106.         sub     esi, saved_file_name
  2107.         sub     esi, ecx
  2108.         jae     .menunoadd
  2109.         neg     esi
  2110. @@:
  2111.         mov     byte [edi-1], ' '
  2112.         stosb
  2113.         dec     esi
  2114.         jnz     @b
  2115. .menunoadd:
  2116.         pop     esi
  2117. @@:
  2118.         lodsb
  2119.         stosb
  2120.         test    al, al
  2121.         jnz     @b
  2122.         pop     edi esi
  2123. .menucreatecont:
  2124.         inc     edi
  2125.         cmp     byte [edi-1], ','
  2126.         jz      .menucreateloop
  2127. .menucreated:
  2128.         test    edx, edx
  2129.         jz      .menuret_free
  2130.         and     dword [edx], 0
  2131.         pop     edx
  2132.         mov     ecx, edx
  2133.         add     [ecx], edx
  2134. @@:
  2135.         mov     ecx, [ecx]
  2136.         cmp     dword [ecx], 0
  2137.         jz      @f
  2138.         add     [ecx], edx
  2139.         add     [ecx+4], edx
  2140.         jmp     @b
  2141. @@:
  2142.         add     [ecx+4], edx
  2143.         push    edx
  2144.         push    1
  2145.         push    esi
  2146.         push    edx
  2147.         call    menu
  2148.         cmp     eax, -1
  2149.         jz      .menuret_free
  2150.         lea     edi, [eax+8]
  2151. @@:
  2152.         inc     edi
  2153.         cmp     byte [edi-1], 0
  2154.         jnz     @b
  2155.         mov     ebp, [active_panel]
  2156.         call    get_curfile_folder_entry
  2157.         call    .run_association2
  2158. .menuret_free:
  2159.         pop     ecx
  2160.         jmp     pgfree
  2161. .f7:
  2162.         mov     dword [CopyDestEditBuf], CopyDestEditBuf.length
  2163.         and     dword [CopyDestEditBuf+4], 0
  2164.         and     dword [CopyDestEditBuf+8], 0
  2165.         mov     byte [CopyDestEditBuf+12], 0
  2166.         mov     ebx, mkdir_dlgdata
  2167.         mov     eax, [cur_width]
  2168.         sub     eax, 12
  2169.         mov     [ebx + dlgtemplate.width], eax
  2170.         dec     eax
  2171.         dec     eax
  2172.         mov     [ebx - mkdir_dlgdata + mkdir_dlgdata.width2], eax
  2173.         shr     eax, 1
  2174.         dec     eax
  2175.         dec     eax
  2176.         mov     [ebx - mkdir_dlgdata + mkdir_dlgdata.cont_x2], eax
  2177.         sub     eax, a_ContinueLength-1
  2178.         mov     [ebx - mkdir_dlgdata + mkdir_dlgdata.cont_x1], eax
  2179.         add     eax, a_ContinueLength+3
  2180.         mov     [ebx - mkdir_dlgdata + mkdir_dlgdata.cnl_x1], eax
  2181.         add     eax, aCancelBLength - 1
  2182.         mov     [ebx - mkdir_dlgdata + mkdir_dlgdata.cnl_x2], eax
  2183.         mov     byte [ebx - mkdir_dlgdata + mkdir_dlgdata.flags0], 0xC
  2184.         and     byte [ebx - mkdir_dlgdata + mkdir_dlgdata.flags1], not 4
  2185.         and     byte [ebx - mkdir_dlgdata + mkdir_dlgdata.flags2], not 4
  2186.         push    ebx
  2187.         call    DialogBox
  2188.         cmp     eax, mkdir_dlgdata.cont_btn
  2189.         jnz     .ret2
  2190.         mov     esi, CopyDestEditBuf+12
  2191.         cmp     byte [esi], 0
  2192.         jz      .ret2
  2193.         cmp     byte [esi], '/'
  2194.         jz      .mkdir_absolute_path
  2195.         push    esi
  2196.         lea     edi, [ebp + panel1_dir - panel1_data]
  2197.         or      ecx, -1
  2198.         xor     eax, eax
  2199.         repnz   scasb
  2200.         not     ecx
  2201.         mov     edi, esi
  2202. @@:
  2203.         cmp     byte [edi+1], 0
  2204.         jz      @f
  2205.         inc     edi
  2206.         jmp     @b
  2207. @@:
  2208.         push    edi
  2209.         add     edi, ecx
  2210.         cmp     edi, CopyDestEditBuf+12+513
  2211.         pop     edi
  2212.         jb      @f
  2213.         pop     esi
  2214.         jmp     .bigfilename
  2215. @@:
  2216.         lea     edx, [edi+2]
  2217.         sub     edx, esi
  2218.         lea     edi, [edi+ecx+1]
  2219.         xchg    ecx, edx
  2220.         std
  2221.         lea     esi, [esi+ecx-1]
  2222.         rep     movsb
  2223.         cld
  2224.         pop     edi
  2225.         lea     esi, [ebp + panel1_dir - panel1_data]
  2226.         push    edi
  2227.         mov     ecx, edx
  2228.         rep     movsb
  2229.         mov     byte [edi-1], '/'
  2230.         pop     esi
  2231. .mkdir_absolute_path:
  2232.         push    RetryOrCancelBtn
  2233.         push    2
  2234.         call    makedir
  2235.         jmp     .copydone
  2236. .change_mode:
  2237.         dec     eax
  2238.         mov     [ebp + panel1_colmode - panel1_data], eax
  2239.         call    calc_colwidths
  2240.         jmp     draw_panel
  2241. .quick_jump:
  2242.         dec     eax
  2243.         cmp     al, 10
  2244.         jnz     @f
  2245.         xor     eax, eax
  2246. @@:
  2247.         mov     eax, [FolderShortcuts+eax*4]
  2248.         test    eax, eax
  2249.         jnz     @f
  2250.         ret
  2251. @@:
  2252.         lea     esi, [ebp + panel1_dir - panel1_data]
  2253.         push    eax esi
  2254.         mov     edi, prev_dir
  2255. @@:
  2256.         lodsb
  2257.         stosb
  2258.         test    al, al
  2259.         jnz     @b
  2260.         pop     edi esi
  2261. @@:
  2262.         lodsb
  2263.         stosb
  2264.         test    al, al
  2265.         jnz     @b
  2266.         jmp     .reread
  2267. .greyplus:
  2268.         push    0
  2269.         mov     ecx, aSelect
  2270.         jmp     @f
  2271. .greyminus:
  2272.         push    1
  2273.         mov     ecx, aDeselect
  2274. @@:
  2275.         mov     eax, mark_dlgdata
  2276.         mov     [eax+mark_dlgdata.title-mark_dlgdata], ecx
  2277.         mov     [eax+mark_dlgdata.flags-mark_dlgdata], 0xC
  2278.         mov     edi, enter_string_buf+12
  2279.         mov     dword [edi-12], 512
  2280.         mov     dword [edi-8], 1
  2281.         and     dword [edi-4], 0
  2282.         mov     word [edi], '*'
  2283.         push    eax
  2284.         call    DialogBox
  2285.         inc     eax
  2286.         jnz     @f
  2287. .noselect:
  2288.         pop     eax
  2289.         ret
  2290. @@:
  2291.         xor     eax, eax
  2292.         mov     esi, edi
  2293. @@:
  2294.         lodsb
  2295.         mov     al, [tolower_table+eax]
  2296.         mov     [esi-1], al
  2297.         test    al, al
  2298.         jnz     @b
  2299. @@:
  2300.         mov     ecx, [ebp + panel1_numfiles - panel1_data]
  2301.         mov     ebx, [ebp + panel1_files - panel1_data]
  2302.         jecxz   .noselect
  2303.         mov     eax, [ebx]
  2304.         cmp     word [eax+40], '..'
  2305.         jnz     .selectloop
  2306.         cmp     byte [eax+42], 0
  2307.         jnz     .selectloop
  2308.         dec     ecx
  2309.         jz      .noselect
  2310.         add     ebx, 4
  2311. .selectloop:
  2312.         xor     eax, eax
  2313.         mov     esi, [ebx]
  2314.         add     esi, 40
  2315.         mov     edx, lower_file_name-1
  2316. @@:
  2317.         lodsb
  2318.         inc     edx
  2319.         mov     al, [tolower_table+eax]
  2320.         mov     [edx], al
  2321.         test    al, al
  2322.         jnz     @b
  2323.         mov     esi, lower_file_name
  2324.         call    match_mask_rev_lowercase
  2325.         jc      @f
  2326.         mov     esi, [ebx]
  2327.         mov     eax, [esi+32]
  2328.         cmp     byte [esp], 0
  2329.         jz      .doselect
  2330.         test    byte [esi+303], 1
  2331.         jz      @f
  2332.         and     byte [esi+303], not 1
  2333.         sub     dword [ebp + panel1_selected_size - panel1_data], eax
  2334.         mov     eax, [esi+36]
  2335.         sbb     dword [ebp + panel1_selected_size+4 - panel1_data], eax
  2336.         dec     dword [ebp + panel1_selected_num - panel1_data]
  2337.         jmp     @f
  2338. .doselect:
  2339.         test    byte [esi+303], 1
  2340.         jnz     @f
  2341.         or      byte [esi+303], 1
  2342.         add     dword [ebp + panel1_selected_size - panel1_data], eax
  2343.         mov     eax, [esi+36]
  2344.         adc     dword [ebp + panel1_selected_size+4 - panel1_data], eax
  2345.         inc     dword [ebp + panel1_selected_num - panel1_data]
  2346. @@:
  2347.         add     ebx, 4
  2348.         dec     ecx
  2349.         jnz     .selectloop
  2350.         pop     eax
  2351.         jmp     .done_redraw
  2352. .greyasterisk:
  2353.         mov     ecx, [ebp + panel1_numfiles - panel1_data]
  2354.         mov     esi, [ebp + panel1_files - panel1_data]
  2355.         jecxz   .galoopdone
  2356. .galoop:
  2357.         lodsd
  2358.         cmp     word [eax+40], '..'
  2359.         jnz     @f
  2360.         cmp     byte [eax+42], 0
  2361.         jz      .gacont
  2362. @@:
  2363.         xor     byte [eax+303], 1
  2364.         mov     edx, [eax+32]
  2365.         test    byte [eax+303], 1
  2366.         jz      .gadel
  2367.         add     dword [ebp + panel1_selected_size - panel1_data], edx
  2368.         mov     edx, [eax+36]
  2369.         adc     dword [ebp + panel1_selected_size+4 - panel1_data], edx
  2370.         inc     dword [ebp + panel1_selected_num - panel1_data]
  2371.         jmp     .gacont
  2372. .gadel:
  2373.         sub     dword [ebp + panel1_selected_size - panel1_data], edx
  2374.         mov     edx, [eax+36]
  2375.         sbb     dword [ebp + panel1_selected_size+4 - panel1_data], edx
  2376.         dec     dword [ebp + panel1_selected_num - panel1_data]
  2377. .gacont:
  2378.         loop    .galoop
  2379. .galoopdone:
  2380.         jmp     .done_redraw
  2381.  
  2382. panels_OnRedraw:
  2383.         call    draw_cmdbar
  2384.         mov     ebp, panel1_data
  2385.         call    calc_colwidths
  2386.         call    draw_panel
  2387.         mov     ebp, panel2_data
  2388.         call    calc_colwidths
  2389.         call    draw_panel
  2390.         ret
  2391.  
  2392. init_console:
  2393.         mov     ecx, [console_data_ptr]
  2394.         call    pgfree
  2395.         mov     eax, [cur_width]
  2396.         mul     [cur_height]
  2397.         mov     ecx, eax
  2398.         push    ecx
  2399.         shl     ecx, 2
  2400.         call    pgalloc
  2401.         pop     ecx
  2402.         test    eax, eax
  2403.         jz      exit
  2404.         mov     [console_data_ptr], eax
  2405.         mov     edi, eax
  2406.         mov     ax, 0720h
  2407.         rep     stosw
  2408.         mov     [panel1_left], ecx
  2409.         mov     [panel1_top], ecx
  2410.         mov     [panel2_top], ecx
  2411.         mov     eax, [cur_width]
  2412.         inc     eax
  2413.         shr     eax, 1
  2414.         mov     [panel1_width], eax
  2415.         mov     [panel2_left], eax
  2416.         sub     eax, [cur_width]
  2417.         neg     eax
  2418.         mov     [panel2_width], eax
  2419.         mov     eax, [cur_height]
  2420.         dec     eax
  2421.         dec     eax
  2422.         mov     [panel1_height], eax
  2423.         mov     [panel2_height], eax
  2424.         ret
  2425.  
  2426. get_curfile_folder_entry:
  2427.         mov     ecx, [ebp + panel1_index - panel1_data]
  2428.         shl     ecx, 2
  2429.         add     ecx, [ebp + panel1_files - panel1_data]
  2430.         mov     ecx, [ecx]
  2431.         ret
  2432. get_curfile_name:
  2433.         call    get_curfile_folder_entry
  2434.         add     ecx, 40
  2435.         ret
  2436.  
  2437. panels_getname:
  2438. if lang eq ru
  2439.         mov     eax, ' ­¥'
  2440.         stosd
  2441.         mov     eax, '«¨  '
  2442.         stosd
  2443.         mov     eax, '    '
  2444.         stosd
  2445.         stosb
  2446. else
  2447.         mov     eax, 'Pane'
  2448.         stosd
  2449.         mov     eax, 'ls  '
  2450.         stosd
  2451.         mov     eax, '    '
  2452.         stosd
  2453.         stosb
  2454. end if
  2455.         sub     ecx, 13
  2456.         mov     ebp, [active_panel]
  2457.         lea     esi, [ebp + panel1_dir - panel1_data]
  2458.         push    3
  2459.         pop     edx
  2460. @@:
  2461.         lodsb
  2462.         stosb
  2463.         dec     ecx
  2464.         test    al, al
  2465.         jz      @f
  2466.         cmp     al, '/'
  2467.         jnz     @b
  2468.         dec     edx
  2469.         jnz     @b
  2470. @@:
  2471.         test    al, al
  2472.         jnz     @f
  2473.         dec     esi
  2474.         dec     edi
  2475. @@:
  2476.         push    esi
  2477. @@:
  2478.         lodsb
  2479.         test    al, al
  2480.         jnz     @b
  2481.         dec     esi
  2482.         mov     ebx, esi
  2483.         sub     ebx, [esp]
  2484.         dec     esi
  2485.         push    esi
  2486.         mov     esi, [ebp + panel1_index - panel1_data]
  2487.         shl     esi, 2
  2488.         add     esi, [ebp + panel1_files - panel1_data]
  2489.         mov     esi, [esi]
  2490.         add     esi, 40
  2491.         push    esi
  2492. @@:
  2493.         lodsb
  2494.         test    al, al
  2495.         jnz     @b
  2496.         add     ebx, esi
  2497.         sub     ebx, [esp]
  2498.         dec     esi
  2499.         cmp     ebx, ecx
  2500.         jbe     @f
  2501.         mov     al, '.'
  2502.         stosb
  2503.         stosb
  2504.         stosb
  2505.         sub     ecx, 3
  2506.         mov     ebx, ecx
  2507. @@:
  2508.         add     edi, ebx
  2509.         inc     ecx
  2510.         std
  2511. @@:
  2512.         movsb
  2513.         dec     ecx
  2514.         jz      .nodir
  2515.         cmp     esi, [esp]
  2516.         jae     @b
  2517.         mov     al, '/'
  2518.         stosb
  2519.         dec     ecx
  2520.         jz      .nodir
  2521.         mov     esi, [esp+4]
  2522. @@:
  2523.         cmp     esi, [esp+8]
  2524.         jb      .nodir
  2525.         movsb
  2526.         loop    @b
  2527. .nodir:
  2528.         cld
  2529.         pop     eax
  2530.         pop     eax
  2531.         pop     eax
  2532.         ret
  2533.  
  2534. draw_window:
  2535.         push    12
  2536.         pop     eax
  2537.         push    1
  2538.         pop     ebx
  2539.         int     40h
  2540.         mov     al, 48
  2541.         mov     bl, 4
  2542.         int     40h
  2543.         mov     [skinh], eax
  2544.         mov     ebx, [cur_width]
  2545.         imul    ebx, font_width
  2546.         add     ebx, 100*65536 + 5*2-1
  2547.         mov     ecx, [cur_height]
  2548.         imul    ecx, font_height
  2549.         lea     ecx, [eax+ecx+5-1+100*65536]
  2550.         xor     eax, eax
  2551.         mov     edx, 0x53000000
  2552.         mov     edi, header
  2553.         int     40h
  2554.         mov     al, 13
  2555.         xor     edx, edx
  2556.         cmp     [fill_width], 0
  2557.         jz      @f
  2558.         mov     ebx, [wnd_width]
  2559.         sub     ebx, [fill_width]
  2560.         sub     ebx, 5-1
  2561.         shl     ebx, 16
  2562.         mov     bx, word [fill_width]
  2563.         mov     ecx, [skinh-2]
  2564.         mov     cx, word [wnd_height]
  2565.         sub     cx, word [skinh]
  2566.         sub     cx, 5-1
  2567.         int     0x40
  2568. @@:
  2569.         cmp     [fill_height], 0
  2570.         jz      @f
  2571.         xor     edx, edx
  2572.         mov     ebx, 50000h
  2573.         mov     bx, word [wnd_width]
  2574.         sub     ebx, 9
  2575.         mov     ecx, [wnd_height]
  2576.         sub     ecx, [fill_height]
  2577.         sub     ecx, 5-1
  2578.         shl     ecx, 16
  2579.         mov     cx, word [fill_height]
  2580.         int     0x40
  2581. @@:
  2582. ;        xor     ecx, ecx
  2583. ;        call    draw_image
  2584.         mov     al, 65
  2585.         mov     ebx, [MemForImage]
  2586.         test    ebx, ebx
  2587.         jz      @f
  2588.         mov     ecx, [cur_width]
  2589.         imul    ecx, font_width*10000h
  2590.         mov     cx, word [cur_height]
  2591.         imul    cx, font_height
  2592.         mov     edx, [skinh]
  2593.         add     edx, 5*10000h
  2594.         mov     esi, 8
  2595.         mov     edi, console_colors
  2596.         xor     ebp, ebp
  2597.         int     0x40
  2598. @@:
  2599.         mov     al, 12
  2600.         push    2
  2601.         pop     ebx
  2602.         int     40h
  2603.         ret
  2604.  
  2605. draw_image.nomem:
  2606.         mov     al, 13
  2607.         xor     edx, edx
  2608.         mov     ebx, [cur_width]
  2609.         imul    ebx, font_width
  2610.         add     ebx, 5*65536
  2611.         mov     ecx, [skinh-2]
  2612.         mov     cx, word [cur_height]
  2613.         imul    cx, font_height
  2614.         int     40h
  2615.         mov     al, 4
  2616.         mov     ebx, 32*65536+32
  2617.         mov     ecx, 0xFFFFFF
  2618.         mov     edx, nomem_draw
  2619.         push    nomem_draw.size
  2620.         pop     esi
  2621.         int     40h
  2622.         ret
  2623.  
  2624. draw_image:
  2625.         mov     [bMemForImageValidData], byte 1
  2626.         cmp     [MemForImage], 0
  2627.         jnz     .allocated
  2628. ; allocate memory for image
  2629.         mov     ecx, [cur_width]
  2630.         imul    ecx, [cur_height]
  2631.         imul    ecx, font_width*font_height
  2632.         call    pgalloc
  2633.         test    eax, eax
  2634.         jz      draw_image.nomem
  2635.         mov     [MemForImage], eax
  2636.         mov     [bMemForImageValidData], byte 0
  2637. .allocated:
  2638.         and     [max_x], 0
  2639.         or      [min_x], -1
  2640.         and     [max_y], 0
  2641.         or      [min_y], -1
  2642.         mov     eax, [cursor_y]
  2643.         mul     [cur_width]
  2644.         add     eax, [cursor_x]
  2645.         add     eax, eax
  2646.         add     eax, [console_data_ptr]
  2647.         xchg    [cur_cursor_pos], eax
  2648.         mov     [old_cursor_pos], eax
  2649.         mov     edi, [MemForImage]
  2650.         mov     esi, [console_data_ptr]
  2651.         mov     ecx, [cur_height]
  2652. .lh:
  2653.         push    ecx
  2654.         mov     ecx, [cur_width]
  2655. .lw:
  2656.         push    ecx
  2657.         mov     eax, [cur_width]
  2658.         imul    eax, [cur_height]
  2659.         mov     ebx, [esi]
  2660.         cmp     [bMemForImageValidData], 0
  2661.         jz      @f
  2662.         cmp     esi, [cur_cursor_pos]
  2663.         jz      @f
  2664.         cmp     esi, [old_cursor_pos]
  2665.         jz      @f
  2666.         cmp     bx, [eax*2+esi]
  2667.         jnz     @f
  2668.         inc     esi
  2669.         inc     esi
  2670.         jmp     .skip_symbol
  2671. @@:
  2672.         mov     [eax*2+esi], bx
  2673.         cmp     ecx, [min_x]
  2674.         ja      @f
  2675.         mov     [min_x], ecx
  2676. @@:
  2677.         cmp     ecx, [max_x]
  2678.         jb      @f
  2679.         mov     [max_x], ecx
  2680. @@:
  2681.         mov     eax, [esp+4]
  2682.         mov     [min_y], eax
  2683.         cmp     eax, [max_y]
  2684.         jb      @f
  2685.         mov     [max_y], eax
  2686. @@:
  2687.         push    edi
  2688.         xor     eax, eax
  2689.         mov     al, [esi+1]
  2690.         and     al, 0xF
  2691.         mov     ebx, eax
  2692.         mov     al, [esi+1]
  2693.         shr     al, 4
  2694.         mov     ebp, eax
  2695.         sub     ebx, ebp
  2696.         lodsb
  2697.         inc     esi
  2698. if font_width > 8
  2699.         lea     edx, [eax+eax+font]
  2700. else
  2701.         lea     edx, [eax+font]
  2702. end if
  2703. .sh:
  2704.         mov     ecx, [edx]
  2705. repeat font_width
  2706.         shr     ecx, 1
  2707.         sbb     eax, eax
  2708.         and     eax, ebx
  2709.         add     eax, ebp
  2710.         mov     [edi+%-1], al
  2711. end repeat
  2712.         mov     eax, [cur_width]
  2713. ;        imul    eax, font_width
  2714. ;        add     edi, eax
  2715. if font_width = 6
  2716.         lea     eax, [eax*2+eax]
  2717.         lea     edi, [edi+eax*2]
  2718. else if font_width = 7
  2719.         lea     edi, [edi+eax*8]
  2720.         sub     edi, eax
  2721. else if font_width = 8
  2722.         lea     edi, [edi+eax*8]
  2723. else if font_width = 9
  2724.         lea     edi, [edi+eax*8]
  2725.         add     edi, eax
  2726. else if font_width = 10
  2727.         lea     eax, [eax*4+eax]
  2728.         lea     edi, [edi+eax*2]
  2729. else
  2730. Unknown font_width value!
  2731. end if
  2732. if font_width > 8
  2733.         add     edx, 256*2
  2734.         cmp     edx, font+256*2*font_height
  2735. else
  2736.         add     edx, 256
  2737.         cmp     edx, font+256*font_height
  2738. end if
  2739.         jb      .sh
  2740.         pop     edi
  2741. .skip_symbol:
  2742.         pop     ecx
  2743.         add     edi, font_width
  2744.         dec     ecx
  2745.         jnz     .lw
  2746.         mov     eax, [cur_width]
  2747.         imul    eax, (font_height-1)*font_width
  2748.         add     edi, eax
  2749.         pop     ecx
  2750.         dec     ecx
  2751.         jnz     .lh
  2752. ; cursor
  2753.         mov     eax, [cursor_y]
  2754.         inc     eax
  2755.         jz      .nocursor
  2756.         mul     [cur_width]
  2757.         imul    eax, font_height*font_width
  2758.         mov     edx, [cursor_x]
  2759.         inc     edx
  2760.         imul    edx, font_width
  2761.         add     eax, edx
  2762.         add     eax, [MemForImage]
  2763.         mov     edx, [cur_width]
  2764.         imul    edx, font_width
  2765.         neg     edx
  2766.         mov     ecx, (font_height*15+50)/100
  2767. .cursor_loop:
  2768.         push    ecx
  2769.         mov     ecx, font_width
  2770.         add     eax, edx
  2771.         push    eax
  2772. @@:
  2773. ;        add     byte [eax-1], 0x10
  2774.         xor     byte [eax-1], 7
  2775.         sub     eax, 1
  2776.         loop    @b
  2777.         pop     eax
  2778.         pop     ecx
  2779.         loop    .cursor_loop
  2780. .nocursor:
  2781.         cmp     [min_y], -1
  2782.         jz      .nodraw
  2783.         mov     ecx, [cur_width]
  2784.         mov     ebx, [cur_height]
  2785.         mov     eax, ebx
  2786.         sub     ebx, [max_y]
  2787.         sub     eax, [min_y]
  2788.         sub     eax, ebx
  2789.         inc     eax
  2790.         imul    ebp, eax, font_height
  2791.         mov     edx, ecx
  2792.         sub     edx, [max_x]
  2793.         imul    edx, font_width
  2794.         mov     eax, edx
  2795.         shl     edx, 16
  2796.         imul    dx, bx, font_height
  2797.         imul    ebx, [cur_width]
  2798.         mov     ecx, [max_x]
  2799.         sub     ecx, [min_x]
  2800.         inc     ecx
  2801.         imul    ecx, font_width*10000h
  2802.         add     ecx, ebp
  2803.         imul    ebx, font_width*font_height
  2804.         add     ebx, [MemForImage]
  2805.         add     ebx, eax
  2806.         add     edx, [skinh]
  2807.         add     edx, 5*10000h
  2808.         imul    esi, [cur_width], font_width
  2809.         mov     ebp, ecx
  2810.         shr     ebp, 16
  2811.         sub     esi, ebp
  2812.         mov     ebp, esi
  2813.         push    65
  2814.         pop     eax
  2815.         mov     edi, console_colors
  2816.         push    8
  2817.         pop     esi
  2818.         int     40h
  2819. .nodraw:
  2820.         ret
  2821.  
  2822. get_console_ptr:
  2823. ; in: eax=x, edx=y
  2824. ; out: edi->console data
  2825.         push    edx
  2826.         imul    edx, [cur_width]
  2827.         add     edx, eax
  2828.         mov     edi, [console_data_ptr]
  2829.         lea     edi, [edi + edx*2]
  2830.         pop     edx
  2831.         ret
  2832.  
  2833. draw_keybar:
  2834.         pushad
  2835.         xor     eax, eax
  2836.         test    [ctrlstate], 3
  2837.         jz      @f
  2838.         inc     eax
  2839. @@:
  2840.         test    [ctrlstate], 0xC
  2841.         jz      @f
  2842.         or      al, 2
  2843. @@:
  2844.         test    [ctrlstate], 0x30
  2845.         jz      @f
  2846.         or      al, 4
  2847. @@:
  2848.         imul    eax, 6*12
  2849.         mov     esi, [active_screen_vtable]
  2850.         mov     esi, [esi+screen_vtable.keybar]
  2851.         add     esi, eax
  2852.         xor     ecx, ecx
  2853.         inc     ecx
  2854.         xor     eax, eax
  2855.         mov     edx, [cur_height]
  2856.         dec     edx
  2857.         call    get_console_ptr
  2858.         push    6
  2859.         pop     ebx
  2860.         mov     eax, [cur_width]
  2861.         sub     eax, 11+9+3*2+6
  2862.         cmp     eax, 7*11
  2863.         jl      @f
  2864.         cdq
  2865.         mov     bl, 11
  2866.         div     ebx
  2867.         mov     ebx, eax
  2868. @@:
  2869.         xor     edx, edx
  2870. .l:
  2871.         add     edx, 7
  2872.         cmp     cl, 10
  2873.         jb      @f
  2874.         inc     edx
  2875. @@:
  2876.         cmp     edx, [cur_width]
  2877.         ja      .ret
  2878.         cmp     cl, 10
  2879.         jae     .twodig
  2880.         lea     eax, [ecx+'0']
  2881.         stosb
  2882.         mov     al, [keybar_number_color]
  2883.         stosb
  2884.         jmp     .cmn
  2885. .twodig:
  2886.         mov     al, cl
  2887.         cbw
  2888.         div     [_10]
  2889.         add     al, '0'
  2890.         stosb
  2891.         mov     al, [keybar_number_color]
  2892.         stosb
  2893.         xchg    al, ah
  2894.         add     al, '0'
  2895.         stosw
  2896. .cmn:
  2897.         mov     ah, [keybar_name_color]
  2898.         push    ecx
  2899.         mov     cl, 6
  2900. @@:
  2901.         lodsb
  2902.         stosw
  2903.         loop    @b
  2904.         mov     al, ' '
  2905.         lea     ecx, [ebx-6]
  2906.         cmp     byte [esp], 12
  2907.         jz      .ret_pop
  2908.         add     edx, ecx
  2909.         rep     stosw
  2910.         pop     ecx
  2911.         inc     edx
  2912.         cmp     edx, [cur_width]
  2913.         ja      .ret
  2914.         mov     ah, [keybar_bgr_color]
  2915.         stosw
  2916.         inc     ecx
  2917.         jmp     .l
  2918. .ret_pop:
  2919.         pop     ecx
  2920. .ret:
  2921.         cmp     byte [edi-2], ' '
  2922.         jnz     @f
  2923.         dec     edi
  2924.         dec     edi
  2925. @@:
  2926.         push    edi
  2927.         xor     eax, eax
  2928.         mov     edx, [cur_height]
  2929.         call    get_console_ptr
  2930.         mov     ecx, edi
  2931.         pop     edi
  2932.         sub     ecx, edi
  2933.         shr     ecx, 1
  2934.         mov     al, ' '
  2935.         mov     ah, [keybar_name_color]
  2936.         rep     stosw
  2937. .done:
  2938.         popad
  2939.         ret
  2940.  
  2941. draw_cmdbar:
  2942.         mov     esi, [active_panel]
  2943.         add     esi, panel1_dir - panel1_data
  2944.         xor     eax, eax
  2945.         mov     edx, [cur_height]
  2946.         dec     edx
  2947.         dec     edx
  2948.         call    get_console_ptr
  2949.         mov     ah, [cmdbar_prefix_color]
  2950.         mov     ecx, [cur_width]
  2951.         dec     ecx
  2952. @@:
  2953.         lodsb
  2954.         test    al, al
  2955.         jz      @f
  2956.         stosw
  2957.         loop    @b
  2958. @@:
  2959.         mov     al, '>'
  2960.         stosw
  2961.         mov     al, ' '
  2962.         mov     ah, [cmdbar_normal_color]
  2963.         rep     stosw
  2964.         ret
  2965.  
  2966. draw_border:
  2967.         push    edi
  2968.         mov     al, 0xC9
  2969.         stosw
  2970.         mov     al, 0xCD
  2971.         lea     ecx, [ebx-2]
  2972.         rep     stosw
  2973.         mov     al, 0xBB
  2974.         stosw
  2975.         pop     edi
  2976.         add     edi, [cur_width]
  2977.         add     edi, [cur_width]
  2978.         lea     ecx, [edx-2]
  2979. .l:
  2980.         push    edi
  2981.         mov     al, 0xBA
  2982.         stosw
  2983.         mov     al, 0x20
  2984.         push    ecx
  2985.         lea     ecx, [ebx-2]
  2986.         rep     stosw
  2987.         pop     ecx
  2988.         mov     al, 0xBA
  2989.         stosw
  2990.         pop     edi
  2991.         add     edi, [cur_width]
  2992.         add     edi, [cur_width]
  2993.         loop    .l
  2994.         mov     al, 0xC8
  2995.         stosw
  2996.         mov     al, 0xCD
  2997.         lea     ecx, [ebx-2]
  2998.         rep     stosw
  2999.         mov     al, 0xBC
  3000.         stosw
  3001.         ret
  3002.  
  3003. calc_colwidths:
  3004. ; in: ebp->panel data
  3005.         imul    esi, [ebp + panel1_colmode - panel1_data], PanelMode.size
  3006.         add     esi, colmodes
  3007.         lodsd
  3008.         mov     ecx, eax
  3009.         lea     edx, [ecx-1]
  3010.         xor     ebx, ebx
  3011.         add     esi, PanelMode.ColumnWidths-4
  3012.         push    ecx esi
  3013.         xor     eax, eax
  3014. .loop:
  3015.         lodsb
  3016.         add     edx, eax
  3017.         cmp     al, 1
  3018.         adc     ebx, 0
  3019.         loop    .loop
  3020.         pop     esi ecx
  3021.         lea     edi, [ebp + panel1_colwidths - panel1_data]
  3022.         test    ebx, ebx
  3023.         jz      .loop2
  3024.         mov     eax, [ebp + panel1_width - panel1_data]
  3025.         dec     eax
  3026.         dec     eax
  3027.         sub     eax, edx
  3028.         jae     @f
  3029.         xor     eax, eax
  3030. @@:
  3031.         xor     edx, edx
  3032.         div     ebx
  3033.         test    eax, eax
  3034.         jnz     @f
  3035.         xor     edx, edx
  3036.         inc     eax
  3037. @@:
  3038.         push    eax
  3039. .loop2:
  3040.         movzx   eax, byte [esi]
  3041.         inc     esi
  3042.         test    eax, eax
  3043.         jnz     @f
  3044.         pop     eax
  3045.         push    eax
  3046.         dec     ebx
  3047.         cmp     ebx, edx
  3048.         jae     @f
  3049.         inc     eax
  3050. @@:
  3051.         stosd
  3052.         loop    .loop2
  3053.         pop     eax
  3054.         and     dword [edi], 0
  3055.         ret
  3056.  
  3057. draw_panel:
  3058.         mov     eax, [ebp + panel1_left - panel1_data]
  3059.         mov     edx, [ebp + panel1_top - panel1_data]
  3060.         call    get_console_ptr
  3061. ; draw border
  3062.         mov     ah, [panel_border_color]
  3063.         mov     ebx, [ebp + panel1_width - panel1_data]
  3064.         mov     edx, [ebp + panel1_height - panel1_data]
  3065.         call    draw_border
  3066.         push    eax
  3067.         mov     eax, [ebp + panel1_left - panel1_data]
  3068.         mov     edx, [ebp + panel1_top - panel1_data]
  3069.         add     edx, [ebp + panel1_height - panel1_data]
  3070.         sub     edx, 3
  3071.         call    get_console_ptr
  3072.         pop     eax
  3073.         mov     al, 0xC7
  3074.         stosw
  3075.         mov     al, 0xC4
  3076.         lea     ecx, [ebx-2]
  3077.         rep     stosw
  3078.         mov     al, 0xB6
  3079.         stosw
  3080.  
  3081.         imul    esi, [ebp + panel1_colmode - panel1_data], PanelMode.size
  3082.         add     esi, colmodes
  3083.         lodsd
  3084.         mov     ecx, eax        ; number of columns
  3085.         lea     ebx, [ebp + panel1_colwidths - panel1_data]
  3086.         mov     eax, [ebp + panel1_left - panel1_data]
  3087.         inc     eax
  3088.         mov     [column_left], eax
  3089.         mov     eax, [ebp + panel1_top - panel1_data]
  3090.         inc     eax
  3091.         mov     [column_top], eax
  3092.         mov     eax, [ebp + panel1_height - panel1_data]
  3093.         sub     eax, 4
  3094.         mov     [column_height], eax
  3095.         dec     eax
  3096.         mov     [ebp + panel1_colsz - panel1_data], eax
  3097.         and     [ebp + panel1_colst - panel1_data], 0
  3098.         mov     eax, [ebp + panel1_start - panel1_data]
  3099.         mov     [column_index], eax
  3100.         mov     [last_column_index], eax
  3101. .columns_loop:
  3102.         push    ecx
  3103.         mov     eax, [ebx]
  3104.         add     ebx, 4
  3105.         mov     [column_width], eax
  3106.         cmp     ecx, 1
  3107.         jz      .skip_right_border
  3108.         add     eax, [column_left]
  3109.         mov     edx, [ebp + panel1_top - panel1_data]
  3110.         call    get_console_ptr
  3111.         mov     ah, [panel_header_color]
  3112.         mov     al, 0xD1
  3113.         mov     [edi], ax
  3114.         add     edi, [cur_width]
  3115.         add     edi, [cur_width]
  3116.         mov     ecx, [column_height]
  3117.         mov     al, 0xB3
  3118. @@:
  3119.         mov     [edi], ax
  3120.         add     edi, [cur_width]
  3121.         add     edi, [cur_width]
  3122.         loop    @b
  3123.         mov     al, 0xC1
  3124.         stosw
  3125. .skip_right_border:
  3126.         mov     eax, [column_left]
  3127.         mov     edx, [column_top]
  3128.         call    get_console_ptr
  3129. ; § £®«®¢®ª á⮫¡æ 
  3130.         push    edi
  3131.         mov     edx, [esi]
  3132.         and     edx, 0xF
  3133.         mov     edx, [column_headers+edx*4]
  3134.         movzx   ecx, byte [edx]
  3135.         inc     edx
  3136.         cmp     ecx, [column_width]
  3137.         jb      @f
  3138.         mov     ecx, [column_width]
  3139. @@:
  3140.         push    ecx
  3141.         sub     ecx, [column_width]
  3142.         neg     ecx
  3143.         shr     ecx, 1
  3144.         mov     al, ' '
  3145.         mov     ah, [column_header_color]
  3146.         rep     stosw
  3147.         pop     ecx
  3148.         jecxz   .skipcopyhdr
  3149.         push    ecx
  3150. @@:
  3151.         mov     al, [edx]
  3152.         inc     edx
  3153.         stosw
  3154.         loop    @b
  3155.         pop     ecx
  3156. .skipcopyhdr:
  3157.         sub     ecx, [column_width]
  3158.         neg     ecx
  3159.         inc     ecx
  3160.         shr     ecx, 1
  3161.         mov     al, ' '
  3162.         rep     stosw
  3163.         pop     edi
  3164.         add     edi, [cur_width]
  3165.         add     edi, [cur_width]
  3166. ; á ¬ á⮫¡¥æ
  3167.         mov     eax, [esi]
  3168.         and     eax, 0xF
  3169.         push    ebx esi
  3170.         call    dword [draw_column_proc+eax*4]
  3171.         pop     esi ebx
  3172.         inc     esi
  3173.         mov     eax, [column_width]
  3174.         inc     eax
  3175.         add     [column_left], eax
  3176.         pop     ecx
  3177.         dec     ecx
  3178.         jnz     .columns_loop
  3179. ; ‡ £®«®¢®ª ¯ ­¥«¨ (⥪ãé ï ¯ ¯ª )
  3180.         lea     esi, [ebp + panel1_dir - panel1_data]
  3181.         mov     edi, cur_header
  3182.         mov     ecx, [ebp + panel1_width - panel1_data]
  3183.         sub     ecx, 7
  3184.         movsb
  3185. @@:
  3186.         lodsb
  3187.         stosb
  3188.         dec     ecx
  3189.         test    al, al
  3190.         jz      .header_created
  3191.         cmp     al, '/'
  3192.         jnz     @b
  3193.         mov     edx, esi
  3194. @@:
  3195.         lodsb
  3196.         test    al, al
  3197.         jnz     @b
  3198.         sub     esi, edx
  3199.         dec     esi
  3200.         cmp     esi, ecx
  3201.         jbe     @f
  3202.         mov     word [edi], '..'
  3203.         mov     byte [edi+2], '.'
  3204.         add     edi, 3
  3205.         sub     ecx, 3
  3206.         add     edx, esi
  3207.         sub     edx, ecx
  3208. @@:
  3209.         mov     esi, edx
  3210. @@:
  3211.         lodsb
  3212.         stosb
  3213.         dec     ecx
  3214.         test    al, al
  3215.         jnz     @b
  3216. .header_created:
  3217.         mov     edx, [ebp + panel1_top - panel1_data]
  3218.         mov     eax, [ebp + panel1_left - panel1_data]
  3219.         shr     ecx, 1
  3220.         lea     eax, [eax+ecx+3]
  3221.         call    get_console_ptr
  3222.         mov     ah, [panel_active_header_color]
  3223.         cmp     ebp, [active_panel]
  3224.         jz      @f
  3225.         mov     ah, [panel_header_color]
  3226. @@:
  3227.         mov     al, ' '
  3228.         stosw
  3229.         mov     esi, cur_header
  3230. @@:
  3231.         lodsb
  3232.         test    al, al
  3233.         jz      @f
  3234.         stosw
  3235.         jmp     @b
  3236. @@:
  3237.         mov     al, ' '
  3238.         stosw
  3239.         mov     edx, [ebp + panel1_top - panel1_data]
  3240.         inc     edx
  3241.         mov     eax, [ebp + panel1_left - panel1_data]
  3242.         inc     eax
  3243.         call    get_console_ptr
  3244.         movzx   eax, [ebp + panel1_sortmode - panel1_data]
  3245.         mov     al, [compare_names+eax]
  3246.         stosb
  3247.         mov     eax, [ebp + panel1_selected_num - panel1_data]
  3248.         test    eax, eax
  3249.         jz      .skip_selected_info
  3250. ; ˆ­ä®à¬ æ¨ï ® ¢ë¤¥«¥­­ëå ä ©« å
  3251.         push    dword [ebp + panel1_selected_size+4 - panel1_data]
  3252.         push    dword [ebp + panel1_selected_size - panel1_data]
  3253.         call    fill_total_info
  3254.         mov     eax, [ebp + panel1_width - panel1_data]
  3255.         sub     eax, 2
  3256.         cmp     ecx, eax
  3257.         jbe     @f
  3258.         mov     ecx, eax
  3259.         mov     edi, saved_file_name+512
  3260.         sub     edi, eax
  3261.         mov     byte [edi], '.'
  3262.         mov     word [edi+1], '..'
  3263. @@:
  3264.         mov     esi, edi
  3265.         sub     eax, ecx
  3266.         shr     eax, 1
  3267.         inc     eax
  3268.         add     eax, [ebp + panel1_left - panel1_data]
  3269.         mov     edx, [ebp + panel1_top - panel1_data]
  3270.         add     edx, [ebp + panel1_height - panel1_data]
  3271.         sub     edx, 3
  3272.         call    get_console_ptr
  3273.         mov     ah, [panel_numselected_color]
  3274. @@:
  3275.         lodsb
  3276.         stosw
  3277.         loop    @b
  3278. .skip_selected_info:
  3279. ; ˆ­ä®à¬ æ¨ï ®¡ ®¡é¥¬ ç¨á«¥ ¨ à §¬¥à¥ ä ©«®¢ ¯ ­¥«¨
  3280.         mov     eax, [ebp + panel1_total_num - panel1_data]
  3281.         push    dword [ebp + panel1_total_size+4 - panel1_data]
  3282.         push    dword [ebp + panel1_total_size - panel1_data]
  3283.         call    fill_total_info
  3284.         mov     eax, [ebp + panel1_width - panel1_data]
  3285.         sub     eax, 2
  3286.         cmp     ecx, eax
  3287.         jbe     @f
  3288.         mov     ecx, eax
  3289.         mov     byte [edi+ecx-3], '.'
  3290.         mov     word [edi+ecx-2], '..'
  3291. @@:
  3292.         sub     eax, ecx
  3293.         shr     eax, 1
  3294.         inc     eax
  3295.         add     eax, [ebp + panel1_left - panel1_data]
  3296.         add     edx, [ebp + panel1_top - panel1_data]
  3297.         add     edx, [ebp + panel1_height - panel1_data]
  3298.         dec     edx
  3299.         mov     esi, edi
  3300.         call    get_console_ptr
  3301.         mov     ah, [panel_number_color]
  3302. @@:
  3303.         lodsb
  3304.         stosw
  3305.         loop    @b
  3306.         cmp     [ebp + panel1_numfiles - panel1_data], 0
  3307.         jz      .skip_curinfo
  3308. ; ˆ­ä®à¬ æ¨ï ® ⥪ã饬 ä ©«¥
  3309.         mov     ebx, [ebp + panel1_index - panel1_data]
  3310.         mov     eax, [ebp + panel1_files - panel1_data]
  3311.         mov     ebx, [eax+ebx*4]
  3312.         mov     eax, [ebp + panel1_left - panel1_data]
  3313.         add     eax, [ebp + panel1_width - panel1_data]
  3314.         dec     eax
  3315.         mov     edx, [ebp + panel1_top - panel1_data]
  3316.         add     edx, [ebp + panel1_height - panel1_data]
  3317.         dec     edx
  3318.         dec     edx
  3319.         call    get_console_ptr
  3320.         mov     ecx, [ebp + panel1_width - panel1_data]
  3321.         dec     ecx
  3322.         dec     ecx
  3323.         cmp     [ebp + panel1_colmode - panel1_data], 3
  3324.         jz      .show_curname
  3325. ; ‚à¥¬ï ¬®¤¨ä¨ª æ¨¨
  3326.         sub     edi, 5*2
  3327.         sub     ecx, 6
  3328.         mov     al, [ebx+24+2]
  3329.         aam
  3330.         or      ax, 0x3030
  3331.         mov     [edi], ah
  3332.         mov     [edi+2], al
  3333.         mov     [edi+4], byte ':'
  3334.         mov     al, [ebx+24+1]
  3335.         aam
  3336.         or      ax, 0x3030
  3337.         mov     [edi+6], ah
  3338.         mov     [edi+8], al
  3339.         mov     al, [panel_normal_color]
  3340.         mov     [edi+1], al
  3341.         mov     [edi+3], al
  3342.         mov     [edi+5], al
  3343.         mov     [edi+7], al
  3344.         mov     [edi+9], al
  3345.         dec     edi
  3346.         mov     [edi], al
  3347.         dec     edi
  3348.         mov     byte [edi], ' '
  3349. ; „ â  ¬®¤¨ä¨ª æ¨¨
  3350.         sub     edi, 8*2
  3351.         sub     ecx, 9
  3352.         mov     al, [ebx+28+0]
  3353.         aam
  3354.         or      ax, 0x3030
  3355.         mov     [edi], ah
  3356.         mov     [edi+2], al
  3357.         mov     [edi+4], byte '.'
  3358.         mov     al, [ebx+28+1]
  3359.         aam
  3360.         or      ax, 0x3030
  3361.         mov     [edi+6], ah
  3362.         mov     [edi+8], al
  3363.         mov     [edi+10], byte '.'
  3364.         mov     ax, [ebx+28+2]
  3365.         div     [_100]
  3366.         mov     al, ah
  3367.         aam
  3368.         or      ax, 0x3030
  3369.         mov     [edi+12], ah
  3370.         mov     [edi+14], al
  3371.         mov     al, [panel_normal_color]
  3372.         mov     [edi+1], al
  3373.         mov     [edi+3], al
  3374.         mov     [edi+5], al
  3375.         mov     [edi+7], al
  3376.         mov     [edi+9], al
  3377.         mov     [edi+11], al
  3378.         mov     [edi+13], al
  3379.         mov     [edi+15], al
  3380.         dec     edi
  3381.         mov     [edi], al
  3382.         dec     edi
  3383.         mov     [edi], byte ' '
  3384. ;  §¬¥à
  3385.         std
  3386.         mov     ah, [panel_normal_color]
  3387.         dec     edi
  3388.         dec     edi
  3389.         dec     ecx
  3390.         test    byte [ebx], 0x10
  3391.         jz      .size_file
  3392.         push    ecx
  3393.         mov     esi, aFolder+aFolder.size-1
  3394.         mov     ecx, aFolder.size
  3395.         cmp     word [ebx+40], '..'
  3396.         jnz     @f
  3397.         cmp     byte [ebx+42], 0
  3398.         jnz     @f
  3399.         mov     esi, aUp+aUp.size-1
  3400.         mov     cl, aUp.size
  3401. @@:
  3402.         sub     [esp], ecx
  3403. @@:
  3404.         lodsb
  3405.         stosw
  3406.         loop    @b
  3407.         pop     ecx
  3408.         jmp     .size_done
  3409. .size_file:
  3410.         mov     edx, [ebx+36]
  3411.         test    edx, edx
  3412.         jz      .size_less_4g
  3413.         cmp     edx, 10*256
  3414.         jae     .size_tera
  3415. ; ¢ £¨£ ¡ ©â å
  3416.         mov     al, 'G'
  3417.         shl     edx, 2
  3418.         jmp     .size_letter
  3419. .size_tera:
  3420. ; ¢ â¥à ¡ ©â å
  3421.         shr     edx, 8
  3422.         mov     al, 'T'
  3423.         jmp     .size_letter
  3424. .size_less_4g:
  3425.         mov     edx, [ebx+32]
  3426.         cmp     edx, 10*(1 shl 20)
  3427.         jae     .size_mega
  3428.         cmp     edx, 1 shl 20
  3429.         jb      .size_num
  3430.         shr     edx, 10
  3431.         mov     al, 'K'
  3432.         jmp     .size_letter
  3433. .size_mega:
  3434.         mov     al, 'M'
  3435.         shr     edx, 20
  3436. .size_letter:
  3437.         stosw
  3438.         dec     ecx
  3439.         mov     al, ' '
  3440.         stosw
  3441.         dec     ecx
  3442. .size_num:
  3443.         xchg    eax, edx
  3444.         xor     edx, edx
  3445.         div     [_10d]
  3446.         xchg    eax, edx
  3447.         add     al, '0'
  3448.         mov     ah, [panel_normal_color]
  3449.         stosw
  3450.         dec     ecx
  3451.         test    edx, edx
  3452.         jnz     .size_num
  3453. .size_done:
  3454.         cld
  3455. .show_curname:
  3456. ; ˆ¬ï
  3457.         sub     edi, ecx
  3458.         sub     edi, ecx
  3459.         lea     esi, [ebx+40]
  3460. @@:
  3461.         lodsb
  3462.         test    al, al
  3463.         jnz     @b
  3464.         sub     esi, ebx
  3465.         sub     esi, 41
  3466.         mov     ah, [panel_normal_color]
  3467.         cmp     esi, ecx
  3468.         lea     edx, [ebx+40]
  3469.         jbe     @f
  3470.         mov     al, '{'
  3471.         mov     [edi-2], ax
  3472.         add     edx, esi
  3473.         sub     edx, ecx
  3474. @@:
  3475.         mov     esi, edx
  3476. @@:
  3477.         lodsb
  3478.         test    al, al
  3479.         jz      @f
  3480.         stosw
  3481.         loop    @b
  3482. @@:
  3483.         mov     al, ' '
  3484.         rep     stosw
  3485. .skip_curinfo:
  3486.         call    draw_image
  3487.         ret
  3488.  
  3489. fill_total_info:
  3490.         mov     edi, saved_file_name+511
  3491.         mov     byte [edi], ' '
  3492. if lang eq ru
  3493.         mov     byte [edi-1], '¥'
  3494.         dec     edi
  3495.         cmp     eax, 1
  3496.         jz      @f
  3497.         mov     word [edi-1], ' å'
  3498.         dec     edi
  3499. @@:
  3500.         mov     dword [edi-4], 'ä ©«'
  3501.         mov     byte [edi-5], ' '
  3502.         sub     edi, 5
  3503. else
  3504.         cmp     eax, 1
  3505.         jz      @f
  3506.         dec     edi
  3507.         mov     byte [edi], 's'
  3508. @@:
  3509.         mov     dword [edi-4], 'file'
  3510.         mov     byte [edi-5], ' '
  3511.         sub     edi, 5
  3512. end if
  3513.         xor     edx, edx
  3514.         push    10
  3515.         pop     ecx
  3516. @@:
  3517.         div     ecx
  3518.         dec     edi
  3519.         add     dl, '0'
  3520.         mov     [edi], dl
  3521.         xor     edx, edx
  3522.         test    eax, eax
  3523.         jnz     @b
  3524. if lang eq ru
  3525.         mov     dword [edi-4], 'â ¢ '
  3526.         mov     dword [edi-8], ' ¡ ©'
  3527.         sub     edi, 8
  3528. else
  3529.         mov     dword [edi-4], ' in '
  3530.         mov     dword [edi-8], 'ytes'
  3531.         mov     word [edi-10], ' b'
  3532.         sub     edi, 10
  3533. end if
  3534.         lea     esi, [edi-3]
  3535.         mov     edx, [esp+8]
  3536.         mov     eax, [esp+4]
  3537. .selsizel:
  3538.         push    edx
  3539.         mov     ebx, edx
  3540.         xor     edx, edx
  3541.         add     ebx, ebx
  3542.         adc     edx, edx
  3543.         push    ebx
  3544.         push    edx
  3545.         add     ebx, ebx
  3546.         adc     edx, edx
  3547.         add     ebx, [esp+4]
  3548.         adc     edx, [esp]
  3549.         add     esp, 8
  3550.         add     eax, ebx
  3551.         adc     edx, 0
  3552.         div     ecx
  3553.         dec     edi
  3554.         cmp     edi, esi
  3555.         jae     @f
  3556.         mov     byte [edi], ','
  3557.         dec     edi
  3558.         sub     esi, 4
  3559. @@:
  3560.         pop     ebx
  3561.         add     dl, '0'
  3562.         mov     byte [edi], dl
  3563.         xchg    eax, ebx
  3564.         mul     [muldiv10]
  3565.         add     eax, ebx
  3566.         adc     edx, 0
  3567.         mov     ebx, eax
  3568.         or      ebx, edx
  3569.         jnz     .selsizel
  3570.         dec     edi
  3571.         mov     byte [edi], ' '
  3572.         mov     ecx, saved_file_name+512
  3573.         sub     ecx, edi
  3574.         ret     8
  3575.  
  3576. get_file_color:
  3577.         mov     ah, [esi + 6]
  3578.         cmp     ebp, [active_panel]
  3579.         jnz     @f
  3580.         cmp     ecx, [ebp + panel1_index - panel1_data]
  3581.         jnz     @f
  3582.         mov     ah, [esi + 7]
  3583. @@:
  3584.         test    byte [esi + 303], 1
  3585.         jnz     @f
  3586.         mov     ah, [esi + 4]
  3587.         cmp     ebp, [active_panel]
  3588.         jnz     @f
  3589.         cmp     ecx, [ebp + panel1_index - panel1_data]
  3590.         jnz     @f
  3591.         mov     ah, [esi + 5]
  3592. @@:
  3593.         ret
  3594.  
  3595. draw_name_column:
  3596.         mov     eax, [column_index]
  3597.         mov     [last_column_index], eax
  3598.         mov     edx, [ebp + panel1_numfiles - panel1_data]
  3599.         mov     ecx, [column_height]
  3600.         dec     ecx
  3601. .l:
  3602.         cmp     [column_index], edx
  3603.         jae     .ret
  3604.         push    ecx
  3605.         mov     ecx, [column_index]
  3606.         mov     esi, [ebp + panel1_files - panel1_data]
  3607.         mov     esi, [esi+ecx*4]
  3608.         mov     ebx, [esi]
  3609.         call    get_file_color
  3610.         add     esi, 40
  3611.         mov     ecx, [column_width]
  3612.         push    edi
  3613. @@:
  3614.         lodsb
  3615.         test    al, al
  3616.         jz      @f
  3617.         stosw
  3618.         loop    @b
  3619.         lodsb
  3620.         test    al, al
  3621.         jz      @f
  3622.         mov     byte [edi], '}'
  3623.         jmp     .continue
  3624. @@:
  3625.         test    bl, 10h
  3626.         jnz     .noalignext
  3627.         mov     ebx, [ebp + panel1_colmode - panel1_data]
  3628. ; sizeof(PanelMode) = 40
  3629.         lea     ebx, [ebx+ebx*4]
  3630.         cmp     [colmodes+ebx*8+PanelMode.bAlignExtensions], 0
  3631.         jz      .noalignext
  3632.         push    ecx
  3633.         sub     ecx, [column_width]
  3634.         neg     ecx
  3635.         jz      .noalignext2
  3636.         dec     esi
  3637. @@:
  3638.         dec     esi
  3639.         cmp     byte [esi], '.'
  3640.         loopnz  @b
  3641.         jnz     .noalignext2
  3642.         inc     esi
  3643.         sub     ecx, [column_width]
  3644.         neg     ecx
  3645.         sub     ecx, [esp]
  3646.         sub     edi, ecx
  3647.         sub     edi, ecx
  3648.         dec     ecx
  3649.         mov     ebx, [esp+4]
  3650.         cmp     ecx, 3
  3651.         ja      @f
  3652.         mov     cl, 3
  3653. @@:
  3654.         sub     ecx, [column_width]
  3655.         sub     ebx, edi
  3656.         sar     ebx, 1
  3657.         sub     ebx, ecx
  3658.         pop     ecx
  3659.         inc     ecx
  3660.         push    0
  3661.         cmp     ecx, ebx
  3662.         jbe     @f
  3663.         sub     ecx, ebx
  3664.         mov     [esp], ecx
  3665.         mov     ecx, ebx
  3666. @@:
  3667.         mov     al, ' '
  3668.         rep     stosw
  3669. @@:
  3670.         lodsb
  3671.         test    al, al
  3672.         jz      .noalignext2
  3673.         stosw
  3674.         jmp     @b
  3675. .noalignext2:
  3676.         pop     ecx
  3677. .noalignext:
  3678.         mov     al, ' '
  3679.         rep     stosw
  3680. .continue:
  3681.         pop     edi
  3682.         add     edi, [cur_width]
  3683.         add     edi, [cur_width]
  3684.         inc     [column_index]
  3685.         pop     ecx
  3686.         dec     ecx
  3687.         jnz     .l
  3688. .ret:
  3689.         mov     eax, [ebp + panel1_colsz - panel1_data]
  3690.         add     [ebp + panel1_colst - panel1_data], eax
  3691.         cmp     ebp, panel1_data
  3692.         jnz     .ret2
  3693. ; —¨á«® íªà ­®¢
  3694.         mov     eax, [num_screens]
  3695.         dec     eax
  3696.         jz      .ret2
  3697.         push    eax
  3698.         xor     eax, eax
  3699.         xor     edx, edx
  3700.         call    get_console_ptr
  3701.         mov     ah, [panel_nscreens_color]
  3702.         mov     al, '['
  3703.         stosw
  3704.         pop     eax
  3705.         push    -'0'
  3706. @@:
  3707.         xor     edx, edx
  3708.         div     [_10d]
  3709.         push    edx
  3710.         test    eax, eax
  3711.         jnz     @b
  3712. @@:
  3713.         pop     eax
  3714.         add     eax, '0'
  3715.         jz      @f
  3716.         mov     ah, [panel_nscreens_color]
  3717.         stosw
  3718.         jmp     @b
  3719. @@:
  3720.         mov     al, ']'
  3721.         mov     ah, [panel_nscreens_color]
  3722.         stosw
  3723. .ret2:
  3724. draw_empty_column:
  3725.         ret
  3726.  
  3727. draw_size_column:
  3728.         add     edi, [column_width]
  3729.         add     edi, [column_width]
  3730.         dec     edi
  3731.         dec     edi
  3732.         std
  3733.         mov     ecx, [column_height]
  3734.         dec     ecx
  3735.         push    [last_column_index]
  3736. .l:
  3737.         mov     edx, [ebp + panel1_numfiles - panel1_data]
  3738.         cmp     [last_column_index], edx
  3739.         jae     .ret
  3740.         push    ecx
  3741.         push    edi
  3742.         mov     ecx, [last_column_index]
  3743.         mov     esi, [ebp + panel1_files - panel1_data]
  3744.         mov     esi, [esi+ecx*4]
  3745.         call    get_file_color
  3746.         mov     ecx, [column_width]
  3747. @@:
  3748.         mov     ebx, eax
  3749.         cmp     word [esi+40], '..'
  3750.         jnz     .nodotdot
  3751.         cmp     byte [esi+42], 0
  3752.         jnz     .nodotdot
  3753. if lang eq ru
  3754.         mov     al, 'å'
  3755.         stosw
  3756.         mov     al, 'à'
  3757.         stosw
  3758.         mov     al, '¥'
  3759.         stosw
  3760.         mov     al, '¢'
  3761.         stosw
  3762.         mov     al, '‚'
  3763.         stosw
  3764.         sub     ecx, 5
  3765. else
  3766.         mov     al, ' '
  3767.         stosw
  3768.         stosw
  3769.         mov     al, 'p'
  3770.         stosw
  3771.         mov     al, 'U'
  3772.         stosw
  3773.         sub     ecx, 4
  3774. end if
  3775.         jmp     .size_written
  3776. .nodotdot:
  3777.         test    byte [esi], 10h
  3778.         jz      .nofolder
  3779. if lang eq ru
  3780.         mov     al, ' '
  3781.         stosw
  3782.         mov     al, 'ª'
  3783.         stosw
  3784.         mov     al, '¯'
  3785.         stosw
  3786.         mov     al, ' '
  3787.         stosw
  3788.         mov     al, ''
  3789.         stosw
  3790.         sub     ecx, 5
  3791. else
  3792.         mov     al, 'r'
  3793.         stosw
  3794.         mov     al, 'e'
  3795.         stosw
  3796.         mov     al, 'd'
  3797.         stosw
  3798.         mov     al, 'l'
  3799.         stosw
  3800.         mov     al, 'o'
  3801.         stosw
  3802.         mov     al, 'F'
  3803.         stosw
  3804.         sub     ecx, 6
  3805. end if
  3806.         jmp     .size_written
  3807. .nofolder:
  3808.         mov     eax, [esi+32]
  3809.         mov     edx, [esi+36]
  3810.         test    edx, edx
  3811.         jz      .less_4G
  3812.         cmp     edx, 10000/4*1024
  3813.         jb      .giga
  3814.         mov     al, 'T'
  3815.         shr     edx, 10
  3816.         jmp     .write_letter
  3817. .giga:
  3818.         mov     al, 'G'
  3819.         shl     edx, 2
  3820.         jmp     .write_letter
  3821. .less_4G:
  3822.         mov     edx, eax
  3823.         cmp     eax, 1000000
  3824.         jb      .byte
  3825.         cmp     eax, 10000*1024
  3826.         jb      .kilo
  3827.         mov     al, 'M'
  3828.         shr     edx, 20
  3829.         jmp     .write_letter
  3830. .kilo:
  3831.         mov     al, 'K'
  3832.         shr     edx, 10
  3833. .write_letter:
  3834.         mov     ah, bh
  3835.         stosw
  3836.         mov     al, ' '
  3837.         stosw
  3838.         dec     ecx
  3839.         dec     ecx
  3840. .byte:
  3841.         xchg    eax, edx
  3842.         xor     edx, edx
  3843.         div     [_10d]
  3844.         xchg    eax, edx
  3845.         add     al, '0'
  3846.         mov     ah, bh
  3847.         stosw
  3848.         dec     ecx
  3849.         test    edx, edx
  3850.         jnz     .byte
  3851. .size_written:
  3852.         mov     eax, ebx
  3853.         test    ecx, ecx
  3854.         jle     @f
  3855.         mov     al, ' '
  3856.         rep     stosw
  3857. @@:
  3858.         mov     byte [edi+1], ah
  3859.         pop     edi
  3860.         add     edi, [cur_width]
  3861.         add     edi, [cur_width]
  3862.         inc     [last_column_index]
  3863.         pop     ecx
  3864.         dec     ecx
  3865.         jnz     .l
  3866. .ret:
  3867.         pop     [last_column_index]
  3868.         cld
  3869.         ret
  3870.  
  3871. draw_date_column:
  3872.         mov     ecx, [column_height]
  3873.         dec     ecx
  3874.         push    [last_column_index]
  3875. .l:
  3876.         mov     edx, [ebp + panel1_numfiles - panel1_data]
  3877.         cmp     [last_column_index], edx
  3878.         jae     .ret
  3879.         push    ecx
  3880.         push    edi
  3881.         mov     ecx, [last_column_index]
  3882.         mov     esi, [ebp + panel1_files - panel1_data]
  3883.         mov     esi, [esi+ecx*4]
  3884.         call    get_file_color
  3885.         mov     bh, ah
  3886.         mov     byte [edi-1], bh
  3887.         mov     al, [esi+28]
  3888.         aam
  3889.         add     eax, '00'
  3890.         push    eax
  3891.         mov     al, ah
  3892.         mov     ah, bh
  3893.         stosw
  3894.         pop     eax
  3895.         mov     ah, bh
  3896.         stosw
  3897.         mov     al, '.'
  3898.         stosw
  3899.         mov     al, [esi+29]
  3900.         aam
  3901.         add     eax, '00'
  3902.         push    eax
  3903.         mov     al, ah
  3904.         mov     ah, bh
  3905.         stosw
  3906.         pop     eax
  3907.         mov     ah, bh
  3908.         stosw
  3909.         mov     al, '.'
  3910.         stosw
  3911.         movzx   eax, word [esi+30]
  3912.         xor     edx, edx
  3913.         div     [_10d]
  3914.         xchg    eax, edx
  3915.         add     al, '0'
  3916.         mov     ah, bh
  3917.         mov     [edi+2], ax
  3918.         xchg    eax, edx
  3919.         xor     edx, edx
  3920.         div     [_10d]
  3921.         xchg    eax, edx
  3922.         add     al, '0'
  3923.         mov     ah, bh
  3924.         stosw
  3925.         pop     edi
  3926.         add     edi, [cur_width]
  3927.         add     edi, [cur_width]
  3928.         inc     [last_column_index]
  3929.         pop     ecx
  3930.         dec     ecx
  3931.         jnz     .l
  3932. .ret:
  3933.         pop     [last_column_index]
  3934.         cld
  3935.         ret
  3936.  
  3937. draw_time_column:
  3938.         mov     ecx, [column_height]
  3939.         dec     ecx
  3940.         push    [last_column_index]
  3941. .l:
  3942.         mov     edx, [ebp + panel1_numfiles - panel1_data]
  3943.         cmp     [last_column_index], edx
  3944.         jae     .ret
  3945.         push    ecx
  3946.         push    edi
  3947.         mov     ecx, [last_column_index]
  3948.         mov     esi, [ebp + panel1_files - panel1_data]
  3949.         mov     esi, [esi+ecx*4]
  3950.         call    get_file_color
  3951.         mov     bh, ah
  3952.         mov     byte [edi-1], bh
  3953.         mov     al, [esi+26]
  3954.         aam
  3955.         add     eax, '00'
  3956.         push    eax
  3957.         mov     al, ah
  3958.         mov     ah, bh
  3959.         stosw
  3960.         pop     eax
  3961.         mov     ah, bh
  3962.         stosw
  3963.         mov     al, ':'
  3964.         stosw
  3965.         mov     al, [esi+25]
  3966.         aam
  3967.         add     eax, '00'
  3968.         push    eax
  3969.         mov     al, ah
  3970.         mov     ah, bh
  3971.         stosw
  3972.         pop     eax
  3973.         mov     ah, bh
  3974.         stosw
  3975.         pop     edi
  3976.         add     edi, [cur_width]
  3977.         add     edi, [cur_width]
  3978.         inc     [last_column_index]
  3979.         pop     ecx
  3980.         dec     ecx
  3981.         jnz     .l
  3982. .ret:
  3983.         pop     [last_column_index]
  3984.         cld
  3985.         ret
  3986.  
  3987. ;insert_last_dot:
  3988. ;        push    eax esi
  3989. ;        mov     ah, 0
  3990. ;.loop:
  3991. ;        lodsb
  3992. ;        test    al, al
  3993. ;        jz      .done
  3994. ;        cmp     al, '.'
  3995. ;        jnz     .loop
  3996. ;        mov     ah, 1
  3997. ;        jmp     .loop
  3998. ;.done:
  3999. ;        test    ah, ah
  4000. ;        jnz     @f
  4001. ;        mov     byte [esi-1], '.'
  4002. ;        mov     byte [esi], 0
  4003. ;@@:
  4004. ;        pop     esi eax
  4005. ;        ret
  4006.  
  4007. ;delete_last_dot:
  4008. ;        push    esi
  4009. ;@@:
  4010. ;        cmp     byte [esi], 0
  4011. ;        jz      @f
  4012. ;        inc     esi
  4013. ;        jmp     @b
  4014. ;@@:
  4015. ;        cmp     byte [esi-1], '.'
  4016. ;        jnz     @f
  4017. ;        mov     byte [esi-1], 0
  4018. ;@@:     pop     esi
  4019. ;        ret
  4020.  
  4021. read_folder:
  4022.         mov     eax, [ebp + panel1_nfa - panel1_data]
  4023.         mov     [dirinfo.size], eax
  4024.         shl     eax, 2
  4025.         add     eax, [ebp + panel1_files - panel1_data]
  4026.         mov     [dirinfo.dirdata], eax
  4027.         lea     eax, [ebp + panel1_dir - panel1_data]
  4028.         mov     [dirinfo.name], eax
  4029.         xor     eax, eax
  4030.         mov     [ebp + panel1_total_num - panel1_data], eax
  4031.         mov     dword [ebp + panel1_total_size - panel1_data], eax
  4032.         mov     dword [ebp + panel1_total_size+4 - panel1_data], eax
  4033.         mov     [ebp + panel1_selected_num - panel1_data], eax
  4034.         mov     dword [ebp + panel1_selected_size - panel1_data], eax
  4035.         mov     dword [ebp + panel1_selected_size+4 - panel1_data], eax
  4036. .retry:
  4037.         push    70
  4038.         pop     eax
  4039.         mov     ebx, dirinfo
  4040.         int     40h
  4041.         test    eax, eax
  4042.         jz      .ok
  4043.         cmp     eax, 6
  4044.         jz      .ok
  4045. ; Failed to read folder, notify user
  4046.         cmp     [bSilentFolderMode], 0
  4047.         jnz     .dont_notify
  4048.         push    dword aContinue
  4049.         push    dword aRetry
  4050.         mov     edx, esp
  4051.         call    get_error_msg
  4052.         push    [dirinfo.name]
  4053.         push    dword aCannotReadFolder
  4054.         push    eax
  4055.         mov     eax, esp
  4056.         push    edx
  4057.         push    2
  4058.         push    eax
  4059.         push    3
  4060.         push    -1
  4061.         push    -1
  4062.         push    dword aError
  4063.         call    SayErr
  4064.         add     esp, 5*4
  4065.         test    eax, eax
  4066.         jz      .retry
  4067. .dont_notify:
  4068.         mov     esi, prev_dir
  4069.         cmp     byte [esi], 0
  4070.         jz      @f
  4071.         lea     edi, [ebp + panel1_dir - panel1_data]
  4072.         mov     ecx, 1024/4
  4073.         rep     movsd
  4074.         mov     byte [prev_dir], 0
  4075.         ret
  4076. @@:
  4077.         mov     [bSilentFolderMode], 1  ; enter silent mode
  4078.         mov     esi, [dirinfo.name]
  4079.         xor     edx, edx
  4080. .up1:
  4081.         lodsb
  4082.         test    al, al
  4083.         jz      .up1done
  4084.         cmp     al, '/'
  4085.         jnz     .up1
  4086.         inc     edx
  4087.         lea     edi, [esi-1]
  4088.         jmp     .up1
  4089. .up1done:
  4090.         cmp     edx, 2
  4091.         jbe     .noup
  4092.         stosb
  4093.         jmp     read_folder
  4094. .noup:
  4095.         mov     esi, [dirinfo.name]
  4096.         mov     edi, esi
  4097.         lodsd
  4098.         or      eax, 0x00202000
  4099.         cmp     eax, '/rd/'
  4100.         jnz     @f
  4101.         lodsw
  4102.         cmp     ax, '1'
  4103.         jz      .nosetrd
  4104. @@:
  4105.         mov     eax, '/rd/'
  4106.         stosd
  4107.         mov     ax, '1'
  4108.         stosw
  4109.         jmp     read_folder
  4110. .nosetrd:
  4111. ; „ ¦¥ à ¬¤¨áª ­¥ ¯à®ç¨â «áï. ‡­ ç¨â, ­¥ áã¤ì¡ ...
  4112.         and     dword [ebp + panel1_numfiles - panel1_data], 0
  4113.         and     dword [ebp + panel1_index - panel1_data], 0
  4114.         and     dword [ebp + panel1_start - panel1_data], 0
  4115.         mov     [bSilentFolderMode], 0  ; leave silent mode
  4116.         ret
  4117. .ok:
  4118.         mov     eax, [dirinfo.dirdata]
  4119.         cmp     [eax+8], ebx
  4120.         jz      .readdone
  4121.         push    dword [eax+8]
  4122.         mov     ecx, [ebp + panel1_files - panel1_data]
  4123.         call    pgfree
  4124.         pop     ecx
  4125.         add     ecx, 0xF
  4126.         and     ecx, not 0xF
  4127.         push    ecx
  4128.         imul    ecx, 4+304
  4129.         add     ecx, 32
  4130.         call    xpgalloc
  4131.         test    eax, eax
  4132.         jnz     .succ1
  4133.         pop     eax
  4134.         jmp     .readdone
  4135. .succ1:
  4136.         mov     [ebp + panel1_files - panel1_data], eax
  4137.         pop     [ebp + panel1_nfa - panel1_data]
  4138.         mov     [prev_dir], 0
  4139.         jmp     read_folder
  4140. .readdone:
  4141.         and     [ebp + panel1_start - panel1_data], 0
  4142.         and     [ebp + panel1_index - panel1_data], 0
  4143.         and     [ebp + panel1_start - panel1_data], 0
  4144.         mov     edi, [ebp + panel1_files - panel1_data]
  4145.         mov     eax, [ebp + panel1_nfa - panel1_data]
  4146.         lea     eax, [edi + eax*4 + 32]
  4147.         mov     ecx, [eax-32+4]
  4148.         test    ecx, ecx
  4149.         jz      .loopdone
  4150.         xor     edx, edx
  4151. ; ˆ£­®à¨à㥬 ᯥ樠«ì­ë¥ ¢å®¤ë, ᮮ⢥âáâ¢ãî騥 ¯ ¯ª¥ '.' ¨ ¬¥âª¥ ⮬ 
  4152. .ptrinit:
  4153.         cmp     word [eax+40], '.'
  4154.         jz      .loopcont
  4155.         test    byte [eax], 8
  4156.         jnz     .loopcont
  4157.         mov     byte [eax+303], 0
  4158.         test    edx, edx
  4159.         jnz     .nodotdot
  4160.         cmp     word [eax+40], '..'
  4161.         jnz     .nodotdot
  4162.         cmp     byte [eax+42], 0
  4163.         jnz     .nodotdot
  4164.         mov     edx, eax
  4165.         push    edi
  4166. @@:
  4167.         cmp     edi, [ebp + panel1_files - panel1_data]
  4168.         jbe     @f
  4169.         push    dword [edi-4]
  4170.         pop     dword [edi]
  4171.         sub     edi, 4
  4172.         jmp     @b
  4173. @@:
  4174.         stosd
  4175.         pop     edi
  4176.         scasd
  4177.         jmp     .dotdot
  4178. .nodotdot:
  4179.         stosd
  4180.         xor     ebx, ebx
  4181.         test    byte [eax], 10h
  4182.         setz    bl
  4183.         add     [ebp + panel1_total_num - panel1_data], ebx
  4184.         mov     ebx, dword [eax+32]
  4185.         add     dword [ebp + panel1_total_size - panel1_data], ebx
  4186.         mov     ebx, dword [eax+36]
  4187.         adc     dword [ebp + panel1_total_size+4 - panel1_data], ebx
  4188. .dotdot:
  4189. ; ¯®¤á¢¥âª 
  4190. ;        call    insert_last_dot
  4191.         pushad
  4192.         mov     ebp, eax
  4193.         lea     esi, [ebp+40]
  4194.         mov     edi, lower_file_name
  4195.         mov     edx, edi
  4196.         xor     eax, eax
  4197. @@:
  4198.         lodsb
  4199.         mov     al, [tolower_table+eax]
  4200.         stosb
  4201.         test    al, al
  4202.         jnz     @b
  4203.         mov     esi, edx
  4204.         lea     edx, [edi-1]
  4205.         xor     ecx, ecx
  4206. .highlight_test_loop:
  4207.         mov     ebx, [highlight_groups+ecx*4]
  4208.         mov     al, [ebx + highlight.IncludeAttributes]
  4209.         mov     ah, [ebp]
  4210.         and     ah, al
  4211.         cmp     ah, al
  4212.         jnz     .highlight_test_failed
  4213.         lea     edi, [ebx + highlight.Mask]
  4214.         call    match_mask_rev_lowercase
  4215.         jc      .highlight_test_failed
  4216.         mov     ah, [ebx + highlight.NormalColor]
  4217.         test    ah, ah
  4218.         jnz     @f
  4219.         mov     ah, [panel_normal_color]
  4220. @@:
  4221.         mov     [ebp+4], ah
  4222.         mov     ah, [ebx + highlight.CursorColor]
  4223.         test    ah, ah
  4224.         jnz     @f
  4225.         mov     ah, [panel_cursor_color]
  4226. @@:
  4227.         mov     [ebp+5], ah
  4228.         mov     ah, [ebx + highlight.SelectedColor]
  4229.         test    ah, ah
  4230.         jnz     @f
  4231.         mov     ah, [panel_selected_color]
  4232. @@:
  4233.         mov     [ebp+6], ah
  4234.         mov     ah, [ebx + highlight.SelectedCursorColor]
  4235.         test    ah, ah
  4236.         jnz     @f
  4237.         mov     ah, [panel_selected_cursor_color]
  4238. @@:
  4239.         mov     [ebp+7], ah
  4240.         jmp     .doname
  4241. .highlight_test_failed:
  4242.         inc     ecx
  4243.         cmp     ecx, [highlight_num_groups]
  4244.         jb      .highlight_test_loop
  4245. .nohighlight:
  4246.         mov     ah, [panel_normal_color]
  4247.         mov     [ebp+4], ah
  4248.         mov     ah, [panel_cursor_color]
  4249.         mov     [ebp+5], ah
  4250.         mov     ah, [panel_selected_color]
  4251.         mov     [ebp+6], ah
  4252.         mov     ah, [panel_selected_cursor_color]
  4253.         mov     [ebp+7], ah
  4254. .doname:
  4255. ;        call    delete_last_dot
  4256.         popad
  4257. .loopcont:
  4258.         add     eax, 304
  4259.         dec     ecx
  4260.         jnz     .ptrinit
  4261. .loopdone:
  4262.         sub     edi, [ebp + panel1_files - panel1_data]
  4263.         shr     edi, 2
  4264.         mov     [ebp + panel1_numfiles - panel1_data], edi
  4265. .done:
  4266. ; ‘®àâ¨à®¢ª 
  4267. sort_files:
  4268.         movzx   eax, [ebp + panel1_sortmode - panel1_data]
  4269.         mov     ebx, [compare_fns + eax*4]
  4270.         mov     edx, [ebp + panel1_files - panel1_data]
  4271.         mov     ecx, [ebp + panel1_numfiles - panel1_data]
  4272.         jecxz   .skip
  4273.         mov     eax, [edx]
  4274.         cmp     word [eax+40], '..'
  4275.         jnz     .nodotdot
  4276.         cmp     byte [eax+42], 0
  4277.         jnz     .nodotdot
  4278.         dec     ecx
  4279.         add     edx, 4
  4280. .nodotdot:
  4281.         call    sort
  4282. .skip:
  4283.         mov     [bSilentFolderMode], 0  ; leave silent mode
  4284.         ret
  4285.  
  4286. compare_name:
  4287.         test    byte [esi], 10h
  4288.         jnz     .1dir
  4289.         test    byte [edi], 10h
  4290.         jnz     .greater
  4291. .eq1:
  4292.         add     esi, 40
  4293.         add     edi, 40
  4294.         jmp     strcmpi
  4295. .greater:
  4296.         test    esi, esi
  4297.         ret
  4298. .1dir:
  4299.         test    byte [edi], 10h
  4300.         jnz     .eq1
  4301. .less:
  4302.         xor     edi, edi
  4303.         stc
  4304.         ret
  4305.  
  4306. compare_name_rev:
  4307.         test    byte [esi], 10h
  4308.         jnz     .1dir
  4309.         test    byte [edi], 10h
  4310.         jnz     .greater
  4311. .eq1:
  4312.         add     esi, 40
  4313.         add     edi, 40
  4314.         xchg    esi, edi
  4315.         jmp     strcmpi
  4316. .greater:
  4317.         test    esi, esi
  4318.         ret
  4319. .1dir:
  4320.         test    byte [edi], 10h
  4321.         jnz     .eq1
  4322. .less:
  4323.         xor     edi, edi
  4324.         stc
  4325.         ret
  4326.  
  4327. strcmpi:
  4328.         push    eax
  4329. @@:
  4330.         lodsb
  4331.         call    match_symbol
  4332.         jnz     .ret
  4333.         inc     edi
  4334.         test    al, al
  4335.         jnz     @b
  4336. .ret:
  4337.         pop     eax
  4338.         ret
  4339.  
  4340. compare_ext:
  4341.         test    byte [esi], 10h
  4342.         jnz     .1dir
  4343.         test    byte [edi], 10h
  4344.         jnz     .greater
  4345. .eq1:
  4346.         add     esi, 40
  4347.         add     edi, 40
  4348.         push    esi edi
  4349.         call    seek_ext
  4350.         xchg    esi, edi
  4351.         call    seek_ext
  4352.         xchg    esi, edi
  4353.         call    strcmpi
  4354.         jnz     .ret
  4355.         pop     edi esi
  4356.         jmp     strcmpi
  4357. .ret:
  4358.         pop     edi esi
  4359.         ret
  4360. .greater:
  4361.         test    esi, esi
  4362.         ret
  4363. .1dir:
  4364.         test    byte [edi], 10h
  4365.         jnz     .eq1
  4366. .less:
  4367.         xor     edi, edi
  4368.         stc
  4369.         ret
  4370.  
  4371. compare_ext_rev:
  4372.         test    byte [esi], 10h
  4373.         jnz     .1dir
  4374.         test    byte [edi], 10h
  4375.         jnz     .greater
  4376. .eq1:
  4377.         add     esi, 40
  4378.         add     edi, 40
  4379.         push    esi edi
  4380.         call    seek_ext
  4381.         xchg    esi, edi
  4382.         call    seek_ext
  4383.         call    strcmpi
  4384.         jnz     .ret
  4385.         pop     edi esi
  4386.         xchg    esi, edi
  4387.         jmp     strcmpi
  4388. .ret:
  4389.         pop     edi esi
  4390.         ret
  4391. .greater:
  4392.         test    esi, esi
  4393.         ret
  4394. .1dir:
  4395.         test    byte [edi], 10h
  4396.         jnz     .eq1
  4397. .less:
  4398.         xor     edi, edi
  4399.         stc
  4400.         ret
  4401.  
  4402. seek_ext:
  4403.         push    eax
  4404.         xor     eax, eax
  4405. .l:
  4406.         inc     esi
  4407.         cmp     byte [esi-1], '.'
  4408.         jnz     @f
  4409.         mov     eax, esi
  4410. @@:
  4411.         cmp     byte [esi-1], 0
  4412.         jnz     .l
  4413.         test    eax, eax
  4414.         jnz     @f
  4415.         lea     eax, [esi-1]
  4416. @@:
  4417.         mov     esi, eax
  4418.         pop     eax
  4419.         ret
  4420.  
  4421. compare_modified:
  4422.         test    byte [esi], 10h
  4423.         jnz     .1dir
  4424.         test    byte [edi], 10h
  4425.         jnz     .greater
  4426. .eq1:
  4427.         push    edi
  4428.         mov     edi, [edi+28]
  4429.         cmp     edi, [esi+28]
  4430.         pop     edi
  4431.         jnz     @f
  4432.         push    edi
  4433.         mov     edi, [edi+24]
  4434.         cmp     edi, [esi+24]
  4435.         pop     edi
  4436.         jnz     @f
  4437.         add     esi, 40
  4438.         add     edi, 40
  4439.         jmp     strcmpi
  4440. @@:
  4441.         ret
  4442. .greater:
  4443.         test    esi, esi
  4444.         ret
  4445. .1dir:
  4446.         test    byte [edi], 10h
  4447.         jnz     .eq1
  4448. .less:
  4449.         xor     edi, edi
  4450.         stc
  4451.         ret
  4452.  
  4453. compare_modified_rev:
  4454.         test    byte [esi], 10h
  4455.         jnz     .1dir
  4456.         test    byte [edi], 10h
  4457.         jnz     .greater
  4458. .eq1:
  4459.         push    esi
  4460.         mov     esi, [esi+28]
  4461.         cmp     esi, [edi+28]
  4462.         pop     esi
  4463.         jnz     @f
  4464.         push    esi
  4465.         mov     esi, [esi+24]
  4466.         cmp     esi, [edi+24]
  4467.         pop     esi
  4468.         jnz     @f
  4469.         add     esi, 40
  4470.         add     edi, 40
  4471.         xchg    esi, edi
  4472.         jmp     strcmpi
  4473. @@:
  4474.         ret
  4475. .greater:
  4476.         test    esi, esi
  4477.         ret
  4478. .1dir:
  4479.         test    byte [edi], 10h
  4480.         jnz     .eq1
  4481. .less:
  4482.         xor     edi, edi
  4483.         stc
  4484.         ret
  4485.  
  4486. compare_size:
  4487.         test    byte [esi], 10h
  4488.         jnz     .1dir
  4489.         test    byte [edi], 10h
  4490.         jnz     .greater
  4491. .eq1:
  4492.         push    edi
  4493.         mov     edi, [edi+36]
  4494.         cmp     edi, [esi+36]
  4495.         pop     edi
  4496.         jnz     @f
  4497.         push    edi
  4498.         mov     edi, [edi+32]
  4499.         cmp     edi, [esi+32]
  4500.         pop     edi
  4501.         jnz     @f
  4502.         add     esi, 40
  4503.         add     edi, 40
  4504.         jmp     strcmpi
  4505. @@:
  4506.         ret
  4507. .greater:
  4508.         test    esi, esi
  4509.         ret
  4510. .1dir:
  4511.         test    byte [edi], 10h
  4512.         jnz     .eq1
  4513. .less:
  4514.         xor     edi, edi
  4515.         stc
  4516.         ret
  4517.  
  4518. compare_size_rev:
  4519.         test    byte [esi], 10h
  4520.         jnz     .1dir
  4521.         test    byte [edi], 10h
  4522.         jnz     .greater
  4523. .eq1:
  4524.         push    esi
  4525.         mov     esi, [esi+36]
  4526.         cmp     esi, [edi+36]
  4527.         pop     esi
  4528.         jnz     @f
  4529.         push    esi
  4530.         mov     esi, [esi+32]
  4531.         cmp     esi, [edi+32]
  4532.         pop     esi
  4533.         jnz     @f
  4534.         add     esi, 40
  4535.         add     edi, 40
  4536.         xchg    esi, edi
  4537.         jmp     strcmpi
  4538. @@:
  4539.         ret
  4540. .greater:
  4541.         test    esi, esi
  4542.         ret
  4543. .1dir:
  4544.         test    byte [edi], 10h
  4545.         jnz     .eq1
  4546. .less:
  4547.         xor     edi, edi
  4548.         stc
  4549.         ret
  4550.  
  4551. compare_unordered:
  4552.         cmp     esi, edi
  4553.         ret
  4554. compare_unordered_rev:
  4555.         cmp     edi, esi
  4556.         ret
  4557.  
  4558. compare_created:
  4559.         test    byte [esi], 10h
  4560.         jnz     .1dir
  4561.         test    byte [edi], 10h
  4562.         jnz     .greater
  4563. .eq1:
  4564.         push    edi
  4565.         mov     edi, [edi+12]
  4566.         cmp     edi, [esi+12]
  4567.         pop     edi
  4568.         jnz     @f
  4569.         push    edi
  4570.         mov     edi, [edi+8]
  4571.         cmp     edi, [esi+8]
  4572.         pop     edi
  4573.         jnz     @f
  4574.         add     esi, 40
  4575.         add     edi, 40
  4576.         jmp     strcmpi
  4577. @@:
  4578.         ret
  4579. .greater:
  4580.         test    esi, esi
  4581.         ret
  4582. .1dir:
  4583.         test    byte [edi], 10h
  4584.         jnz     .eq1
  4585. .less:
  4586.         xor     edi, edi
  4587.         stc
  4588.         ret
  4589.  
  4590. compare_created_rev:
  4591.         test    byte [esi], 10h
  4592.         jnz     .1dir
  4593.         test    byte [edi], 10h
  4594.         jnz     .greater
  4595. .eq1:
  4596.         push    esi
  4597.         mov     esi, [esi+12]
  4598.         cmp     esi, [edi+12]
  4599.         pop     esi
  4600.         jnz     @f
  4601.         push    esi
  4602.         mov     esi, [esi+8]
  4603.         cmp     esi, [edi+8]
  4604.         pop     esi
  4605.         jnz     @f
  4606.         add     esi, 40
  4607.         add     edi, 40
  4608.         xchg    esi, edi
  4609.         jmp     strcmpi
  4610. @@:
  4611.         ret
  4612. .greater:
  4613.         test    esi, esi
  4614.         ret
  4615. .1dir:
  4616.         test    byte [edi], 10h
  4617.         jnz     .eq1
  4618. .less:
  4619.         xor     edi, edi
  4620.         stc
  4621.         ret
  4622.  
  4623. compare_accessed:
  4624.         test    byte [esi], 10h
  4625.         jnz     .1dir
  4626.         test    byte [edi], 10h
  4627.         jnz     .greater
  4628. .eq1:
  4629.         push    edi
  4630.         mov     edi, [edi+20]
  4631.         cmp     edi, [esi+20]
  4632.         pop     edi
  4633.         jnz     @f
  4634.         push    edi
  4635.         mov     edi, [edi+16]
  4636.         cmp     edi, [esi+16]
  4637.         pop     edi
  4638.         jnz     @f
  4639.         add     esi, 40
  4640.         add     edi, 40
  4641.         jmp     strcmpi
  4642. @@:
  4643.         ret
  4644. .greater:
  4645.         test    esi, esi
  4646.         ret
  4647. .1dir:
  4648.         test    byte [edi], 10h
  4649.         jnz     .eq1
  4650. .less:
  4651.         xor     edi, edi
  4652.         stc
  4653.         ret
  4654.  
  4655. compare_accessed_rev:
  4656.         test    byte [esi], 10h
  4657.         jnz     .1dir
  4658.         test    byte [edi], 10h
  4659.         jnz     .greater
  4660. .eq1:
  4661.         push    esi
  4662.         mov     esi, [esi+20]
  4663.         cmp     esi, [edi+20]
  4664.         pop     esi
  4665.         jnz     @f
  4666.         push    esi
  4667.         mov     esi, [esi+16]
  4668.         cmp     esi, [edi+16]
  4669.         pop     esi
  4670.         jnz     @f
  4671.         add     esi, 40
  4672.         add     edi, 40
  4673.         xchg    esi, edi
  4674.         jmp     strcmpi
  4675. @@:
  4676.         ret
  4677. .greater:
  4678.         test    esi, esi
  4679.         ret
  4680. .1dir:
  4681.         test    byte [edi], 10h
  4682.         jnz     .eq1
  4683. .less:
  4684.         xor     edi, edi
  4685.         stc
  4686.         ret
  4687.  
  4688. if 0
  4689. match_mask:
  4690. ; in: esi->name, edi->mask
  4691. ; out: CF clear <=> match
  4692.         pusha
  4693.         xchg    esi, edi
  4694. .main_cycle:
  4695.         push    esi
  4696. @@:
  4697.         lodsb
  4698.         test    al, al
  4699.         jz      @f
  4700.         cmp     al, ','
  4701.         jz      @f
  4702.         cmp     al, '|'
  4703.         jnz     @b
  4704. @@:
  4705.         mov     [esi-1], byte 0
  4706.         xchg    esi, [esp]
  4707.         call    match_single_mask
  4708.         pop     esi
  4709.         mov     [esi-1], al
  4710.         jnc     .found
  4711.         cmp     al, ','
  4712.         jz      .main_cycle
  4713. .done_fail:
  4714.         stc
  4715.         popa
  4716.         ret
  4717. .found:
  4718.         test    al, al
  4719.         jz      .done_succ
  4720.         cmp     al, '|'
  4721.         jz      .test_exclude
  4722.         lodsb
  4723.         jmp     .found
  4724. .done_succ:
  4725.         clc
  4726.         popa
  4727.         ret
  4728. .test_exclude:
  4729.         push    esi
  4730. @@:
  4731.         lodsb
  4732.         test    al, al
  4733.         jz      @f
  4734.         cmp     al, ','
  4735.         jnz     @b
  4736. @@:
  4737.         mov     byte [esi-1], 0
  4738.         xchg    esi, [esp]
  4739.         call    match_single_mask
  4740.         pop     esi
  4741.         mov     [esi-1], al
  4742.         jnc     .done_fail
  4743.         test    al, al
  4744.         jz      .done_succ
  4745.         jmp     .test_exclude
  4746.  
  4747. match_single_mask:
  4748. ; in: esi->mask, edi->name
  4749. ; out: CF clear <=> match
  4750.         pusha
  4751. .mask_symbol:
  4752.         lodsb
  4753.         test    al, al
  4754.         jz      .mask_done
  4755.         cmp     al, '*'
  4756.         jz      .asterisk
  4757.         cmp     al, '?'
  4758.         jz      .quest
  4759.         cmp     al, '['
  4760.         jz      .list
  4761.         call    match_symbol
  4762.         jnz     .done_fail
  4763.         inc     edi
  4764.         jmp     .mask_symbol
  4765. .done_fail:
  4766.         stc
  4767.         popa
  4768.         ret
  4769. .mask_done:
  4770.         scasb
  4771.         jnz     .done_fail
  4772. .done_succ:
  4773.         clc
  4774.         popa
  4775.         ret
  4776. .quest:
  4777.         mov     al, 0
  4778.         scasb
  4779.         jz      .done_fail
  4780.         jmp     .mask_symbol
  4781. .list:
  4782.         lodsb
  4783.         cmp     al, ']'
  4784.         jz      .done_fail
  4785.         cmp     byte [esi+1], '-'
  4786.         jz      .range
  4787.         call    match_symbol
  4788.         jnz     .list
  4789. .listok:
  4790.         inc     edi
  4791. @@:
  4792.         lodsb
  4793.         cmp     al, ']'
  4794.         jnz     @b
  4795.         jmp     .mask_symbol
  4796. .range:
  4797.         call    match_symbol
  4798.         ja      @f
  4799.         mov     al, [esi+2]
  4800.         call    match_symbol
  4801.         jae     .listok
  4802. @@:
  4803.         inc     esi
  4804.         jmp     .list
  4805. .asterisk:
  4806.         cmp     byte [esi], 0
  4807.         jz      .done_succ
  4808.         cmp     byte [esi], '?'
  4809.         jnz     @f
  4810.         mov     al, 0
  4811.         scasb
  4812.         jz      .done_fail
  4813.         inc     esi
  4814.         jmp     .asterisk
  4815. @@:
  4816.         cmp     byte [esi], '['
  4817.         jz      .asterisk_common
  4818. ; the mask is ...*<normal-symbol>...
  4819. .asterisk_normal:
  4820.         mov     al, [esi]
  4821. @@:
  4822.         cmp     byte [edi], 0
  4823.         jz      .done_fail
  4824.         call    match_symbol
  4825.         jz      @f
  4826.         inc     edi
  4827.         jmp     @b
  4828. @@:
  4829.         inc     edi
  4830.         inc     esi
  4831.         call    match_single_mask
  4832.         jnc     .done_succ
  4833.         dec     esi
  4834.         jmp     .asterisk_normal
  4835. .asterisk_common:
  4836.         push    edi
  4837. @@:
  4838.         call    match_single_mask
  4839.         jnc     @f
  4840.         mov     al, 0
  4841.         scasb
  4842.         jnz     @b
  4843.         pop     edi
  4844.         jmp     .done_fail
  4845. @@:
  4846.         pop     edi
  4847.         jmp     .done_succ
  4848.  
  4849. match_mask_rev:
  4850. ; in: esi->name, edx->end of name, edi->mask
  4851. ; out: CF clear <=> match
  4852.         pusha
  4853.         xchg    esi, edx
  4854.         xchg    esi, edi
  4855. .main_cycle:
  4856.         mov     ecx, esi
  4857. @@:
  4858.         lodsb
  4859.         test    al, al
  4860.         jz      @f
  4861.         cmp     al, ','
  4862.         jz      @f
  4863.         cmp     al, '|'
  4864.         jnz     @b
  4865. @@:
  4866.         dec     esi
  4867.         mov     [esi], byte 0
  4868.         call    match_single_mask_rev2
  4869.         mov     [esi], al
  4870.         inc     esi
  4871.         jnc     .found
  4872.         cmp     al, ','
  4873.         jz      .main_cycle
  4874. .done_fail:
  4875.         stc
  4876.         popa
  4877.         ret
  4878. .found:
  4879.         test    al, al
  4880.         jz      .done_succ
  4881.         cmp     al, '|'
  4882.         jz      .test_exclude
  4883.         lodsb
  4884.         jmp     .found
  4885. .done_succ:
  4886.         clc
  4887.         popa
  4888.         ret
  4889. .test_exclude:
  4890.         mov     ecx, esi
  4891. @@:
  4892.         lodsb
  4893.         test    al, al
  4894.         jz      @f
  4895.         cmp     al, ','
  4896.         jnz     @b
  4897. @@:
  4898.         dec     esi
  4899.         mov     byte [esi], 0
  4900.         call    match_single_mask_rev2
  4901.         mov     [esi], al
  4902.         inc     esi
  4903.         jnc     .done_fail
  4904.         test    al, al
  4905.         jz      .done_succ
  4906.         jmp     .test_exclude
  4907.  
  4908. match_single_mask_rev2:
  4909.         pusha
  4910.         jmp     match_single_mask_rev.mask_symbol
  4911. match_single_mask_rev:
  4912. ; in: esi->mask, edi->end of name, edx->start of name
  4913. ; out: CF clear <=> match
  4914.         pusha
  4915.         mov     ecx, esi
  4916. @@:
  4917.         lodsb
  4918.         test    al, al
  4919.         jnz     @b
  4920.         dec     esi
  4921. ; esi->end of mask, ecx->start of mask
  4922. .mask_symbol:
  4923.         dec     esi
  4924.         cmp     esi, ecx
  4925.         jb      .mask_done
  4926.         mov     al, [esi]
  4927.         cmp     al, '*'
  4928.         jz      .asterisk
  4929.         cmp     al, '?'
  4930.         jz      .quest
  4931.         cmp     al, ']'
  4932.         jz      .list
  4933.         dec     edi
  4934.         cmp     edi, edx
  4935.         jb      .done_fail
  4936.         call    match_symbol
  4937.         jz      .mask_symbol
  4938. .done_fail:
  4939.         stc
  4940.         popa
  4941.         ret
  4942. .mask_done:
  4943.         cmp     edi, edx
  4944.         jnz     .done_fail
  4945. .done_succ:
  4946.         clc
  4947.         popa
  4948.         ret
  4949. .quest:
  4950.         dec     edi
  4951.         cmp     edi, edx
  4952.         jb      .done_fail
  4953.         jmp     .mask_symbol
  4954. .list:
  4955.         dec     edi
  4956.         cmp     edi, edx
  4957.         jb      .done_fail
  4958. .list_check:
  4959.         dec     esi
  4960.         cmp     esi, ecx
  4961.         jbe     .done_fail
  4962.         mov     al, [esi]
  4963.         cmp     al, '['
  4964.         jz      .done_fail
  4965.         cmp     byte [esi-1], '-'
  4966.         jz      .range
  4967.         call    match_symbol
  4968.         jnz     .list_check
  4969. .listok:
  4970. @@:
  4971.         dec     esi
  4972.         cmp     esi, ecx
  4973.         jb      .done_fail
  4974.         cmp     byte [esi], '['
  4975.         jnz     @b
  4976.         jmp     .mask_symbol
  4977. .range:
  4978.         call    match_symbol
  4979.         jb      @f
  4980.         mov     al, [esi-2]
  4981.         call    match_symbol
  4982.         jbe     .listok
  4983. @@:
  4984.         dec     esi
  4985.         dec     esi
  4986.         jmp     .list_check
  4987. .asterisk:
  4988.         cmp     esi, ecx
  4989.         jz      .done_succ
  4990.         cmp     byte [esi-1], '?'
  4991.         jnz     @f
  4992.         cmp     edi, edx
  4993.         jz      .done_fail
  4994.         dec     esi
  4995.         jmp     .asterisk
  4996. @@:
  4997.         cmp     byte [esi-1], ']'
  4998.         jz      .asterisk_common
  4999. ; the mask is ...<normal-symbol>*...
  5000. .asterisk_normal:
  5001.         mov     al, [esi-1]
  5002. @@:
  5003.         cmp     edi, edx
  5004.         jz      .done_fail
  5005.         call    match_symbol
  5006.         jz      @f
  5007.         dec     edi
  5008.         jmp     @b
  5009. @@:
  5010.         dec     edi
  5011.         dec     esi
  5012.         call    match_single_mask_rev2
  5013.         jnc     .done_succ
  5014.         inc     esi
  5015.         jmp     .asterisk_normal
  5016. .asterisk_common:
  5017.         push    edi
  5018. @@:
  5019.         call    match_single_mask_rev2
  5020.         jnc     @f
  5021.         dec     edi
  5022.         cmp     edi, edx
  5023.         jae     @b
  5024.         pop     edi
  5025.         jmp     .done_fail
  5026. @@:
  5027.         pop     edi
  5028.         jmp     .done_succ
  5029. end if
  5030.  
  5031. ;tolower:
  5032. ;        push    ecx
  5033. ;        movzx   ecx, al
  5034. ;        mov     al, [tolower_table+ecx]
  5035. ;        pop     ecx
  5036. ;        ret
  5037.  
  5038. match_symbol:
  5039. ; in: al,[edi]=symbols
  5040. ; out: flags as 'cmp al,[edi]'
  5041.         push    eax ecx
  5042.         movzx   ecx, al
  5043.         mov     al, [tolower_table+ecx]
  5044.         movzx   ecx, byte [edi]
  5045.         cmp     al, [tolower_table+ecx]
  5046.         pop     ecx eax
  5047.         ret
  5048.  
  5049. match_mask_rev_lowercase:
  5050. ; in: esi->name, edx->end of name, edi->mask
  5051. ; out: CF clear <=> match
  5052.         pusha
  5053.         xchg    esi, edx
  5054.         xchg    esi, edi
  5055. .main_cycle:
  5056.         mov     ecx, esi
  5057. @@:
  5058.         lodsb
  5059.         test    al, al
  5060.         jz      @f
  5061.         cmp     al, ','
  5062.         jz      @f
  5063.         cmp     al, ';'
  5064.         jz      @f
  5065.         cmp     al, '|'
  5066.         jnz     @b
  5067. @@:
  5068.         dec     esi
  5069.         mov     [esi], byte 0
  5070.         call    match_single_mask_rev_lowercase
  5071.         mov     [esi], al
  5072.         inc     esi
  5073.         jnc     .found
  5074.         cmp     al, ','
  5075.         jz      .main_cycle
  5076.         cmp     al, ';'
  5077.         jz      .main_cycle
  5078. .done_fail:
  5079.         stc
  5080.         popa
  5081.         ret
  5082. .found:
  5083.         test    al, al
  5084.         jz      .done_succ
  5085.         cmp     al, '|'
  5086.         jz      .test_exclude
  5087.         lodsb
  5088.         jmp     .found
  5089. .done_succ:
  5090.         clc
  5091.         popa
  5092.         ret
  5093. .test_exclude:
  5094.         mov     ecx, esi
  5095. @@:
  5096.         lodsb
  5097.         test    al, al
  5098.         jz      @f
  5099.         cmp     al, ','
  5100.         jz      @f
  5101.         cmp     al, ';'
  5102.         jnz     @b
  5103. @@:
  5104.         dec     esi
  5105.         mov     byte [esi], 0
  5106.         call    match_single_mask_rev_lowercase
  5107.         mov     [esi], al
  5108.         inc     esi
  5109.         jnc     .done_fail
  5110.         test    al, al
  5111.         jz      .done_succ
  5112.         jmp     .test_exclude
  5113.  
  5114. match_single_mask_rev_lowercase:
  5115. ; in: esi->end of mask, ecx->start of mask, edi->end of name, edx->start of name
  5116. ; out: CF clear <=> match
  5117.         push    esi edi eax
  5118. .mask_symbol:
  5119.         dec     esi
  5120.         cmp     esi, ecx
  5121.         jb      .mask_done
  5122.         mov     al, [esi]
  5123.         cmp     al, '*'
  5124.         jz      .asterisk
  5125.         cmp     al, '?'
  5126.         jz      .quest
  5127.         cmp     al, ']'
  5128.         jz      .list
  5129.         dec     edi
  5130.         cmp     edi, edx
  5131.         jb      .done_fail
  5132.         cmp     al, [edi]
  5133.         jz      .mask_symbol
  5134. .done_fail:
  5135.         stc
  5136.         pop     eax edi esi
  5137.         ret
  5138. .mask_done:
  5139.         cmp     edi, edx
  5140.         jnz     .done_fail
  5141. .done_succ:
  5142.         clc
  5143.         pop     eax edi esi
  5144.         ret
  5145. .quest:
  5146.         dec     edi
  5147.         cmp     edi, edx
  5148.         jb      .done_fail
  5149.         jmp     .mask_symbol
  5150. .list:
  5151.         dec     edi
  5152.         cmp     edi, edx
  5153.         jb      .done_fail
  5154. .list_check:
  5155.         dec     esi
  5156.         cmp     esi, ecx
  5157.         jbe     .done_fail
  5158.         mov     al, [esi]
  5159.         cmp     al, '['
  5160.         jz      .done_fail
  5161.         cmp     byte [esi-1], '-'
  5162.         jz      .range
  5163.         cmp     al, [edi]
  5164.         jnz     .list_check
  5165. .listok:
  5166. @@:
  5167.         dec     esi
  5168.         cmp     esi, ecx
  5169.         jb      .done_fail
  5170.         cmp     byte [esi], '['
  5171.         jnz     @b
  5172.         jmp     .mask_symbol
  5173. .range:
  5174.         cmp     al, [edi]
  5175.         jb      @f
  5176.         mov     al, [esi-2]
  5177.         cmp     al, [edi]
  5178.         jbe     .listok
  5179. @@:
  5180.         dec     esi
  5181.         dec     esi
  5182.         jmp     .list_check
  5183. .asterisk:
  5184.         cmp     esi, ecx
  5185.         jz      .done_succ
  5186.         cmp     byte [esi-1], '?'
  5187.         jnz     @f
  5188.         cmp     edi, edx
  5189.         jz      .done_fail
  5190.         dec     esi
  5191.         jmp     .asterisk
  5192. @@:
  5193.         cmp     byte [esi-1], ']'
  5194.         jz      .asterisk_common
  5195. ; the mask is ...<normal-symbol>*...
  5196. .asterisk_normal:
  5197.         mov     al, [esi-1]
  5198. @@:
  5199.         cmp     edi, edx
  5200.         jz      .done_fail
  5201.         cmp     al, [edi]
  5202.         jz      @f
  5203.         dec     edi
  5204.         jmp     @b
  5205. @@:
  5206.         dec     edi
  5207.         dec     esi
  5208.         call    match_single_mask_rev_lowercase
  5209.         jnc     .done_succ
  5210.         inc     esi
  5211.         jmp     .asterisk_normal
  5212. .asterisk_common:
  5213.         push    edi
  5214. @@:
  5215.         call    match_single_mask_rev_lowercase
  5216.         jnc     @f
  5217.         dec     edi
  5218.         cmp     edi, edx
  5219.         jae     @b
  5220.         pop     edi
  5221.         jmp     .done_fail
  5222. @@:
  5223.         pop     edi
  5224.         jmp     .done_succ
  5225.  
  5226. find_extension:
  5227.         lea     esi, [ecx+40]
  5228.         push    esi
  5229. @@:
  5230.         lodsb
  5231.         test    al, al
  5232.         jnz     @b
  5233. @@:
  5234.         dec     esi
  5235.         cmp     byte [esi], '.'
  5236.         jz      .found_ext
  5237.         cmp     esi, [esp]
  5238.         ja      @b
  5239. ; empty extension
  5240.         pop     esi
  5241.         stc
  5242.         ret
  5243. .found_ext:
  5244.         inc     esi
  5245.         mov     edi, [associations]
  5246.         test    edi, edi
  5247.         jz      .notfound
  5248. .find_loop:
  5249.         push    esi edi
  5250.         call    strcmpi
  5251.         pop     edi esi
  5252.         pushf
  5253. @@:
  5254.         inc     edi
  5255.         cmp     byte [edi-1], 0
  5256.         jnz     @b
  5257.         popf
  5258.         jz      .found
  5259. @@:
  5260.         inc     edi
  5261.         cmp     byte [edi-1], 0
  5262.         jnz     @b
  5263.         cmp     byte [edi], 0
  5264.         jnz     .find_loop
  5265. .notfound:
  5266. ; unknown extension
  5267.         stc
  5268. .found:
  5269.         pop     esi
  5270.         ret
  5271.  
  5272. header  db      'Kolibri Far 0.34',0
  5273.  
  5274. nomem_draw      db      'No memory for redraw.',0
  5275. .size = $ - nomem_draw
  5276.  
  5277. def_left_dir    db      '/rd/1',0
  5278. def_right_dir   db      '/hd0/1',0
  5279.  
  5280. bSilentFolderMode db    1
  5281.  
  5282. if lang eq ru
  5283. aFolder         db      ' ¯ª '
  5284. .size = $-aFolder
  5285. aUp             db      '‚¢¥àå'
  5286. .size = $-aUp
  5287. aDrive          db      '„¨áª',0
  5288. aScreens        db      'ªà ­ë',0
  5289. else
  5290. aFolder         db      'Folder'
  5291. .size = $-aFolder
  5292. aUp             db      'Up'
  5293. .size = $-aUp
  5294. aDrive          db      'Drive',0
  5295. aScreens        db      'Screens',0
  5296. end if
  5297.  
  5298. align 4
  5299. _10d dd 10
  5300. _100d dd 100
  5301. muldiv10 dd 429496729
  5302. _10 db 10
  5303. _100 db 100
  5304.  
  5305. fpu_cw  dw      000011100111111b
  5306.  
  5307. keybar_panels:
  5308. if lang eq ru
  5309. ; ¡¥§ ª« ¢¨è-¬®¤¨ä¨ª â®à®¢
  5310.         db      '®¬®éì'
  5311.         db      '®«ì§Œ'
  5312.         db      'à®á¬ '
  5313.         db      '¥¤ ªâ'
  5314.         db      'Š®¯¨à '
  5315.         db      '¥à¥­ '
  5316.         db      ' ¯ª  '
  5317.         db      '“¤ «¥­'
  5318.         db      'Š®­äŒ­'
  5319.         db      '‚ë室 '
  5320.         db      'Œ®¤ã«¨'
  5321.         db      'ªà ­ë'
  5322. ; Shift
  5323.         db      '„®¡ ¢«'
  5324.         db      ' á¯ ª'
  5325.         db      '€à劮¬'
  5326.         db      '¥¤ ª.'
  5327.         db      'Š®¯¨à '
  5328.         db      '¥à¥¨¬'
  5329.         db      '      '
  5330.         db      '“¤ «¥­'
  5331.         db      '‘®åà ­'
  5332.         db      '®á«¤­'
  5333.         db      'ƒà㯯ë'
  5334.         db      '‚ë¡à ­'
  5335. ; Ctrl
  5336.         db      '‹¥¢ ï '
  5337.         db      'à ¢ ï'
  5338.         db      'ˆ¬ï   '
  5339.         db      ' áè¨à'
  5340.         db      'Œ®¤¨ä '
  5341.         db      ' §¬¥à'
  5342.         db      '¥á®àâ'
  5343.         db      '‘®§¤ ­'
  5344.         db      '„®áâã¯'
  5345.         db      'Ž¯¨á ­'
  5346.         db      '‚« ¤¥«'
  5347.         db      '‘®àâ  '
  5348. ; Ctrl+Shift
  5349.         db      '      '
  5350.         db      '      '
  5351.         db      'à®á¬ '
  5352.         db      '¥¤ ªâ'
  5353.         db      '      '
  5354.         db      '      '
  5355.         db      '      '
  5356.         db      '      '
  5357.         db      '      '
  5358.         db      '      '
  5359.         db      '      '
  5360.         db      '      '
  5361. ; Alt
  5362.         db      '‹¥¢ ï '
  5363.         db      'à ¢ ï'
  5364.         db      '‘¬®âà.'
  5365.         db      '¥¤ ª.'
  5366.         db      '¥ç âì'
  5367.         db      '‘¢ï§ì '
  5368.         db      'ˆáª âì'
  5369.         db      'ˆáâ®à '
  5370.         db      '‚¨¤¥® '
  5371.         db      '„¥à¥¢®'
  5372.         db      'ˆáâà '
  5373.         db      'ˆá⏠¯'
  5374. ; Alt+Shift
  5375.         db      '      '
  5376.         db      '      '
  5377.         db      '      '
  5378.         db      '      '
  5379.         db      '      '
  5380.         db      '      '
  5381.         db      '      '
  5382.         db      '      '
  5383.         db      'Š®­ä«'
  5384.         db      '      '
  5385.         db      '      '
  5386.         db      '      '
  5387. ; Alt+Ctrl
  5388. times 12 db     '      '
  5389. ; Alt+Ctrl+Shift
  5390. times 12 db     '      '
  5391. else
  5392. ; No modificators
  5393.         db      'Help  '
  5394.         db      'UserMn'
  5395.         db      'View  '
  5396.         db      'Edit  '
  5397.         db      'Copy  '
  5398.         db      'RenMov'
  5399.         db      'MkFold'
  5400.         db      'Delete'
  5401.         db      'ConfMn'
  5402.         db      'Quit  '
  5403.         db      'Plugin'
  5404.         db      'Screen'
  5405. ; Shift
  5406.         db      'Add   '
  5407.         db      'Extrct'
  5408.         db      'ArcCmd'
  5409.         db      'Edit..'
  5410.         db      'Copy  '
  5411.         db      'Rename'
  5412.         db      '      '
  5413.         db      'Delete'
  5414.         db      'Save  '
  5415.         db      'Last  '
  5416.         db      'Group '
  5417.         db      'SelUp '
  5418. ; Ctrl
  5419.         db      'Left  '
  5420.         db      'Right '
  5421.         db      'Name  '
  5422.         db      'Extens'
  5423.         db      'Modifn'
  5424.         db      'Size  '
  5425.         db      'Unsort'
  5426.         db      'Creatn'
  5427.         db      'Access'
  5428.         db      'Descr '
  5429.         db      'Owner '
  5430.         db      'Sort  '
  5431. ; Ctrl+Shift
  5432.         db      '      '
  5433.         db      '      '
  5434.         db      'View  '
  5435.         db      'Edit  '
  5436.         db      '      '
  5437.         db      '      '
  5438.         db      '      '
  5439.         db      '      '
  5440.         db      '      '
  5441.         db      '      '
  5442.         db      '      '
  5443.         db      '      '
  5444. ; Alt
  5445.         db      'Left  '
  5446.         db      'Right '
  5447.         db      'View..'
  5448.         db      'Edit..'
  5449.         db      'Print '
  5450.         db      'MkLink'
  5451.         db      'Find  '
  5452.         db      'Histry'
  5453.         db      'Video '
  5454.         db      'Tree  '
  5455.         db      'ViewHs'
  5456.         db      'FoldHs'
  5457. ; Alt+Shift
  5458.         db      '      '
  5459.         db      '      '
  5460.         db      '      '
  5461.         db      '      '
  5462.         db      '      '
  5463.         db      '      '
  5464.         db      '      '
  5465.         db      '      '
  5466.         db      'ConfPl'
  5467.         db      '      '
  5468.         db      '      '
  5469.         db      '      '
  5470. ; Alt+Ctrl
  5471. times 12 db     '      '
  5472. ; Alt+Ctrl+Shift
  5473. times 12 db     '      '
  5474. end if
  5475.  
  5476. keybar_viewer:
  5477. if lang eq ru
  5478. ; ¡¥§ ª« ¢¨è-¬®¤¨ä¨ª â®à®¢
  5479.         db      '®¬®éì'
  5480.         db      ' §¢¥à'
  5481.         db      '‚ë室 '
  5482.         db      'Š®¤   '
  5483.         db      '      '
  5484.         db      '¥¤ ªâ'
  5485.         db      '®¨áª '
  5486. keybar_cp:
  5487.         db      'cp1251'
  5488.         db      '      '
  5489.         db      '‚ë室 '
  5490.         db      'Œ®¤ã«¨'
  5491.         db      'ªà ­ë'
  5492. ; Shift
  5493.         db      '      '
  5494.         db      '‘«®¢  '
  5495.         db      '      '
  5496.         db      '      '
  5497.         db      '      '
  5498.         db      '      '
  5499.         db      '„ «ìè¥'
  5500.         db      '’ ¡«¨æ'
  5501.         db      '      '
  5502.         db      '      '
  5503.         db      '      '
  5504.         db      '      '
  5505. ; Ctrl
  5506.         db      '      '
  5507.         db      '      '
  5508.         db      '      '
  5509.         db      '      '
  5510.         db      '      '
  5511.         db      '      '
  5512.         db      '      '
  5513.         db      '      '
  5514.         db      '      '
  5515.         db      '®§¨æ '
  5516.         db      '      '
  5517.         db      '      '
  5518. ; Ctrl+Shift
  5519.         db      '      '
  5520.         db      '      '
  5521.         db      '      '
  5522.         db      '      '
  5523.         db      '      '
  5524.         db      '      '
  5525.         db      '      '
  5526.         db      '      '
  5527.         db      '      '
  5528.         db      '      '
  5529.         db      '      '
  5530.         db      '      '
  5531. ; Alt
  5532.         db      '      '
  5533.         db      '      '
  5534.         db      '      '
  5535.         db      '      '
  5536.         db      '¥ç âì'
  5537.         db      '      '
  5538.         db      ' § ¤ '
  5539.         db      '¥à¥©â'
  5540.         db      '‚¨¤¥® '
  5541.         db      '      '
  5542.         db      'ˆáâà '
  5543.         db      '      '
  5544. ; Alt+Shift
  5545.         db      '      '
  5546.         db      '      '
  5547.         db      '      '
  5548.         db      '      '
  5549.         db      '      '
  5550.         db      '      '
  5551.         db      '      '
  5552.         db      '      '
  5553.         db      'Š®­ä¨£'
  5554.         db      '      '
  5555.         db      '      '
  5556.         db      '      '
  5557. ; Alt+Ctrl
  5558. times 12 db     '      '
  5559. ; Alt+Ctrl+Shift
  5560. times 12 db     '      '
  5561. else
  5562. ; No modificators
  5563.         db      'Help  '
  5564.         db      'Unwrap'
  5565.         db      'Quit  '
  5566.         db      'Hex   '
  5567.         db      '      '
  5568.         db      'Edit  '
  5569.         db      'Search'
  5570. keybar_cp:
  5571.         db      'cp1251'
  5572.         db      '      '
  5573.         db      'Quit  '
  5574.         db      'Plugin'
  5575.         db      'Screen'
  5576. ; Shift
  5577.         db      '      '
  5578.         db      'WWrap '
  5579.         db      '      '
  5580.         db      '      '
  5581.         db      '      '
  5582.         db      '      '
  5583.         db      'Next  '
  5584.         db      'Table '
  5585.         db      '      '
  5586.         db      '      '
  5587.         db      '      '
  5588.         db      '      '
  5589. ; Ctrl
  5590.         db      '      '
  5591.         db      '      '
  5592.         db      '      '
  5593.         db      '      '
  5594.         db      '      '
  5595.         db      '      '
  5596.         db      '      '
  5597.         db      '      '
  5598.         db      '      '
  5599.         db      'GoFile'
  5600.         db      '      '
  5601.         db      '      '
  5602. ; Ctrl+Shift
  5603.         db      '      '
  5604.         db      '      '
  5605.         db      '      '
  5606.         db      '      '
  5607.         db      '      '
  5608.         db      '      '
  5609.         db      '      '
  5610.         db      '      '
  5611.         db      '      '
  5612.         db      '      '
  5613.         db      '      '
  5614.         db      '      '
  5615. ; Alt
  5616.         db      '      '
  5617.         db      '      '
  5618.         db      '      '
  5619.         db      '      '
  5620.         db      'Print '
  5621.         db      '      '
  5622.         db      'Prev  '
  5623.         db      'Goto  '
  5624.         db      'Video '
  5625.         db      '      '
  5626.         db      'ViewHs'
  5627.         db      '      '
  5628. ; Alt+Shift
  5629.         db      '      '
  5630.         db      '      '
  5631.         db      '      '
  5632.         db      '      '
  5633.         db      '      '
  5634.         db      '      '
  5635.         db      '      '
  5636.         db      '      '
  5637.         db      'Config'
  5638.         db      '      '
  5639.         db      '      '
  5640.         db      '      '
  5641. ; Alt+Ctrl
  5642. times 12 db     '      '
  5643. ; Alt+Ctrl+Shift
  5644. times 12 db     '      '
  5645. end if
  5646.  
  5647.         align   4
  5648. cur_width       dd      80
  5649. cur_height      dd      25
  5650. saved_width     dd      -1
  5651. saved_height    dd      -1
  5652. fill_width      dd      0
  5653. fill_height     dd      0
  5654. max_width = 256
  5655. max_height = 256
  5656. console_data_ptr dd     0
  5657.  
  5658. cursor_x        dd      -1
  5659. cursor_y        dd      -1
  5660. cur_cursor_pos  dd      -1
  5661. old_cursor_pos  dd      -1
  5662.  
  5663. active_panel    dd      panel1_data
  5664.  
  5665. associations    dd      0
  5666. associations_size dd    1               ; terminating zero
  5667. associations_allocated dd 0x1000        ; start with one page
  5668.  
  5669. console_colors  dd      0x000000, 0x000080, 0x008000, 0x008080
  5670.                 dd      0x800000, 0x800080, 0x808000, 0xC0C0C0
  5671.                 dd      0x808080, 0x0000FF, 0x00FF00, 0x00FFFF
  5672.                 dd      0xFF0000, 0xFF00FF, 0xFFFF00, 0xFFFFFF
  5673.  
  5674. compare_fns     dd      compare_name
  5675.                 dd      compare_name_rev
  5676.                 dd      compare_ext
  5677.                 dd      compare_ext_rev
  5678.                 dd      compare_modified
  5679.                 dd      compare_modified_rev
  5680.                 dd      compare_size
  5681.                 dd      compare_size_rev
  5682.                 dd      compare_unordered
  5683.                 dd      compare_unordered_rev
  5684.                 dd      compare_created
  5685.                 dd      compare_created_rev
  5686.                 dd      compare_accessed
  5687.                 dd      compare_accessed_rev
  5688.  
  5689. ctrlkey_tests   dd      ctrlkey_test0
  5690.                 dd      ctrlkey_test1
  5691.                 dd      ctrlkey_test2
  5692.                 dd      ctrlkey_test3
  5693.                 dd      ctrlkey_test4
  5694. ctrlkey_tests_num = 5
  5695.  
  5696. virtual at 0
  5697. screen_vtable:
  5698.         .OnRedraw       dd      ?
  5699.         .OnKey          dd      ?
  5700.         .keybar         dd      ?
  5701.         .getname        dd      ?
  5702. end virtual
  5703.  
  5704. panels_vtable:
  5705.         dd      panels_OnRedraw
  5706.         dd      panels_OnKey
  5707.         dd      keybar_panels
  5708.         dd      panels_getname
  5709.  
  5710. viewer_vtable:
  5711.         dd      viewer_OnRedraw
  5712.         dd      viewer_OnKey
  5713.         dd      keybar_viewer
  5714.         dd      viewer_getname
  5715.  
  5716. ; additions to this table require changes in tools.inc::get_error_msg
  5717. errors1:
  5718.         dd      error0msg
  5719.         dd      error1msg
  5720.         dd      error2msg
  5721.         dd      error3msg
  5722.         dd      error4msg
  5723.         dd      error5msg
  5724.         dd      error6msg
  5725.         dd      error7msg
  5726.         dd      error8msg
  5727.         dd      error9msg
  5728.         dd      error10msg
  5729.         dd      error11msg
  5730. errors2:
  5731.         dd      error30msg
  5732.         dd      error31msg
  5733.         dd      error32msg
  5734.  
  5735. encodings:
  5736. .cp866 = 0
  5737. .cp1251 = 1
  5738. .koi8r = 2
  5739. .unicode = 3
  5740.  
  5741. .names:
  5742.         db      'cp866   '
  5743.         db      'cp1251  '
  5744.         db      'koi8-r  '
  5745.         db      'Unicode '
  5746.  
  5747. .tables:
  5748. ; cp866 - trivial map
  5749.         times 128 db %+127
  5750. ; cp1251
  5751.         db      0x3F,0x3F,0x27,0x3F,0x22,0x3A,0xC5,0xD8,0x3F,0x25,0x3F,0x3C,0x3F,0x3F,0x3F,0x3F
  5752.         db      0x3F,0x27,0x27,0x22,0x22,0x07,0x2D,0x2D,0x3F,0x54,0x3F,0x3E,0x3F,0x3F,0x3F,0x3F
  5753.         db      0xFF,0xF6,0xF7,0x3F,0xFD,0x3F,0xB3,0x15,0xF0,0x63,0xF2,0x3C,0xBF,0x2D,0x52,0xF4
  5754.         db      0xF8,0x2B,0x49,0x69,0x3F,0xE7,0x14,0xFA,0xF1,0xFC,0xF3,0x3E,0x3F,0x3F,0x3F,0xF5
  5755.         times 0x30 db %-1+0x80
  5756.         times 0x10 db %-1+0xE0
  5757. ; koi8-r
  5758.         db      0xC4,0xB3,0xDA,0xBF,0xC0,0xD9,0xC3,0xB4,0xC2,0xC1,0xC5,0xDF,0xDC,0xDB,0xDD,0xDE
  5759.         db      0xB0,0xB1,0xB2,0xF4,0xFE,0xF9,0xFB,0xF7,0xF3,0xF2,0xFF,0xF5,0xF8,0xFD,0xFA,0xF6
  5760.         db      0xCD,0xBA,0xD5,0xF1,0xD6,0xC9,0xB8,0xB7,0xBB,0xD4,0xD3,0xC8,0xBE,0xBD,0xBC,0xC6
  5761.         db      0xC7,0xCC,0xB5,0xF0,0xB6,0xB9,0xD1,0xD2,0xCB,0xCF,0xD0,0xCA,0xD8,0xD7,0xCE,0xFC
  5762.         db      0xEE,0xA0,0xA1,0xE6,0xA4,0xA5,0xE4,0xA3,0xE5,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE
  5763.         db      0xAF,0xEF,0xE0,0xE1,0xE2,0xE3,0xA6,0xA2,0xEC,0xEB,0xA7,0xE8,0xED,0xE9,0xE7,0xEA
  5764.         db      0x9E,0x80,0x81,0x96,0x84,0x85,0x94,0x83,0x95,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E
  5765.         db      0x8F,0x9F,0x90,0x91,0x92,0x93,0x86,0x82,0x9C,0x9B,0x87,0x98,0x9D,0x99,0x97,0x9A
  5766.  
  5767. .menu:
  5768.         db      .cp866
  5769. .menu.1:
  5770.         dd      .menu.2
  5771.         dd      0
  5772. if lang eq ru
  5773.         db      '&DOS ⥪áâ (cp866)',0
  5774. else
  5775.         db      '&DOS text (cp866)',0
  5776. end if
  5777.         db      .cp1251
  5778. .menu.2:
  5779.         dd      .menu.3
  5780.         dd      .menu.1
  5781. if lang eq ru
  5782.         db      '&Windows ⥪áâ (cp1251)',0
  5783. else
  5784.         db      '&Windows text (cp1251)',0
  5785. end if
  5786.         db      .koi8r
  5787. .menu.3:
  5788.         dd      .menu.4
  5789.         dd      .menu.2
  5790. if lang eq ru
  5791.         db      '&Linux ⥪áâ (koi8-r)',0
  5792. else
  5793.         db      '&Linux text (koi8-r)',0
  5794. end if
  5795.         db      .unicode
  5796. .menu.4:
  5797.         dd      0
  5798.         dd      .menu.3
  5799.         db      '&Unicode',0
  5800.  
  5801. active_screen   dd      0
  5802. tabsize         dd      8
  5803.  
  5804. ascii2scan:
  5805.         times 32 db 0
  5806.         db      0x39,0x02,0x03,0x04,0x05,0x06,0x08,0x28,0x0A,0x0B,0x09,0x0D,0x33,0x0C,0x34,0x35
  5807.         db      0x0B,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x27,0x27,0x33,0x0D,0x34,0x35
  5808.         db      0x03,0x1E,0x30,0x2E,0x20,0x12,0x21,0x22,0x23,0x17,0x24,0x25,0x26,0x32,0x31,0x18
  5809.         db      0x19,0x10,0x13,0x1F,0x14,0x16,0x2F,0x11,0x2D,0x15,0x2C,0x1A,0x2B,0x1B,0x07,0x0C
  5810.         db      0x29,0x1E,0x30,0x2E,0x20,0x12,0x21,0x22,0x23,0x17,0x24,0x25,0x26,0x32,0x31,0x18
  5811.         db      0x19,0x10,0x13,0x1F,0x14,0x16,0x2F,0x11,0x2D,0x15,0x2C,0x1A,0x2B,0x1B,0x29,0x00
  5812.         db      0x21,0x33,0x20,0x16,0x26,0x14,0x27,0x19,0x30,0x10,0x13,0x25,0x2F,0x15,0x24,0x22
  5813.         db      0x23,0x2E,0x31,0x12,0x1E,0x1A,0x11,0x2D,0x17,0x18,0x1B,0x1F,0x32,0x28,0x34,0x2C
  5814.         db      0x21,0x33,0x20,0x16,0x26,0x14,0x27,0x19,0x30,0x10,0x13,0x25,0x2F,0x15,0x24,0x22
  5815.         times 48 db 0
  5816.         db      0x23,0x2E,0x31,0x12,0x1E,0x1A,0x11,0x2D,0x17,0x18,0x1B,0x1F,0x32,0x28,0x34,0x2C
  5817.         db      0x29,0x29,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
  5818.  
  5819. ; Š« ¢¨è­ë¥ á®ç¥â ­¨ï
  5820. ; db scancode, reserved
  5821. ; dw ctrlstate
  5822. ; dd handler
  5823. ; ctrlstate: ¬« ¤è¨¥ 4 ¡¨â  - ¤«ï Shift, á«¥¤ãî騥 - ¤«ï Ctrl, á«¥¤ãî騥 - ¤«ï Alt
  5824. ; 0 = ­¨ ®¤­  ª« ¢¨è  ­¥ ­ ¦ â 
  5825. ; 1 = ஢­® ®¤­  ­ ¦ â 
  5826. ; 2 = ®¡¥ ­ ¦ âë
  5827. ; 3 = «¥¢ ï ­ ¦ â , ¯à ¢ ï ­¥â
  5828. ; 4 = ¯à ¢ ï ­ ¦ â , «¥¢ ï ­¥â
  5829. panels_ctrlkeys:
  5830.         dw      0x48, 0
  5831.         dd      panels_OnKey.up
  5832.         dw      0x50, 0
  5833.         dd      panels_OnKey.down
  5834.         dw      0x4B, 0
  5835.         dd      panels_OnKey.left
  5836.         dw      0x4D, 0
  5837.         dd      panels_OnKey.right
  5838.         dw      0x51, 0
  5839.         dd      panels_OnKey.pgdn
  5840.         dw      0x49, 0
  5841.         dd      panels_OnKey.pgup
  5842.         dw      0xF, 0
  5843.         dd      panels_OnKey.tab
  5844.         dw      0x47, 0
  5845.         dd      panels_OnKey.home
  5846.         dw      0x4F, 0
  5847.         dd      panels_OnKey.end
  5848.         dw      0x1C, 0
  5849.         dd      panels_OnKey.enter
  5850.         dw      0x3D, 0
  5851.         dd      panels_OnKey.f3
  5852.         dw      0x3F, 0
  5853.         dd      panels_OnKey.f5
  5854.         dw      0x3F, 1
  5855.         dd      panels_OnKey.shift_f5
  5856.         dw      0x41, 0
  5857.         dd      panels_OnKey.f7
  5858.         dw      0x42, 0
  5859.         dd      panels_OnKey.f8
  5860.         dw      0x43, 0x100
  5861.         dd      alt_f9
  5862.         dw      0x44, 0
  5863.         dd      exit
  5864.         dw      0x5D, 0
  5865.         dd      panels_OnKey.menu
  5866. repeat 9-3+1
  5867.         dw      0x3D+%-1, 0x10
  5868.         dd      panels_OnKey.ctrl_f39
  5869. end repeat
  5870.         dw      0x3B, 0x100
  5871.         dd      panels_OnKey.alt_f12
  5872.         dw      0x3C, 0x100
  5873.         dd      panels_OnKey.alt_f12
  5874.         dw      0x58, 0
  5875.         dd      F12
  5876.         dw      0x13, 0x10
  5877.         dd      panels_OnKey.ctrl_r
  5878.         dw      2, 0x30
  5879.         dd      panels_OnKey.change_mode
  5880.         dw      3, 0x30
  5881.         dd      panels_OnKey.change_mode
  5882.         dw      4, 0x30
  5883.         dd      panels_OnKey.change_mode
  5884.         dw      5, 0x30
  5885.         dd      panels_OnKey.change_mode
  5886. repeat 10
  5887.         dw      %+1, 0x40
  5888.         dd      panels_OnKey.quick_jump
  5889. end repeat
  5890.         dw      0x52, 0
  5891.         dd      panels_OnKey.insert
  5892.         dw      0x4E, 0
  5893.         dd      panels_OnKey.greyplus
  5894.         dw      0x4A, 0
  5895.         dd      panels_OnKey.greyminus
  5896.         dw      0x37, 0
  5897.         dd      panels_OnKey.greyasterisk
  5898.         db      0
  5899.  
  5900. viewer_ctrlkeys:
  5901.         dw      1, 0
  5902.         dd      viewer_OnKey.exit
  5903.         dw      0x51, 0
  5904.         dd      viewer_OnKey.pgdn
  5905.         dw      0x49, 0
  5906.         dd      viewer_OnKey.pgup
  5907.         dw      0x50, 0
  5908.         dd      viewer_OnKey.down
  5909.         dw      0x48, 0
  5910.         dd      viewer_OnKey.up
  5911.         dw      0x4B, 0
  5912.         dd      viewer_OnKey.left
  5913.         dw      0x4B, 0x10
  5914.         dd      viewer_OnKey.ctrl_left
  5915.         dw      0x4B, 0x11
  5916.         dd      viewer_OnKey.ctrl_shift_left
  5917.         dw      0x4C, 0
  5918.         dd      viewer_OnKey.exit
  5919.         dw      0x4D, 0
  5920.         dd      viewer_OnKey.right
  5921.         dw      0x4D, 0x10
  5922.         dd      viewer_OnKey.ctrl_right
  5923.         dw      0x4D, 0x11
  5924.         dd      viewer_OnKey.ctrl_shift_right
  5925.         dw      0x3C, 0
  5926.         dd      viewer_OnKey.f2
  5927.         dw      0x3D, 0
  5928.         dd      viewer_OnKey.exit
  5929.         dw      0x3E, 0
  5930.         dd      viewer_OnKey.f4
  5931.         dw      0x42, 0
  5932.         dd      viewer_OnKey.f8
  5933.         dw      0x42, 1
  5934.         dd      viewer_OnKey.shift_f8
  5935.         dw      0x44, 0
  5936.         dd      viewer_OnKey.exit
  5937.         dw      0x47, 0
  5938.         dd      viewer_OnKey.home
  5939.         dw      0x4F, 0
  5940.         dd      viewer_OnKey.end
  5941.         dw      0x58, 0
  5942.         dd      F12
  5943.         dw      0x43, 0x100
  5944.         dd      alt_f9
  5945.         db      0
  5946.  
  5947. dirinfo:
  5948.                 dd      1
  5949. .first          dd      0
  5950.                 dd      0
  5951. .size           dd      300
  5952. .dirdata        dd      0
  5953.                 db      0
  5954. .name           dd      0
  5955.  
  5956. readinfo:
  5957.                 dd      0
  5958. .first          dq      0
  5959. .size           dd      0
  5960. .data           dd      0
  5961.                 db      0
  5962. .name           dd      0
  5963.  
  5964. writeinfo:
  5965. .code           dd      2
  5966. .first          dq      0
  5967. .size           dd      0
  5968. .data           dd      0
  5969.                 db      0
  5970. .name           dd      0
  5971.  
  5972. attrinfo:
  5973.                 dd      5
  5974.                 dd      0
  5975.                 dd      0
  5976.                 dd      0
  5977.                 dd      .attr
  5978.                 db      0
  5979. .name           dd      0
  5980.  
  5981. delinfo:
  5982.                 dd      8
  5983.                 dd      0
  5984.                 dd      0
  5985.                 dd      0
  5986.                 dd      0
  5987.                 db      0
  5988.                 dd      execdata
  5989.  
  5990. mkdirinfo:
  5991.                 dd      9
  5992.                 dd      0
  5993.                 dd      0
  5994.                 dd      0
  5995.                 dd      0
  5996.                 db      0
  5997.                 dd      CopyDestEditBuf+12
  5998.  
  5999. if lang eq ru
  6000. compare_names   db      '¨ˆà¬Œ €­á‘¤„'
  6001. else
  6002. compare_names   db      'nNxXmMsSuUcCaA'
  6003. end if
  6004.  
  6005. ; ‡¤¥áì ­ ç¨­ îâáï ª®­ä¨£ãà æ¨®­­ë¥ ¤ ­­ë¥ - ¢ ⥪ã饩 ॠ«¨§ æ¨¨ ®­¨ § è¨âë ¢ ¡¨­ à­¨ª
  6006.  
  6007. ;  ­¥«ì
  6008. panel_normal_color      db      1Bh
  6009. panel_selected_color    db      1Eh
  6010. panel_border_color      db      1Bh
  6011. panel_cursor_color      db      30h
  6012. panel_selected_cursor_color db  3Eh
  6013. panel_header_color      db      1Bh
  6014. panel_active_header_color db    30h
  6015. column_header_color     db      1Eh
  6016. panel_number_color      db      1Bh
  6017. panel_numselected_color db      3Eh
  6018. panel_nscreens_color    db      0Bh
  6019. ; „¨ «®£¨
  6020. dialog_colors:
  6021. dialog_main_color       db      70h
  6022. dialog_border_color     db      70h
  6023. dialog_header_color     db      70h
  6024. dialog_edit_color       db      30h
  6025. dialog_unmodified_edit_color db 38h
  6026. dialog_normal_btn_color db      70h
  6027. dialog_selected_btn_color db    30h
  6028. ; à¥¤ã¯à¥¦¤¥­¨ï ¨ ®è¨¡ª¨
  6029. warning_colors:
  6030. ; !!! ¤®«¦­ë ¡ëâì ⥠¦¥ ¯®«ï ¨ ¢ ⮬ ¦¥ ¯®à浪¥, çâ® ¨ ¤«ï ®¡ëç­ëå ¤¨ «®£®¢ !!!
  6031. warning_main_color      db      4Fh
  6032. warning_border_color    db      4Fh
  6033. warning_header_color    db      4Fh
  6034. warning_edit_color      db      30h
  6035. warning_unmodified_edit_color db 38h
  6036. warning_normal_btn_color db     4Fh
  6037. warning_selected_btn_color db   70h
  6038. ; Œ¥­î
  6039. menu_normal_color       db      3Fh
  6040. menu_selected_color     db      0Fh
  6041. menu_highlight_color    db      3Eh
  6042. menu_selected_highlight_color db 0Eh
  6043. menu_border_color       db      3Fh
  6044. menu_header_color       db      3Fh
  6045. menu_scrollbar_color    db      3Fh
  6046. ; ‹¨­¥©ª  ª« ¢¨è
  6047. keybar_number_color     db      7
  6048. keybar_name_color       db      30h
  6049. keybar_bgr_color        db      7
  6050. ; Š®¬ ­¤­ ï áâப 
  6051. cmdbar_normal_color     db      7
  6052. cmdbar_prefix_color     db      7
  6053. ; à®á¬®âà騪
  6054. view_normal_color       db      1Bh
  6055. view_status_color       db      30h
  6056. view_arrows_color       db      1Eh
  6057.  
  6058. ; ®¤á¢¥âª  ä ©«®¢
  6059. highlight_num_groups    dd      10
  6060. highlight_groups        dd      highlight_group0
  6061.                 dd      highlight_group1
  6062.                 dd      highlight_group2
  6063.                 dd      highlight_group3
  6064.                 dd      highlight_group4
  6065.                 dd      highlight_group5
  6066.                 dd      highlight_group6
  6067.                 dd      highlight_group7
  6068.                 dd      highlight_group8
  6069.                 dd      highlight_group9
  6070.  
  6071. ; ”®à¬ â ®¯¨á ­¨ï £àã¯¯ë ¯®¤á¢¥âª¨:
  6072. virtual at 0
  6073. highlight:
  6074.         .IncludeAttributes      db ?
  6075.         .NormalColor            db ?
  6076.         .CursorColor            db ?
  6077.         .SelectedColor          db ?
  6078.         .SelectedCursorColor    db ?
  6079.         .Mask:                  ; ASCIIZ-string
  6080. end virtual
  6081.  
  6082. ; all highlight masks must be in lowercase!
  6083. highlight_group0:
  6084.         db      2
  6085.         db      13h, 38h, 0, 0
  6086.         db      '*',0
  6087. highlight_group1:
  6088.         db      4
  6089.         db      13h, 38h, 0, 0
  6090.         db      '*',0
  6091. highlight_group2:
  6092.         db      10h
  6093.         db      1Fh, 3Fh, 0, 0
  6094.         db      '*|..',0
  6095. highlight_group3:
  6096.         db      10h
  6097.         db      0, 0, 0, 0
  6098.         db      '..',0
  6099. highlight_group4:
  6100.         db      0
  6101.         db      1Ah, 3Ah, 0, 0
  6102.         db      '*.exe,*.com,*.bat,*.cmd',0
  6103. highlight_group5:
  6104.         db      0
  6105.         db      1Ah, 3Ah, 0, 0
  6106.         db      '*|*.*',0
  6107. highlight_group6:
  6108.         db      0
  6109.         db      1Dh, 3Dh, 0, 0
  6110.         db      '*.rar,*.zip,*.[zj],*.[bg7]z,*.[bg]zip,*.tar,*.t[ag]z,*.ar[cj],*.r[0-9][0-9],'
  6111.         db      '*.a[0-9][0-9],*.bz2,*.cab,*.msi,*.jar,*.lha,*.lzh,*.ha,*.ac[bei],*.pa[ck],'
  6112.         db      '*.rk,*.cpio,*.rpm,*.zoo,*.hqx,*.sit,*.ice,*.uc2,*.ain,*.imp,*.777,*.ufa,*.boa,'
  6113.         db      '*.bs[2a],*.sea,*.hpk,*.ddi,*.x2,*.rkv,*.[lw]sz,*.h[ay]p,*.lim,*.sqz,*.chz',0
  6114. highlight_group7:
  6115.         db      0
  6116.         db      16h, 36h, 0, 0
  6117.         db      '*.bak,*.tmp',0
  6118. highlight_group8:
  6119.         db      0
  6120.         db      17h, 37h, 0, 0
  6121.         db      '*.asm,*.inc',0
  6122. highlight_group9:
  6123.         db      10h
  6124.         db      1Fh, 3Fh, 0, 0
  6125.         db      '*',0
  6126.  
  6127. bConfirmDelete  db      1
  6128. bConfirmDeleteIncomplete db 0
  6129.  
  6130. FolderShortcuts dd      0,0,0,0,0,0,0,0,0,0
  6131.  
  6132. ; ‡¤¥áì § ª ­ç¨¢ îâáï ª®­ä¨£ãà æ¨®­­ë¥ ¤ ­­ë¥
  6133.  
  6134. bWasE0          db      0
  6135. ctrlstate       db      0
  6136. MemForImage     dd      0
  6137. restore_semicolon dd    0
  6138. bForHex         db      0
  6139.  
  6140. align   4
  6141. ; ‘®®¡é¥­¨¥ ® ®¡«®¬¥ ¯à¨ ¢ë¤¥«¥­¨¨ ¯ ¬ïâ¨
  6142. nomem_dlgdata:
  6143.         dd      2
  6144.         dd      -1
  6145.         dd      -1
  6146.         dd      12
  6147.         dd      2
  6148.         dd      1
  6149.         dd      1
  6150.         dd      aError
  6151.         rb      4
  6152.         dd      0
  6153.         dd      0
  6154.         dd      2
  6155. ; áâப  "No memory"
  6156.         dd      1
  6157.         dd      1,0,10,0
  6158.         dd      aNoMemory
  6159.         dd      1
  6160. ; ª­®¯ª  "Ok"
  6161.         dd      2
  6162.         dd      4,1,7,1
  6163.         dd      aOk
  6164.         dd      0xD
  6165.  
  6166. ; ¤¨ «®£ ª®¯¨à®¢ ­¨ï
  6167. copy_dlgdata:
  6168.         dd      1
  6169. .x      dd      -1
  6170. .y      dd      -1
  6171. .width  dd      ?
  6172. .height dd      4
  6173.         dd      4
  6174.         dd      2
  6175.         dd      aCopyCaption
  6176. .main_color db ?
  6177. .border_color db ?
  6178. .header_color db ?
  6179.         db      0
  6180.         dd      0
  6181.         dd      0
  6182.         dd      4
  6183. ; áâப  'Š®¯¨à®¢ âì "%s" ¢:'
  6184.         dd      1
  6185.         dd      1,0
  6186. .width2 dd      ?
  6187.         dd      0
  6188.         dd      CopySourceTextBuf
  6189.         dd      0
  6190. ; ¯®«¥ । ªâ¨à®¢ ­¨ï á ¨¬¥­¥¬ ä ©« /¯ ¯ª¨ ­ §­ ç¥­¨ï
  6191.         dd      3
  6192.         dd      1,1
  6193. .width3 dd      ?
  6194.         dd      1
  6195.         dd      CopyDestEditBuf
  6196. .flags0 dd      0
  6197. ; ª­®¯ª  "ª®¯¨à®¢ âì"
  6198. .copy_btn:
  6199.         dd      2
  6200. .copy_x1 dd     ?
  6201.         dd      3
  6202. .copy_x2 dd     ?
  6203.         dd      3
  6204.         dd      aCopy
  6205. .flags1 dd      18h
  6206. ; ª­®¯ª  "®â¬¥­¨âì"
  6207.         dd      2
  6208. .cnl_x1 dd      ?
  6209.         dd      3
  6210. .cnl_x2 dd      ?
  6211.         dd      3
  6212.         dd      aCancelB
  6213. .flags2 dd      8
  6214.  
  6215. mkdir_dlgdata:
  6216.         dd      1
  6217.         dd      -1, -1
  6218. .width  dd      ?
  6219. .height dd      4
  6220.         dd      4, 2
  6221.         dd      aMkDirCaption
  6222.         dd      ?
  6223.         dd      0
  6224.         dd      0
  6225.         dd      4
  6226. ; ‘âப  "‘®§¤ âì ¯ ¯ªã"
  6227.         dd      1
  6228.         dd      1,0,aMkDirLen,0
  6229.         dd      aMkDir
  6230.         dd      0
  6231. ; ¯®«¥ । ªâ¨à®¢ ­¨ï á ¨¬¥­¥¬ ᮧ¤ ¢ ¥¬®© ¯ ¯ª¨
  6232.         dd      3
  6233.         dd      1,1
  6234. .width2 dd      ?
  6235.         dd      1
  6236.         dd      CopyDestEditBuf
  6237. .flags0 dd      0xC
  6238. ; ª­®¯ª  "à®¤®«¦¨âì"
  6239. .cont_btn:
  6240.         dd      2
  6241. .cont_x1 dd     ?
  6242.         dd      3
  6243. .cont_x2 dd     ?
  6244.         dd      3
  6245.         dd      a_Continue
  6246. .flags1 dd      18h
  6247. ; ª­®¯ª  "®â¬¥­¨âì"
  6248.         dd      2
  6249. .cnl_x1 dd      ?
  6250.         dd      3
  6251. .cnl_x2 dd      ?
  6252.         dd      3
  6253.         dd      aCancelB
  6254. .flags2 dd      8
  6255.  
  6256. ; ¤¨ «®£ ¢ë¤¥«¥­¨ï/á­ïâ¨ï
  6257. mark_dlgdata:
  6258.         dd      1
  6259.         dd      -1, -1
  6260.         dd      37, 1
  6261.         dd      4, 2
  6262. .title  dd      ?
  6263.         dd      ?
  6264.         dd      0, 0
  6265.         dd      1
  6266. ; ¯®«¥ । ªâ¨à®¢ ­¨ï
  6267.         dd      3
  6268.         dd      1, 0, 35, 0
  6269.         dd      enter_string_buf
  6270. .flags  dd      ?
  6271.  
  6272. RetryOrCancelBtn:
  6273.         dd      aRetry
  6274.         dd      a_Cancel
  6275. DeleteOrKeepBtn:
  6276.         dd      a_Delete
  6277.         dd      aKeep
  6278. RetryOrIgnoreBtn:
  6279.         dd      aRetry
  6280.         dd      aIgnore
  6281. DeleteOrCancelBtn:
  6282.         dd      a_Delete
  6283.         dd      a_Cancel
  6284. DeleteErrorBtn:
  6285.         dd      aRetry
  6286.         dd      aSkip
  6287.         dd      aSkipAll
  6288.         dd      a_Cancel
  6289. ContinueBtn:
  6290.         dd      aContinue
  6291.  
  6292. if lang eq ru
  6293. aDeleteCaption          db      '“¤ «¥­¨¥',0
  6294. aConfirmDeleteText      db      '‚ë å®â¨â¥ 㤠«¨âì',0
  6295. aDeleteFolder           db      ' ¯ ¯ªã',0
  6296. aConfirmDeleteTextMax = $ - aConfirmDeleteText - 2
  6297. aDeleteFile             db      ' ä ©«',0
  6298. aCancelB                db      '[ Žâ¬¥­¨âì ]',0
  6299. aCancelBLength = $ - aCancelB - 1
  6300. aCopyCaption            db      'Š®¯¨à®¢ ­¨¥',0
  6301. aCopy                   db      '[ Š®¯¨à®¢ âì ]',0
  6302. aCopyLength = $ - aCopy - 1
  6303. a_Continue              db      '[ à®¤®«¦¨âì ]',0
  6304. a_ContinueLength = $ - a_Continue - 1
  6305. aCopy1                  db      'Š®¯¨à®¢ âì ',0
  6306. aCopy2                  db      ' ¢:',0
  6307. aError                  db      'Žè¨¡ª ',0
  6308. aContinue               db      'à®¤®«¦¨âì',0
  6309. aRetry                  db      '®¢â®à¨âì',0
  6310. a_Cancel                db      'Žâ¬¥­¨âì',0
  6311. a_Delete                db      '“¤ «¨âì',0
  6312. aSkip                   db      'à®¯ãáâ¨âì',0
  6313. aSkipAll                db      'à®¯ãáâ¨âì ¢á¥',0
  6314. error0msg               db      '‘âà ­­®... ¥â ®è¨¡ª¨',0
  6315. error1msg               db      '‘âà ­­®... ¥ ®¯à¥¤¥«¥­  ¡ §  ¨/¨«¨ à §¤¥« ¦ñá⪮£® ¤¨áª ',0
  6316. error2msg               db      '”ã­ªæ¨ï ­¥ ¯®¤¤¥à¦¨¢ ¥âáï ¤«ï ¤ ­­®© ä ©«®¢®© á¨á⥬ë',0
  6317. error3msg               db      '¥¨§¢¥áâ­ ï ä ©«®¢ ï á¨á⥬ ',0
  6318. error4msg               db      '‘âà ­­®... Žè¨¡ª  4',0
  6319. error5msg               db      '” ©« ­¥ ­ ©¤¥­',0
  6320. error6msg               db      '” ©« § ª®­ç¨«áï',0
  6321. error7msg               db      '‘âà ­­®... “ª § â¥«ì ¢­¥ ¯ ¬ï⨠¯à¨«®¦¥­¨ï',0
  6322. error8msg               db      '„¨áª § ¯®«­¥­',0
  6323. error9msg               db      '” ©«®¢ ï áâàãªâãà  à §àã襭 ',0
  6324. error10msg              db      '„®áâ㯠§ ¯à¥éñ­',0
  6325. error11msg              db      'Žè¨¡ª  ãáâனá⢠',0
  6326. error30msg              db      '¥¤®áâ â®ç­® ¯ ¬ïâ¨',0
  6327. error31msg              db      '” ©« ­¥ ï¥âáï ¨á¯®«­ï¥¬ë¬',0
  6328. error32msg              db      '‘«¨èª®¬ ¬­®£® ¯à®æ¥áᮢ',0
  6329. aUnknownError           db      '¥¨§¢¥áâ­ë© ª®¤ ®è¨¡ª¨: ',0
  6330. aCannotReadFolder       db      '¥ ¬®£ã ¯à®ç¨â âì ¯ ¯ªã',0
  6331. aRunError               db      'Žè¨¡ª  ¯à¨ § ¯ã᪥ ¯à®£à ¬¬ë:',0
  6332. aFileNameTooBig         db      '®«­®¥ ¨¬ï ä ©«  ᫨誮¬ ¤«¨­­®¥',0
  6333. aFolderNameTooBig       db      '®«­®¥ ¨¬ï ¯ ¯ª¨ ᫨誮¬ ¤«¨­­®¥',0
  6334. aCmdLineTooBig          db      'Š®¬ ­¤­ ï áâப  ¯à¥¢ë蠥⠣࠭¨æã OS ¢ 256 ᨬ¢®«®¢',0
  6335. aCannotCopyToSelf       db      '” ©« ­¥ ¬®¦¥â ¡ëâì ᪮¯¨à®¢ ­ ¢ á ¬®£® ᥡï',0
  6336. aCannotReadFile         db      '¥ ¬®£ã ¯à®ç¨â âì ä ©«',0
  6337. aIncompleteFile         db      'ë« ¯®«ã祭 ­¥¯®«­ë© ä ©«. “¤ «¨âì ¥£®?',0
  6338. aKeep                   db      'Žáâ ¢¨âì',0
  6339. aCannotWriteFile        db      '¥ ¬®£ã § ¯¨á âì ¢ ä ©«',0
  6340. aCannotDeleteFile       db      '¥ ¬®£ã 㤠«¨âì ä ©«',0
  6341. aCannotDeleteFolder     db      '¥ ¬®£ã 㤠«¨âì ¯ ¯ªã',0
  6342. aNotFolder              db      '­¥ ï¥âáï ¯ ¯ª®©',0
  6343. aIgnore                 db      'ˆ£­®à¨à®¢ âì',0
  6344. aMkDirCaption           db      '‘®§¤ ­¨¥ ¯ ¯ª¨',0
  6345. aMkDir                  db      '‘®§¤ âì ¯ ¯ªã',0
  6346. aMkDirLen = $ - aMkDir - 1
  6347. aCannotMakeFolder       db      '¥ ¬®£ã ᮧ¤ âì ¯ ¯ªã',0
  6348. aName                   db      3,'ˆ¬ï'
  6349. aSize                   db      6,' §¬¥à'
  6350. aDate                   db      4,'„ â '
  6351. aTime                   db      5,'‚६ï'
  6352. aCannotLoadDLL          db      '¥ ¬®£ã § £à㧨âì DLL',0
  6353. aInvalidDLL             db      '” ©« ­¥ ­ ©¤¥­ ¨«¨ ¨¬¥¥â ­¥¢¥à­ë© ä®à¬ â',0
  6354. aMissingExport          db      '¥®¡å®¤¨¬ ï äã­ªæ¨ï ­¥ ­ ©¤¥­ ',0
  6355. aInitFailed             db      'Žè¨¡ª  ¯à¨ ¨­¨æ¨ «¨§ æ¨¨',0
  6356. aIncompatibleVersion    db      '¥á®¢¬¥á⨬ ï ¢¥àá¨ï',0
  6357. aTables                 db      '’ ¡«¨æë',0
  6358. aSelect                 db      '®¬¥â¨âì',0
  6359. aDeselect               db      '‘­ïâì',0
  6360. else
  6361. aDeleteCaption          db      'Delete',0
  6362. aConfirmDeleteText      db      'Do you wish to delete',0
  6363. aDeleteFolder           db      ' the folder',0
  6364. aConfirmDeleteTextMax = $ - aConfirmDeleteText - 2
  6365. aDeleteFile             db      ' the file',0
  6366. aDelete                 db      ' Delete ',0
  6367. aDeleteLength = $ - aDelete - 1
  6368. aCancel                 db      ' Cancel ',0
  6369. aCancelLength = $ - aCancel - 1
  6370. aCancelB                db      '[ Cancel ]',0
  6371. aCancelBLength = $ - aCancelB - 1
  6372. aCopyCaption            db      'Copy',0
  6373. aCopy                   db      '[ Copy ]',0
  6374. aCopyLength = $ - aCopy - 1
  6375. a_Continue              db      '[ Continue ]',0
  6376. a_ContinueLength = $ - a_Continue - 1
  6377. aCopy1                  db      'Copy "',0
  6378. aCopy2                  db      '" to:',0
  6379. aError                  db      'Error',0
  6380. aContinue               db      'Continue',0
  6381. aRetry                  db      'Retry',0
  6382. a_Cancel                db      'Cancel',0
  6383. a_Delete                db      'Delete',0
  6384. aSkip                   db      'Skip',0
  6385. aSkipAll                db      'Skip all',0
  6386. error0msg               db      'Strange... No error',0
  6387. error1msg               db      'Strange... Hard disk base and/or partition not defined',0
  6388. error2msg               db      'The file system does not support this function',0
  6389. error3msg               db      'Unknown file system',0
  6390. error4msg               db      'Strange... Error 4',0
  6391. error5msg               db      'File not found',0
  6392. error6msg               db      'End of file',0
  6393. error7msg               db      'Strange... Pointer lies outside of application memory',0
  6394. error8msg               db      'Disk is full',0
  6395. error9msg               db      'File structure is destroyed',0
  6396. error10msg              db      'Access denied',0
  6397. error11msg              db      'Device error',0
  6398. error30msg              db      'Not enough memory',0
  6399. error31msg              db      'File is not executable',0
  6400. error32msg              db      'Too many processes',0
  6401. aUnknownError           db      'Unknown error code: ',0
  6402. aCannotReadFolder       db      'Cannot read folder',0
  6403. aRunError               db      'Cannot execute program:',0
  6404. aFileNameTooBig         db      'Full file name is too long',0
  6405. aFolderNameTooBig       db      'Full folder name is too long',0
  6406. aCmdLineTooBig          db      'Command line is too long (OS limit is 256 symbols)',0
  6407. aCannotCopyToSelf       db      'File cannot be copied onto itself',0
  6408. aCannotReadFile         db      'Cannot read file',0
  6409. aIncompleteFile         db      'Incomplete file was retrieved. Delete it?',0
  6410. aKeep                   db      'Keep',0
  6411. aCannotWriteFile        db      'Cannot write to the file',0
  6412. aCannotDeleteFile       db      'Cannot delete the file',0
  6413. aCannotDeleteFolder     db      'Cannot delete the folder',0
  6414. aNotFolder              db      'is not a folder',0
  6415. aIgnore                 db      'Ignore',0
  6416. aMkDirCaption           db      'Make folder',0
  6417. aMkDir                  db      'Create the folder',0
  6418. aMkDirLen = $ - aMkDir - 1
  6419. aCannotMakeFolder       db      'Cannot create folder',0
  6420. aName                   db      4,'Name'
  6421. aSize                   db      4,'Size'
  6422. aDate                   db      4,'Date'
  6423. aTime                   db      4,'Time'
  6424. aCannotLoadDLL          db      'Cannot load DLL',0
  6425. aInvalidDLL             db      'File is not found or invalid',0
  6426. aMissingExport          db      'Required function is not present',0
  6427. aInitFailed             db      'Initialization failed',0
  6428. aIncompatibleVersion    db      'Incompatible version',0
  6429. aTables                 db      'Tables',0
  6430. aSelect                 db      'Select',0
  6431. aDeselect               db      'Deselect',0
  6432. end if
  6433.  
  6434. aOk                     db      'OK',0
  6435. aNoMemory               db      'No memory!'
  6436. nullstr                 db      0
  6437. standard_dll_path:
  6438. libini_name             db      '/rd/1/dll/'
  6439. standard_dll_path_size = $ - standard_dll_path
  6440.                         db      'libini.obj',0
  6441. aStart                  db      'START',0
  6442. aLibInit                db      'lib_init',0
  6443. aVersion                db      'version',0
  6444. aIniGetInt              db      'ini.get_int',0
  6445. aIniGetStr              db      'ini.get_str',0
  6446. aIniEnumKeys            db      'ini.enum_keys',0
  6447.  
  6448. aConfirmations          db      'Confirmations',0
  6449. aConfirmDelete          db      'Delete',0
  6450. aConfirmDeleteIncomplete db     'DeleteIncomplete',0
  6451.  
  6452. aAssociations           db      'Associations',0
  6453. aMenu                   db      'Menu',0
  6454. aFolderShortcuts        db      'FolderShortcuts',0
  6455. aShortcut               db      'Shortcut'
  6456. .d                      db      '0',0
  6457.  
  6458. align 4
  6459. ini_import:
  6460. ini.get_int     dd      aIniGetInt
  6461. ini.get_str     dd      aIniGetStr
  6462. ini.enum_keys   dd      aIniEnumKeys
  6463.                 dd      0
  6464.  
  6465. virtual at 0
  6466. PanelMode:
  6467. ; up to 16 columns on one panel
  6468. .NumColumns     dd      ?
  6469. ; available column types:
  6470. COLUMN_TYPE_NONE = 0
  6471. COLUMN_TYPE_NAME = 1
  6472.         COLUMN_NAME_MARK = 10h          ; (reserved)
  6473.         COLUMN_NAME_NOPATH = 20h        ; (reserved)
  6474.         COLUMN_NAME_RIGHTALIGN = 40h    ; (reserved)
  6475. COLUMN_TYPE_SIZE = 2
  6476.         COLUMN_SIZE_COMMA = 10h         ; (reserved)
  6477. COLUMN_TYPE_PACKED_SIZE = 3             ; (reserved)
  6478. COLUMN_TYPE_DATE = 4
  6479. COLUMN_TYPE_TIME = 5
  6480. COLUMN_TYPE_DATETIME = 6                ; (reserved)
  6481. COLUMN_TYPE_DATETIME_CREATION = 7       ; (reserved)
  6482. COLUMN_TYPE_DATETIME_ACCESS = 8         ; (reserved)
  6483. COLUMN_TYPE_ATTRIBUTES = 9              ; (reserved)
  6484. COLUMN_TYPE_DESCRIPTION = 10            ; (reserved)
  6485. COLUMN_TYPE_OWNER = 11                  ; (reserved)
  6486. COLUMN_TYPE_NUMLINKS = 12               ; (reserved)
  6487. COLUMN_TYPE_CUSTOM = 13                 ; (reserved)
  6488. .ColumnTypes    rb      16
  6489.  
  6490. .ColumnWidths   rb      16
  6491. .bFullScreen    db      ?               ; (reserved)
  6492. .bAlignExtensions db    ?
  6493.                 rb      2
  6494. .size = $
  6495. end virtual
  6496.  
  6497. align 4
  6498. column_headers:
  6499.         dd      nullstr
  6500.         dd      aName
  6501.         dd      aSize
  6502.         dd      nullstr
  6503.         dd      aDate
  6504.         dd      aTime
  6505. draw_column_proc:
  6506.         dd      draw_empty_column
  6507.         dd      draw_name_column
  6508.         dd      draw_size_column
  6509.         dd      -1
  6510.         dd      draw_date_column
  6511.         dd      draw_time_column
  6512. colmodes:
  6513. ; ०¨¬ 0 : NM,SC,D
  6514.         dd      3
  6515.         db      COLUMN_TYPE_NAME+COLUMN_NAME_MARK, COLUMN_TYPE_SIZE+COLUMN_SIZE_COMMA
  6516.                 db      COLUMN_TYPE_DATE, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  6517.         db      0, 10, 8
  6518.                 times 13 db 0
  6519.         db      0, 1
  6520.                 times 2 db 0
  6521. ; ०¨¬ 1 : N,N,N
  6522.         dd      3
  6523.         db      COLUMN_TYPE_NAME, COLUMN_TYPE_NAME, COLUMN_TYPE_NAME
  6524.                 times 13 db 0
  6525.         times 16 db 0
  6526.         db      0, 1
  6527.                 times 2 db 0
  6528. ; ०¨¬ 2 : N,N
  6529.         dd      2
  6530.         db      COLUMN_TYPE_NAME, COLUMN_TYPE_NAME
  6531.                 times 14 db 0
  6532.         times 16 db 0
  6533.         db      0, 0
  6534.                 times 2 db 0
  6535. ; ०¨¬ 3 : N,S,D,T
  6536.         dd      4
  6537.         db      COLUMN_TYPE_NAME, COLUMN_TYPE_SIZE, COLUMN_TYPE_DATE, COLUMN_TYPE_TIME
  6538.                 times 12 db 0
  6539.         db      0, 6, 8, 5
  6540.                 times 12 db 0
  6541.         db      0, 1
  6542.                 times 2 db 0
  6543. ; ०¨¬ 4 : N,S
  6544.         dd      2
  6545.         db      COLUMN_TYPE_NAME, COLUMN_TYPE_SIZE
  6546.                 times 14 db 0
  6547.         db      0, 6
  6548.                 times 14 db 0
  6549.         db      0, 0
  6550.                 times 2 db 0
  6551. ; ०¨¬ 5 : N,S,P,DM,DC,DA,A
  6552. ; ०¨¬ 6 : N,Z
  6553. ; ०¨¬ 7 : N,S,Z
  6554. ; ०¨¬ 8 : N,S,O
  6555. ; ०¨¬ 9 : N,S,LN
  6556.  
  6557. execinfo:
  6558.         dd      7
  6559.         dd      0
  6560. execparams dd   0
  6561.         dd      0
  6562.         dd      0
  6563.         db      0
  6564. execptr dd      ?
  6565.  
  6566. IncludeIGlobals
  6567.  
  6568. i_end:
  6569.  
  6570. IncludeUGlobals
  6571.  
  6572. execdata rb     1024
  6573. execdataend:
  6574.         align   4
  6575. attrinfo.attr   rb      40
  6576.  
  6577. panel1_data:
  6578. panel1_left     dd      ?
  6579. panel1_top      dd      ?
  6580. panel1_width    dd      ?
  6581. panel1_height   dd      ?
  6582. panel1_index    dd      ?
  6583. panel1_start    dd      ?
  6584. panel1_colsz    dd      ?
  6585. panel1_colst    dd      ?
  6586. panel1_sortmode db      ?
  6587.                 rb      3
  6588. panel1_nfa      dd      ?
  6589. panel1_numfiles dd      ?
  6590. panel1_files    dd      ?
  6591. panel1_colmode  dd      ?
  6592. panel1_colwidths rd     16+1
  6593. panel1_total_num dd     ?
  6594. panel1_total_size dq    ?
  6595. panel1_selected_num dd ?
  6596. panel1_selected_size dq ?
  6597. panel1_dir      rb      1024
  6598.  
  6599. panel2_data:
  6600. panel2_left     dd      ?
  6601. panel2_top      dd      ?
  6602. panel2_width    dd      ?
  6603. panel2_height   dd      ?
  6604. panel2_index    dd      ?
  6605. panel2_start    dd      ?
  6606. panel2_colsz    dd      ?
  6607. panel2_colst    dd      ?
  6608. panel2_sortmode db      ?
  6609.                 rb      3
  6610. panel2_nfa      dd      ?
  6611. panel2_numfiles dd      ?
  6612. panel2_files    dd      ?
  6613. panel2_colmode  dd      ?
  6614. panel2_colwidths rd     16+1
  6615. panel2_total_num dd     ?
  6616. panel2_total_size dq    ?
  6617. panel2_selected_num  dd ?
  6618. panel2_selected_size dq ?
  6619. panel2_dir      rb      1024
  6620.  
  6621. ;console_data    rb      max_width*max_height*2
  6622.  
  6623. nomem_dlgsavearea       rb      (12+4)*(3+3)*2
  6624.  
  6625. cur_header      rb      max_width
  6626. tmp             dd      ?
  6627.  
  6628. skinh           dd      ?
  6629. std_colors      rd      10
  6630.  
  6631. min_y           dd      ?
  6632. max_y           dd      ?
  6633. min_x           dd      ?
  6634. max_x           dd      ?
  6635. used_width      dd      ?
  6636. used_height     dd      ?
  6637.  
  6638. wnd_width       dd      ?
  6639. wnd_height      dd      ?
  6640.  
  6641. column_left     dd      ?
  6642. column_top      dd      ?
  6643. column_width    dd      ?
  6644. column_height   dd      ?
  6645. column_index    dd      ?
  6646. last_column_index dd    ?
  6647.  
  6648. scrpos          dq      ?
  6649. viewer_right_side dq    ?
  6650.  
  6651. saved_file_name:
  6652. procinfo        rb      1024
  6653. lower_file_name = procinfo + 512
  6654.  
  6655. app_path        rb      1100
  6656.  
  6657. error_msg       rb      128
  6658.  
  6659. prev_dir        rb      1024
  6660.  
  6661. driveinfo       rb      32+304
  6662. tmpname         rb      32
  6663.  
  6664. screens         dd      ?
  6665. num_screens     dd      ?
  6666. active_screen_vtable dd ?
  6667. active_screen_data dd   ?
  6668.  
  6669. aConfirmDeleteTextBuf   rb      aConfirmDeleteTextMax + 1
  6670. CopySourceTextBuf       rb      512
  6671. CopyDestEditBuf         rb      12+512+1
  6672. .length = $ - CopyDestEditBuf - 13
  6673.  
  6674. enter_string_buf        rb      12+512+1
  6675.  
  6676. bMemForImageValidData   db      ?
  6677.  
  6678. align 4
  6679. tolower_table   rb      256
  6680. layout          rb      128
  6681.  
  6682. copy_buffer_size = 65536
  6683. copy_buffer     rb      copy_buffer_size
  6684.  
  6685. ; data for directory delete
  6686. ; If directory nested level is >1024, then its full name is too big,
  6687. ; so we see the overflow when creating full name (we check for this!)
  6688. del_dir_stack   rd      1024
  6689. del_dir_stack_ptr dd    ?
  6690. del_dir_query_size = 32
  6691. del_dir_query_area rb   32+304*del_dir_query_size
  6692.  
  6693. label copy_dir_stack dword at del_dir_stack
  6694. label copy_dir_stack_ptr dword at del_dir_stack_ptr
  6695. copy_dir_query_size = del_dir_query_size
  6696. copy_dir_query_area = del_dir_query_area
  6697. del_bSkipAll    db      ?       ; for directory errors
  6698. label copy_bSkipAll byte at del_bSkipAll
  6699. copy_bSkipAll2  db      ?       ; for file read/write errors
  6700.  
  6701. bEndSlash       db      ?
  6702. bDestIsFolder   db      ?
  6703. bNeedRestoreName db     ?
  6704.  
  6705. ; stack
  6706.         align   4
  6707.         rb      512
  6708. stacktop:
  6709.  
  6710. mem:
  6711.