Subversion Repositories Kolibri OS

Rev

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

  1. ;************************************************************************
  2. ; v.015 08.03.2010
  3. ; Support for OpenDialog - Open and Save
  4. ; Some optimization
  5. ;************************************************************************
  6. ; v.014 05.02.2010
  7. ;
  8. ; PageUp, PageDown      - áâà ­¨æ  ¢¢¥àå/¢­¨§
  9. ; Ctrl+UP, Ctrl+Down    - ¯à®ªàã⪠ áâà ­¨æë ­  áâப㠢¢¥àå/¢­¨§ ¡¥§ ᬥ饭¨ï ªãàá®à 
  10. ; Home,End              - ¢ ­ ç «®/ª®­¥æ áâப¨
  11. ; Ctrl+Home, Ctrl+End   - ª ¯¥à¢®¬ã/¯®á«¥¤­¥¬ã ¡ ©âã ä ©« 
  12. ; Left, Right           - ªãàá®à ¢«¥¢®/¢¯à ¢®
  13. ; Ctrl+O                - ®âªàëâì ä ©«
  14. ; Ctrl+S                - á®åà ­¨âì
  15. ; Ctrl+F                - ¯®¨áª (+Tab ¤«ï OptionBox)
  16. ; Ctrl+G                - ¯¥à¥å®¤ ­  ᬥ饭¨¥ (+Tab ¤«ï OptionBox)
  17. ; Ctrl+B                - ¢ë¤¥«¨âì ¡«®ª
  18. ; ESC                   - á­ïâì ¢ë¤¥«¥­¨¥
  19. ; Ctrl+C                - ª®¯¨à®¢ âì ¡«®ª
  20. ; Ctrl+V                - ¢áâ ¢¨âì ¢ ¢ë¤¥«¥­­ãî ®¡« áâì
  21. ; Ctrl+X                - ¢ë१ âì ¢ë¤¥«¥­­ãî ®¡« áâì (¢ ¡ãä¥à)
  22. ; n                     - ¨­¢¥àâ¨à®¢ âì ¡ ©â ¯®¤ ªãàá®à®¬
  23. ; Ins                   - ०¨¬ § ¬¥­ë/¢áâ ¢ª¨ (¯® 㬮«ç ­¨î)
  24. ;   Del                 - ¢ ०¨¬¥ ¢áâ ¢ª¨ - 㤠«¨âì ¡ ©â ¯®¤ ªãàá®à®¬
  25. ;   BackSpace           - ¢ ०¨¬¥ ¢áâ ¢ª¨ - 㤠«¨âì ¡ ©â ¯¥à¥¤ ªãàá®à®¬
  26. ; ~                     - ᬥ­  ª®¤¨à®¢ª¨ (cp866,cp1251)
  27. ; Shift+~               - ᬥ­  ª®¤¨à®¢ª¨ (cp866 ¨«¨ cp1251,koi8-r)
  28.  
  29. ;  ¬ïâì ¯¥à¥à á¯à¥¤¥«ï¥âáï ­  㢥«¨ç¥­¨¥ i umen'shenie.
  30. ; ” ©« § £à㦠¥âáï 楫¨ª®¬.
  31.  
  32. ; Œ ªà®áë load_lib.mac, editbox_ex ¨ ¡¨¡«¨®â¥ªã box_lib.obj ᮧ¤ «¨:
  33. ; <Lrz> - Alexey Teplov / €«¥ªá¥© ’¥¯«®¢
  34. ; Mario79, Mario - Marat Zakiyanov / Œ à â ‡ ª¨ï­®¢
  35. ; Diamondz - Evgeny Grechnikov / …¢£¥­¨© ƒà¥ç­¨ª®¢ ¨ ¤à.
  36. ;
  37. ; staper@inbox.ru
  38. ; babalbes@yandex.ru
  39.  
  40. use32
  41.         org     0x0
  42.         db      'MENUET01'
  43.         dd      0x1
  44.         dd      START   ;program start
  45.         dd      I_END   ;program image  size
  46.         dd      (D_END+0x600) and not 3 ;required amount of memory
  47.         dd      (D_END+0x600) and not 3 ;stack
  48.         dd      0x0     ;buf_cmd_lin
  49.         dd      cur_dir_path
  50.  
  51. _title  equ 'HeEd 0.15'
  52.  
  53. include 'lang.inc'
  54. include '../../../macros.inc'
  55. include '../../libraries/box_lib/trunk/box_lib.mac'
  56. include '../../libraries/box_lib/load_lib.mac'
  57.  
  58. @use_library
  59.  
  60. times   16      dd      0
  61.  
  62. frgrd_color     equ     0xfefefe
  63. bkgrd_color     equ     0x000000
  64. kursred_color   equ     0x0039ff
  65. kurstxt_color   equ     0x708090
  66. text_color      equ     0xaaaaaa
  67.  
  68. panel_clr1      equ     0xe9e9e2
  69. panel_clr2      equ     0x8b8b89
  70. panel_clr3      equ     0x777777;eaeae3
  71.  
  72.  
  73. palitra:
  74. .1      dd      frgrd_color,bkgrd_color ;梥⠭¥¢ë¤¥«¥­­®£® ᨬ¢®« 
  75. .2      dd      frgrd_color,text_color  ;«¥¢ë©,¯à ¢ë© á⮫¡æë,ç áâì ­¨¦­¥© áâப¨
  76. .3      dd      kursred_color,frgrd_color       ;ªãàá®à 
  77. .4      dd      kurstxt_color,bkgrd_color       ;ªãàá®à  ¢ ⥪á⮢®© ®¡« áâ¨
  78. .5      dd      panel_clr1,not  text_color      ;­¨¦­ïï ¯ ­¥«ì
  79.  
  80. FIRST_HEX equ 0*65536+24
  81. scroll_width_size equ 15
  82.  
  83. struct  f70
  84.         func_n  rd 1
  85.         param1  rd 1
  86.         param2  rd 1
  87.         param3  rd 1
  88.         param4  rd 1
  89.         rezerv  rb 1
  90.         name    rd 1
  91. ends
  92.  
  93. START:
  94.         mcall   68,11
  95.  
  96. load_libraries l_libs_start,end_l_libs
  97.  
  98. ;OpenDialog     initialisation
  99.         push    dword OpenDialog_data
  100.         call    [OpenDialog_Init]
  101.  
  102.         mov     edi,filename_area
  103.         mov     esi,start_temp_file_name
  104.         xor     eax,eax
  105.         cld
  106. @@:
  107.         lodsb
  108.         stosb
  109.         test    eax,eax
  110.         jnz     @b
  111.  
  112.         mcall   40,0x27
  113.  
  114.         mcall   68,12,32*1024   ;áâà ­¨ç­ë© ¡ãä¥à
  115.         mov     [screen_table],eax
  116.         mcall   68,12,4*1024
  117. ;       mov     [blocks_table],eax
  118.         mov     [file_buffer],eax
  119. ;       mov     esi,eax
  120. ;       mcall   68,12,4*1024
  121. ;       mov     [esi],eax
  122. ;       mov     [blocks_counter],1
  123.  
  124. ;       mcall   68,12,1024      ;Procinfo area for function 9 in MenuBar
  125. ;       mov     [menu_data_1.procinfo],eax
  126. ;       mov     [menu_data_2.procinfo],eax
  127.         mcall   68,12,1024
  128.         mov     [copy_buf],eax
  129.  
  130.  
  131.         ;à §¬¥à ⥪ã饣® ¯ãâ¨
  132.         mov     esi,cur_dir_path
  133. @@:
  134.         cmp     byte [esi],0
  135.         je      @f
  136.         inc     esi
  137.         jmp     @b
  138. @@:
  139.         sub     esi,cur_dir_path
  140.         mov     [edit1.pos],esi
  141.         mov     [edit1.size],esi
  142.  
  143.         ;®¡é¥á¨á⥬­ë¥ ª« ¢¨è¨ ¤«ï Shift+ªãàá®àë
  144. ;       mcall   66,4,75,1
  145. ;       mcall   66,,77
  146. ;       mcall   66,,72
  147. ;       mcall   66,,80
  148.  
  149.         call    ready_screen_buffer
  150. ;       jmp     open_file
  151.  
  152. redraw_all:
  153.         call    draw_window_1
  154. still:
  155.         mcall   10
  156.  
  157.         cmp     eax,6
  158.         je      mouse
  159.         dec     al
  160.         jz      redraw_all
  161.         dec     al
  162.         jz      key
  163.         dec     al
  164.         jz      button
  165.         jmp     still
  166.  
  167. red:    call    ready_screen_buffer
  168.         call    main_area
  169.         jmp     still
  170.  
  171. draw_window_1:
  172.         call    start_draw
  173.         call    draw_window
  174.         call    show_file_size
  175.         call    show_codepage
  176.         call    show_insert
  177.         call    ready_screen_buffer
  178.         call    main_area
  179.         ret
  180.  
  181. key:
  182.         mcall   2
  183.         dec     al
  184.         jz      still
  185.         dec     al
  186.         jz      key.syst
  187.         cmp     ah,2
  188.         je      Ctrl_B  ;¢ë¤¥«¨âì ¡«®ª
  189.         cmp     ah,3
  190.         je      Ctrl_C  ;copy
  191.         cmp     ah,6
  192.         je      Ctrl_F  ;find
  193.         cmp     ah,7
  194.         je      Ctrl_G  ;go to
  195.         cmp     ah,8
  196.         je      BackSpace
  197.         cmp     ah,15
  198.         je      open_dialog ;open_file ;Ctrl+O
  199.         cmp     ah,19
  200.         je      open_dialog_save ;save_file ;Ctrl+S
  201.         cmp     ah,22
  202.         je      Ctrl_V  ;paste
  203.         cmp     ah,24
  204.         je      Ctrl_X  ;cut
  205.         cmp     ah,27
  206.         je      ESC
  207.         cmp     ah,48
  208.         jb      still
  209.         cmp     ah,57
  210.         jbe     input_from_keyboard     ;0-9
  211.         cmp     ah,65
  212.         jb      still
  213.         cmp     ah,70
  214.         jbe     input_from_keyboard     ;A-F
  215.         cmp     ah,81
  216.         jne     @f
  217.         call    Ctrl_DOWN
  218.         jmp     red
  219. @@:
  220.         cmp     ah,82
  221.         jne     @f
  222.         call    Ctrl_UP
  223.         jmp     red
  224. @@:
  225.         cmp     ah,84
  226.         jne     @f
  227.         call    Ctrl_HOME
  228.         jmp     red
  229. @@:
  230.         cmp     ah,85
  231.         je      Ctrl_END
  232.         cmp     ah,96
  233.         je      change_codepage ;⨫줠, cp866 - cp1251
  234.         cmp     ah,97
  235.         jb      still
  236.         cmp     ah,102
  237.         jbe     input_from_keyboard ;a-f
  238.         cmp     ah,126
  239.         jne     @f
  240.         xor     ah,ah
  241.         jmp     change_codepage ;Shift+~, koi8-r
  242. @@:
  243.         cmp     ah,110
  244.         je      invert_byte ;n
  245.         cmp     ah,176
  246.         jne     @f
  247.         call    LEFT
  248.         jmp     red
  249. @@:
  250.         cmp     ah,177
  251.         jne     @f
  252.         call    DOWN
  253.         jmp     red
  254. @@:
  255.         cmp     ah,178
  256.         je      UP
  257.         cmp     ah,179
  258.         je      RIGHT
  259.         cmp     ah,180
  260.         jne     @f
  261.         call    HOME
  262.         jmp     red
  263. @@:
  264.         cmp     ah,181
  265.         je      END_
  266.         cmp     ah,182
  267.         je      DEL
  268.         cmp     ah,183
  269.         je      PGDN
  270.         cmp     ah,184
  271.         je      PGUP
  272.         cmp     ah,185
  273.         je      Insert
  274.         jmp     still
  275. .syst:
  276.         cmp     ah,72
  277.         cmp     ah,75
  278.         cmp     ah,77
  279.         cmp     ah,80
  280.         jmp     still
  281.  
  282. button:
  283.         mcall   17
  284.         dec     ah
  285.         jnz     still
  286.         jmp     close_prog
  287.  
  288. align   4
  289. mouse:
  290.         mcall   37,7
  291.         test    eax,eax
  292.         jz      .menu_bar_1;.mouse
  293.         bt      eax,15
  294.         jc      @f      ;®¡à ¡®âª  ª®«ñᨪ  ¬ëè¨
  295.         mov     ecx,eax
  296.         shl     ecx,2
  297. .1:
  298.         call    Ctrl_DOWN
  299.         loop    .1
  300.         jmp     red
  301. @@:
  302.         xor     ecx,ecx
  303.         sub     cx,ax
  304.         shl     cx,2
  305. .2:
  306.         call    Ctrl_UP
  307.         loop    .2
  308.         jmp     red
  309.  
  310. .menu_bar_1:
  311.         call    .set_mouse_flag
  312. @@:
  313.         push    dword menu_data_1       ;mouse event for Menu 1
  314.         call    [menu_bar_mouse]
  315.         cmp     [menu_data_1.click],dword 1
  316.         jne     .menu_bar_2
  317.         cmp     [menu_data_1.cursor_out],dword 0
  318.         jne     .analyse_out_menu_1
  319.         jmp     .menu_bar_1
  320. .menu_bar_2:
  321.         push    dword menu_data_2
  322.         call    [menu_bar_mouse]
  323.         cmp     [menu_data_2.click],dword 1
  324.         jne     .menu_bar_3
  325.         cmp     [menu_data_2.cursor_out],dword 0
  326.         jne     .analyse_out_menu_2
  327.         jmp     .menu_bar_1
  328. .menu_bar_3:
  329.         push    dword menu_data_3
  330.         call    [menu_bar_mouse]
  331.         cmp     [menu_data_3.click],dword 1
  332.         jne     .scroll_bar
  333.         cmp     [menu_data_3.cursor_out],dword 0
  334.         jne     .analyse_out_menu_3
  335.         jmp     .menu_bar_1
  336.  
  337. .set_mouse_flag:
  338.         xor     eax,eax
  339.         inc     eax
  340.         mov     [menu_data_1.get_mouse_flag],eax
  341.         mov     [menu_data_2.get_mouse_flag],eax
  342.         mov     [menu_data_3.get_mouse_flag],eax
  343.         ret
  344.  
  345. .analyse_out_menu_1:
  346.         cmp     [menu_data_1.cursor_out],dword 1
  347.         je      open_dialog
  348.         cmp     [menu_data_1.cursor_out],dword 2
  349.         je      open_dialog_save        ;save_file
  350.         cmp     [menu_data_1.cursor_out],dword 3
  351.         je      close_prog
  352.         jmp     still
  353.  
  354. .analyse_out_menu_2:
  355.         cmp     [menu_data_2.cursor_out],dword 1
  356.         jne     @f
  357.         add     [bytes_per_line],4
  358.         jmp     redraw_all
  359. @@:
  360.         cmp     [menu_data_2.cursor_out],dword 2
  361.         jne     @f
  362.         add     [bytes_per_line],8
  363.         jmp     redraw_all
  364. @@:
  365.         cmp     [menu_data_2.cursor_out],dword 3
  366.         jne     @f
  367.         cmp     [bytes_per_line],4
  368.         je      still
  369.         sub     [bytes_per_line],4
  370.         jmp     redraw_all
  371. @@:
  372.         cmp     [menu_data_2.cursor_out],dword 4
  373.         jne     still
  374.         cmp     [bytes_per_line],8
  375.         jbe     still
  376.         sub     [bytes_per_line],8
  377.         jmp     redraw_all
  378.  
  379. .analyse_out_menu_3:    ;analyse result of Menu 2
  380.         cmp     [menu_data_3.cursor_out],dword 1
  381.         jne     still
  382.         call    create_help_window
  383.         jmp     still
  384.  
  385. .scroll_bar:
  386. ;       mcall   37,2
  387. ;       test    eax,eax
  388. ;       jnz     @f
  389. ;       btr     [flags],5
  390. ;       btr     [flags],7
  391. ;       jmp     still
  392.  
  393. .mouse:
  394. .vertical:
  395.         mcall   37,2
  396.         test    eax,eax
  397.         jnz     @f
  398.         btr     [flags],5
  399.         btr     [flags],7
  400.         jmp     still
  401. @@:
  402.         bt      [flags],5
  403.         jc      @f
  404.         bt      [flags],7
  405.         jc      .horizontal_0
  406.  
  407.         mcall   37,1
  408.         shr     eax,16
  409.         cmp     ax,[scroll_bar_data_vertical.start_x]
  410.         jb      .horizontal
  411.         sub     ax,[scroll_bar_data_vertical.start_x]
  412.         cmp     ax,[scroll_bar_data_vertical.size_x]
  413.         jge     still
  414.  
  415.  
  416. @@:
  417. ;       cmp     [scroll_bar_data_vertictal.delta2],0
  418.         ;       jne     .horizontal
  419.  
  420. ;       mov     eax,[scroll_bar_data_vertical.max_area]
  421. ;       cmp     eax,[scroll_bar_data_vertical.cur_area]
  422. ;       jbe     .horizontal
  423.  
  424.         ;       mouse event for Vertical ScrollBar
  425.         mov     edi,[screen_table]
  426.         mov     edi,[edi]
  427.         cmp     edi,[file_size]
  428.         jae     still
  429.         push    dword scroll_bar_data_vertical  ;draw for Vertical ScrollBar
  430.         call    [scrollbar_ver_mouse]
  431.  
  432.         xor     edx,edx
  433.         mov     ebx,[scroll_bar_data_vertical.max_area]
  434.         sub     ebx,[scroll_bar_data_vertical.cur_area]
  435.         mov     eax,[file_size]
  436.         mov     esi,[bytes_per_line]
  437.         mov     ecx,[scroll_bar_data_vertical.position]
  438.         div     esi
  439.         xor     edx,edx
  440.         mul     ecx
  441.         div     ebx
  442.         mul     esi
  443.         cmp     eax,[file_size]
  444.         jng     @f
  445.         sub     eax,esi;[bytes_per_line]
  446. @@:
  447.         mov     ecx,[cursor]
  448.         inc     ecx
  449.         shr     ecx,1
  450.         add     ecx,eax
  451. @@:
  452.         cmp     ecx,[file_size]
  453.         jle     @f
  454.         sub     ecx,esi;[bytes_per_line]
  455.         sub     eax,esi;[bytes_per_line]
  456.         jmp     @b
  457. @@:
  458.         mov     [begin_offset],eax
  459.         bts     [flags],5
  460.  
  461.         mov     eax,scroll_bar_data_vertical.redraw
  462.         xor     ebx,ebx
  463. ;       cmp     [eax],ebx
  464. ;       je      @f
  465.         mov     [eax],ebx
  466.         jmp     red
  467. ;@@:
  468. ;       cmp     [scroll_bar_data_vertical.delta2],0
  469. ;       jne     still
  470. .horizontal:
  471.         mov     eax,[scroll_bar_data_horizontal.max_area]
  472.         cmp     eax,[scroll_bar_data_horizontal.cur_area]
  473.         jbe     .other
  474.  
  475.         mcall   37,1
  476.         cmp     ax,[scroll_bar_data_horizontal.start_y]
  477.         jb      still
  478.         sub     ax,[scroll_bar_data_horizontal.start_y]
  479.         cmp     ax,[scroll_bar_data_horizontal.size_y]
  480.         jge     still
  481.  
  482.         ; mouse event for Horizontal ScrollBar
  483. .horizontal_0:
  484. ;       mcall   37,2
  485. ;       test    eax,eax
  486. ;       jnz     @f
  487. ;       btr     [flags],5
  488. ;       btr     [flags],7
  489. ;       jmp     still
  490. ;@@:;   bt      [flags],7
  491. ;       jc      @f
  492.  
  493. ;       mcall   37,1
  494. ;       shr     eax,16
  495. ;       cmp     ax,[scroll_bar_data_vertical.start_x]
  496. ;       jb      .horizontal
  497. ;       sub     ax,[scroll_bar_data_vertical.start_x]
  498. ;       cmp     ax,[scroll_bar_data_vertical.size_x]
  499. ;       jge     still
  500. ;@@:
  501.         ; mouse event for Vertical ScrollBar
  502.  
  503.         mov     eax,[ready_screen_buffer.string_size]
  504.         shr     eax,1
  505.         cmp     eax,[len_str_scr]
  506.         jle     still
  507.         push    dword scroll_bar_data_horizontal        ;draw for Horizontal ScrollBar
  508.         call    [scrollbar_hor_mouse]
  509.  
  510.         xor     edx,edx
  511.         mov     eax,[scroll_bar_data_horizontal.position]
  512.         mov     ebx,[ready_screen_buffer.string_size]
  513.         shr     ebx,1
  514.         mul     ebx
  515.         mov     ebx,[scroll_bar_data_horizontal.max_area]
  516.         sub     ebx,[scroll_bar_data_horizontal.cur_area]
  517.         div     ebx
  518.         mov     [beg_str_scr],eax
  519.         add     eax,[len_str_scr]
  520.         mov     ebx,[ready_screen_buffer.string_size]
  521.         shr     ebx,1
  522.         cmp     eax,ebx
  523.         jle     @f
  524.         mov     eax,[ready_screen_buffer.string_size]
  525.         shr     eax,1
  526.         sub     eax,[len_str_scr]
  527.         mov     [beg_str_scr],eax
  528. @@:
  529.         mov     eax,scroll_bar_data_horizontal.redraw
  530.         xor     ebx,ebx
  531.         cmp     [eax],ebx
  532.         je      .other
  533.         mov     [eax],ebx
  534. ;       call    draw_window
  535.         call    main_area
  536.         bts     [flags],7
  537.         jmp     still
  538. .other:
  539. ;       cmp     [scroll_bar_data_vertical.delta2],0
  540. ;       jne     still
  541. ;       cmp     [scroll_bar_data_horizontal.delta2],0
  542. ;       jne     still
  543.         jmp     still
  544.  
  545.  
  546.  
  547. ;------------------------------------------------
  548.  
  549. ;------------------------------------------------
  550.  
  551.  
  552. align   4
  553. ready_screen_buffer:
  554.         mov     [.fl],0
  555.         mov     esi,[screen_table]
  556.         add     esi,4
  557.         mov     ecx,[number_strings]
  558.         mov     [.number_strings],cx
  559.         push    [cursor]
  560.         pop     [.cursor]
  561.         push    [file_size]
  562.         pop     [.length_to_end]
  563.         mov     edi,[begin_offset]
  564.  
  565.         mov     [.shblock_end],0
  566.         mov     [.shblock_beg],0
  567.         bt      [flags],8
  568.         jnc     @f
  569.         mov     eax,[shblock_beg]
  570.         add     eax,[file_buffer]
  571.         mov     [.shblock_beg],eax
  572.         mov     eax,[shblock_end]
  573.         add     eax,[file_buffer]
  574.         mov     [.shblock_end],eax
  575. @@:
  576.         mov     [.offset],edi
  577.         sub     [.length_to_end],edi
  578.         jz      .pre_next_string
  579.         add     edi,[file_buffer]
  580.  
  581. .next_string:
  582.         mov     word [esi],0x2020
  583.         add     esi,2
  584.         mov     eax,0x20302030
  585.         mov     dword [esi],eax
  586.         mov     dword [esi+4],eax
  587.         mov     dword [esi+8],eax
  588.         mov     dword [esi+12],eax
  589.         push    edi
  590.         mov     ecx,8
  591.         mov     edi,[.offset]
  592. @@:
  593.         mov     eax,edi
  594.         and     eax,0xF
  595.         cmp     al,10
  596.         sbb     al,69h
  597.         das
  598.         mov     [esi+ecx*2-2],al
  599.         shr     edi,4
  600.         loop    @b
  601.         mov     word [esi+16],0x203a    ;¤¢®¥â®ç¨¥
  602.         mov     eax,[bytes_per_line]
  603.         add     [.offset],eax
  604.         mov     [.string_size],2+4*4+4+2
  605.         add     esi,4*4+4+2
  606.         pop     edi
  607.         mov     [.temp],edi
  608.         push    [.cursor]
  609.         pop     [.cursor_temp]
  610.  
  611.         ;hex    §­ ç¥­¨ï
  612.         mov     dword [esi-4],0x20202020
  613.  
  614.         mov     edx,[bytes_per_line]
  615. .next_group:
  616.         mov     ecx,[group_bytes]
  617.  
  618. .next_byte:
  619.         mov     al,[edi]
  620.         ror     ax,4
  621.         cmp     al,10
  622.         sbb     al,69h
  623.         das
  624.         mov     [esi],al
  625.         mov     byte [esi+1],0x20
  626.         cmp     edi,[.shblock_end]
  627.         ja      @f
  628.         cmp     edi,[.shblock_beg]
  629.         jl      @f
  630.         mov     byte [esi+1],(0x20+3*4)
  631. @@:
  632.         dec     [.cursor]
  633.         jnz     @f
  634.         mov     byte [esi+1],(0x20+2*4)
  635. @@:
  636.         shr     ax,16-4
  637.         cmp     al,10
  638.         sbb     al,69h
  639.         das
  640.         mov     [esi+2],al
  641.         mov     byte [esi+3],0x20
  642.         cmp     edi,[.shblock_end]
  643.         ja      @f
  644.         cmp     edi,[.shblock_beg]
  645.         jl      @f
  646.         mov     byte [esi+3],(0x20+3*4)
  647. @@:
  648.         dec     [.cursor]
  649.         jnz     @f
  650.         mov     byte [esi+3],(0x20+2*4)
  651. @@:
  652.         mov     word [esi+4],0x2020
  653.         add     [.string_size],6
  654.         add     esi,6
  655.         inc     edi
  656.         dec     [.length_to_end]
  657.         jz      .to_null
  658.         dec     ecx
  659.         jz      @f
  660.         dec     edx
  661.         jnz     .next_byte
  662.         jz      .ascii
  663. @@:
  664.         mov     word [esi],0x2020
  665.         add     esi,2
  666.         add     [.string_size],2
  667.         dec     edx
  668.         jnz     .next_group;byte
  669.         sub     esi,2
  670.         sub     [.string_size],2
  671.         jz      .ascii
  672. .ascii:
  673.         push    edi
  674.         mov     edi,[.temp]
  675.         mov     word [esi],0x2020
  676.         mov     ebx,[.cursor_temp]
  677.         add     esi,2
  678.         add     [.string_size],2
  679.         mov     ecx,[bytes_per_line]
  680. @@:
  681.         mov     al,[edi]
  682.         mov     [esi],al
  683.         mov     byte [esi+1],0x20
  684.         dec     ebx
  685.         jnz     .s1
  686.         mov     byte [esi+1],(0x20+3*4)
  687. .s1:
  688.         dec     ebx
  689.         jnz     .s2
  690.         mov     byte [esi+1],(0x20+3*4)
  691. .s2:
  692.         inc     edi
  693.         add     esi,2
  694.         add     [.string_size],2
  695.         loop    @b
  696.         pop     edi
  697.         mov     edx,[bytes_per_line]
  698.         dec     [.number_strings]
  699.         jnz     .next_string
  700.         ret
  701.  
  702. .fl     db 0
  703. .fl_buf dd 0
  704. .to_null:
  705.         dec     [.fl]
  706.         mov     [.fl_buf],edi
  707.         jmp     .pre_next_byte0
  708.  
  709. .pre_next_string:
  710.         mov     word [esi],0x2020
  711.         add     esi,2
  712.         mov     eax,0x20302030
  713.         mov     dword [esi],eax
  714.         mov     dword [esi+4],eax
  715.         mov     dword [esi+8],eax
  716.         mov     dword [esi+12],eax
  717.         mov     ecx,8
  718.         mov     edi,[.offset]
  719. @@:
  720.         mov     eax,edi
  721.         and     eax,0xF
  722.         cmp     al,10
  723.         sbb     al,69h
  724.         das
  725.         mov     [esi+ecx*2-2],al
  726.         shr     edi,4
  727.         loop    @b
  728.         mov     word [esi+16],0x203a    ;¤¢®¥â®ç¨¥
  729.         mov     eax,[bytes_per_line]
  730.         add     [.offset],eax
  731.         mov     [.string_size],2+4*4+4+2
  732.         add     esi,4*4+4+2
  733.         push    [.cursor]
  734.         pop     [.cursor_temp]
  735.  
  736.         ;hex §­ ç¥­¨ï
  737.         mov     dword [esi-4],0x20202020
  738.  
  739.         mov     edx,[bytes_per_line]
  740. .pre_next_group:
  741.         mov     ecx,[group_bytes]
  742.  
  743. .pre_next_byte:
  744.         mov     dword [esi],0x20202020
  745.         dec     [.cursor]
  746.         jnz     @f
  747.         mov     byte [esi+1],(0x20+2*4)
  748. @@:
  749.         dec     [.cursor]
  750.         jnz     @f
  751.         mov     byte [esi+3],(0x20+2*4)
  752. @@:
  753.         mov     word [esi+4],0x2020
  754.         add     [.string_size],6
  755.         add     esi,6
  756. .pre_next_byte0:
  757.         dec     ecx
  758.         jz      @f
  759.         dec     edx
  760.         jnz     .pre_next_byte
  761.         jz      .pre_ascii
  762. @@:
  763.         mov     word [esi],0x2020
  764.         add     esi,2
  765.         add     [.string_size],2
  766.         dec     edx
  767.         jnz     .pre_next_group;byte
  768.         sub     esi,2
  769.         sub     [.string_size],2
  770.         jz      .pre_ascii
  771.  
  772. .pre_ascii:
  773.         mov     word [esi],0x2020
  774.         add     esi,2
  775.         add     [.string_size],2
  776.         mov     ecx,[bytes_per_line]
  777.         cmp     [.fl],0 ;¯à®¢¥àª  ä« £ 
  778.         jne     .last_ascii
  779.         mov     ebx,[.cursor_temp]
  780. @@:
  781.         mov     word [esi],0x2020
  782.         dec     ebx
  783.         jnz     .ps1
  784.         mov     byte [esi+1],(0x20+3*4)
  785. .ps1:
  786.         dec     ebx
  787.         jnz     .ps2
  788.         mov     byte [esi+1],(0x20+3*4)
  789. .ps2:
  790.         add     esi,2
  791.         add     [.string_size],2
  792. .1:
  793.         loop    @b
  794.         mov     edx,[bytes_per_line]
  795.         dec     [.number_strings]
  796.         jnz     .pre_next_string
  797.         ret
  798.  
  799. ;ª®à४⭮ ®¡à ¡ â뢠¥¬ 䨭 «ì­ãî áâபã ä ©« , ¤«¨­  ª®â®à®© ¢ à¨ â¨¢­ 
  800. .last_ascii:
  801.         mov     ebx,[.fl_buf]
  802.         sub     ebx,[.temp]
  803.         sub     ecx,ebx
  804.         mov     edi,[.temp]
  805.         mov     [.fl],0
  806. @@:
  807.         mov     al,[edi]
  808.         mov     [esi],al
  809.         mov     byte [esi+1],0x20
  810.         dec     [.cursor_temp]
  811.         jnz     .la1
  812.         mov     byte [esi+1],(0x20+3*4)
  813. .la1:
  814.         dec     [.cursor_temp]
  815.         jnz     .la2
  816.         mov     byte [esi+1],(0x20+3*4)
  817. .la2:
  818.         inc     edi
  819.         add     esi,2
  820.         add     [.string_size],2
  821.         dec     ebx
  822.         jnz     @b
  823.         inc     ecx
  824.         jmp     .1
  825.  
  826. .string_size    dd 16
  827. .number_strings dw 0
  828. .length_to_end  dd 0
  829. .temp           dd 0
  830. .offset         dd 0
  831. .cursor         dd 0
  832. .cursor_temp    dd 0
  833. .shblock_beg    dd 0
  834. .shblock_end    dd 0
  835.  
  836.  
  837. align   4
  838. main_area:
  839.         mov     ecx,[number_strings]
  840.         mov     [.number_strings],cx
  841.         push    [len_str_scr]
  842.         pop     [.len_str_scr]
  843.         mov     eax,[ready_screen_buffer.string_size]
  844.         shr     eax,1
  845.         mov     [.string_size],eax
  846.         mov     edi,[screen_table]
  847.         mov     edi,[edi]
  848.         cmp     [file_size],edi
  849.         jbe     .4
  850.         xor     edx,edx ;¯®«§ã­®ª
  851.         mov     ebx,[scroll_bar_data_vertical.max_area]
  852.         sub     ebx,[scroll_bar_data_vertical.cur_area]
  853.         mov     ecx,[file_size]
  854.         mov     eax,[current_offset]
  855.         test    eax,eax
  856.         jnz     .3
  857.         inc     eax
  858. .3:
  859.         mul     ebx
  860.         test    ecx,ecx
  861.         jnz     .5
  862.         inc     ecx
  863. .5:
  864.         div     ecx
  865.         mov     [scroll_bar_data_vertical.position],eax
  866.  
  867.         mcall   37,2    ;ª¯®¯ª  ¬ëè¨ ­ ¦ â  - ­¥â á¬ëá«  ¯¥à¥à¨á®¢ë¢ âì ScrollBar
  868.         test    eax,eax
  869.         jnz     .4
  870.         push    dword scroll_bar_data_vertical
  871.         call    [scrollbar_ver_mouse]
  872.  
  873.         push    dword scroll_bar_data_vertical  ;draw for Vertical ScrollBar
  874.         call    [scrollbar_ver_draw]
  875.  
  876. ;       push    dword scroll_bar_data_vertical  ;draw for Vertical ScrollBar
  877. ;       call    [scrollbar_ver_draw]
  878.  
  879. ;       xor     eax,eax
  880. ;       inc     eax
  881. ;       mov     [scroll_bar_data_vertical.all_redraw],eax
  882. ;       push    dword scroll_bar_data_vertical  ;draw for Vertical ScrollBar
  883. ;       call    [scrollbar_ver_draw]
  884. ;       xor     eax,eax ;reset  all_redraw      flag
  885. ;       mov     [scroll_bar_data_vertical.all_redraw],eax
  886.  
  887. .4:
  888.         mov     esi,0x000001    ;梥⠨ ç¨á«® ¡¨â ­  ¯¨ªá¥«ì
  889.         mov     edx,FIRST_HEX   ;ª®®à¤¨­ âë ¯¥à¢®£® hex
  890.         call    show_current_offset
  891.         mov     edi,[screen_table]
  892.         add     edi,4
  893.         mov     ecx,[beg_str_scr]
  894.         sub     [.string_size],ecx
  895.         shl     ecx,1
  896.         add     edi,ecx
  897. .out:
  898.         push    edi
  899.         movzx   ebx,byte [edi]
  900.         cmp     bl,128  ;¯à®¢¥àª  ­  ¯à¨­ ¤«¥¦­®áâì ᨬ¢®«  ª à áè¨à¥­­®© â ¡«¨æ¥
  901.         jb      .7
  902.         add     ebx,[codepage_offset]
  903. .7:
  904.         movzx   edi,byte [edi+1]
  905.         lea     edi,[(edi*2-0x40)]
  906.         add     edi,palitra
  907.         shl     bx,4
  908.         add     ebx,font_buffer
  909.         mov     ecx,8*65536+16
  910.         mov     ebp,0
  911.         mcall   65
  912.         pop     edi
  913.  
  914.         add     edi,2
  915.         add     edx,8*65536
  916.  
  917.         dec     [.len_str_scr]
  918.         jz      .loop_str
  919.         dec     [.string_size]
  920.         jz      .next_string
  921.  
  922.         push    edi
  923.         movzx   ebx,byte [edi]
  924.         cmp     bl,128
  925.         jb      .8
  926.         add     ebx,[codepage_offset]
  927. .8:
  928.         movzx   edi,byte [edi+1]
  929.         lea     edi,[(edi*2-0x40)]
  930.         add     edi,palitra
  931.         shl     bx,4
  932.         add     ebx,font_buffer
  933.         mcall
  934.         pop     edi
  935.  
  936.         add     edi,2
  937.         add     edx,8*65536
  938.  
  939.         dec     [.len_str_scr]
  940.         jz      .loop_str
  941.         dec     [.string_size]
  942.         jnz     .out
  943.         jz      .next_string
  944.  
  945. .string_size    dd 0
  946. .number_strings dw 0
  947. .len_str_scr    dd 0
  948.  
  949. @@:
  950.         pushad
  951.         mov     ecx,edx
  952.         shl     ecx,16
  953.         mov     ebx,edx
  954.         shr     ebx,16
  955.         cmp     bx,[scroll_bar_data_vertical.start_x]
  956.         jge     .ls1
  957.         mov     ax,[scroll_bar_data_vertical.start_x]
  958.         sub     ax,bx
  959.         shl     ebx,16
  960.         mov     bx,ax
  961.         mov     cx,16
  962.         mcall   13,,,frgrd_color
  963. .ls1:
  964.         popad
  965.         jmp     @f
  966. .loop_str:
  967.         bt      [flags],6
  968.         jc      @b
  969. @@:
  970.         dec     [.string_size]
  971.         jz      .next_string
  972.         add     edi,2
  973.         add     edx,8*65536
  974.         jmp     @b
  975.  
  976. @@:;®ç¨á⪠ ä®­®¢ë¬ 梥⮬ ­¥§ ªà è¥­­ëå ®¡« á⥩
  977.         pushad
  978.         ror     edx,16
  979.         mov     dx,16
  980.         mov     ecx,edx
  981.         mov     edx,frgrd_color
  982.         movzx   ebx,[scroll_bar_data_vertical.start_x]
  983.         sub     ecx,2*65536
  984.         mov     cx,2
  985.         mcall   13
  986.         popad
  987.  
  988.         pushad
  989.         mov     ecx,edx
  990.         shl     ecx,16
  991.         mov     ebx,edx
  992.         shr     ebx,16
  993.         cmp     bx,[scroll_bar_data_vertical.start_x]
  994.         jge     .10
  995.         mov     ax,[scroll_bar_data_vertical.start_x]
  996.         sub     ax,bx
  997.         shl     ebx,16
  998.         mov     bx,ax
  999.         mov     cx,16
  1000.         mcall   13,,,frgrd_color
  1001. .10:
  1002.         popad
  1003.         jmp     @f
  1004. .next_string:
  1005.         bt      [flags],6
  1006.         jc      @b
  1007. @@:
  1008.         push    [len_str_scr]
  1009.         pop     [.len_str_scr]
  1010.         mov     eax,[ready_screen_buffer.string_size]
  1011.         shr     eax,1
  1012.         mov     [.string_size],eax      ;ª®à४æ¨ï ᬥ饭¨ï ¢å®¤­ëå ¤ ­­ëå
  1013.         mov     ecx,[beg_str_scr]
  1014.         sub     [.string_size],ecx
  1015.         sub     eax,ecx
  1016.         shl     ecx,1
  1017.         add     edi,ecx
  1018.  
  1019.         shl     eax,19
  1020.         sub     edx,eax
  1021.         add     edx,18
  1022.         dec     [.number_strings]
  1023.         jnz     .out
  1024.         btr     [flags],6
  1025.         jmp     end_draw
  1026.  
  1027.  
  1028. align   4
  1029. show_current_offset:
  1030.         pushad
  1031.         push    edx     ;¢ë¢®¤ ⥪ã饣® ᬥ饭¨ï ¢ ä ©«¥
  1032.         mov     edi,palitra.5
  1033.         mov     eax,[begin_offset]
  1034.         mov     ebx,[cursor]
  1035.         dec     ebx
  1036.         shr     bx,1
  1037.         add     ebx,eax
  1038.         mov     [current_offset],ebx
  1039.         mov     edx,[low_area]
  1040.         lea     eax,[8*8+8+8]
  1041.         shl     eax,16
  1042.         add     edx,eax
  1043.         mov     ecx,8
  1044.         call    hex_output
  1045.         lea     eax,[8*8+14]
  1046.         shl     eax,16
  1047.         add     edx,eax
  1048.         push    edx
  1049.         ;¤¢®¨ç­®¥ §­ ç¥­¨¥ ¡ ©â 
  1050.         mov     edx,[file_buffer]
  1051.         add     edx,ebx;[current_offset]
  1052.         xor     eax,eax
  1053.         cmp     ebx,[file_size]
  1054.         jae     @f
  1055.         mov     al,[edx]
  1056. @@:
  1057.         mov     bx,2
  1058.         mov     ebp,8
  1059.         xor     ecx,ecx
  1060.         xor     edx,edx
  1061. @@:
  1062.         div     bx
  1063.         or      cl,dl
  1064.         ror     ecx,4
  1065.         dec     ebp
  1066.         jnz     @b
  1067.         mov     ebx,ecx
  1068.         pop     edx
  1069.         mov     ecx,8
  1070.         call    hex_output
  1071.  
  1072.         ;¤¥áïâ¨ç­®¥
  1073.         push    edx
  1074.         mov     edx,[file_buffer]
  1075.         mov     ebx,[current_offset]
  1076.         add     edx,ebx
  1077.         xor     eax,eax
  1078.         inc     ebx
  1079.         cmp     ebx,[file_size] ;0 ¥á«¨ §  £à ­¨æ¥© ä ©« 
  1080.         jb      @f
  1081.         mov     edx,D_END
  1082. @@:
  1083.         mov     al,[edx]
  1084.         xor     ebx,ebx
  1085. ;       mov     ebp,3
  1086.         mov     cl,10
  1087. @@:
  1088.         div     cl
  1089.         mov     bl,ah
  1090.         xor     ah,ah
  1091.         shl     ebx,8
  1092.         test    al,al
  1093. ;       dec     ebp
  1094.         jnz     @b
  1095.         shr     ebx,8
  1096.         cmp     byte [edx],100
  1097.         jb      .1
  1098.         mov     ebp,3
  1099.         jmp     @f
  1100. .1:
  1101.         mov     ebp,1
  1102.         cmp     byte [edx],10
  1103.         jb      @f
  1104.         mov     ebp,2
  1105. @@:
  1106.         mov     al,bl
  1107.         shr     ebx,8
  1108.         cmp     al,10
  1109.         sbb     al,69h
  1110.         das
  1111.         shl     eax,8
  1112. ;       test    bx,bx
  1113.         dec     ebp
  1114.         jnz     @b
  1115.  
  1116.         mov     ecx,8*65536+16
  1117.         pop     edx
  1118.         add     edx,(8*8+30)*65536;268*65536
  1119.         mov     edi,palitra.5
  1120.         mov     ebp,0
  1121.         push    dword 3
  1122. @@:
  1123.         shr     eax,8
  1124.         xor     ebx,ebx
  1125.         mov     bl,al
  1126.         shl     ebx,4
  1127.         add     ebx,font_buffer
  1128.         push    eax
  1129.         mcall   65
  1130.         pop     eax
  1131.         sub     edx,8*65536
  1132.         dec     dword [esp]
  1133.         jnz     @b
  1134.         add     esp,4
  1135. ;       mov     edx,[low_area]  ;¢ë¢®¤ esp
  1136. ;       add     edx,298*65536
  1137. ;       mov     ebx,esp
  1138. ;       mov     ecx,8
  1139. ;       call    hex_output
  1140.         pop     edx
  1141.         popad
  1142.         ret
  1143.  
  1144.  
  1145. align   4
  1146. hex_output:     ;¢ë¢®¤ hex áâப¨ ¨§ 8 ᨬ¢®«®¢
  1147.         pushad
  1148.         mov     edi,(hex8_string)       ; ¤à¥á ¡ãä¥à 
  1149.         mov     dword [edi],0x30303030
  1150.         mov     dword [edi+4],0x30303030
  1151.         push    ecx
  1152. .1:
  1153.         mov     eax,ebx
  1154.         and     eax,0xF
  1155.         cmp     al,10
  1156.         sbb     al,69h
  1157.         das
  1158.         mov     [edi+ecx-1],al
  1159.         shr     ebx,4
  1160.         loop    .1
  1161.         mov     ecx,8*65536+16
  1162. .2:
  1163.         push    edi
  1164.         xor     ebx,ebx
  1165.         mov     al,[edi]
  1166.         shl     eax,4
  1167.         add     eax,font_buffer
  1168.         xchg    eax,ebx
  1169.         mov     edi,palitra.5
  1170.         mov     ebp,0
  1171.         mcall   65
  1172.         add     edx,8*65536
  1173.         pop     edi
  1174.         inc     edi
  1175.         dec     dword [esp]
  1176.         jnz     .2
  1177.         add     esp,4
  1178.         popad
  1179.         ret
  1180. ;------------------------------------------------------
  1181. align   4
  1182. input_from_keyboard:
  1183.         xor     al,al
  1184.         sub     ah,48
  1185.         cmp     ah,9
  1186.         jle     .1
  1187.         sub     ah,7
  1188.         cmp     ah,15
  1189.         jle     .1
  1190.         sub     ah,32
  1191. .1:
  1192.         bt      [flags],1
  1193.         jnc     .2
  1194.         mov     ebx,[cursor]
  1195.         and     bl,1
  1196.         jz      .2
  1197.         inc     [file_size]
  1198.         call    raspred_mem
  1199.         mov     edi,[current_offset]
  1200.         add     edi,[file_buffer]
  1201.         mov     esi,[file_buffer]
  1202.         add     esi,[file_size]
  1203.         dec     esi
  1204. @@:
  1205.         cmp     edi,esi
  1206.         ja      @f
  1207.         mov     bl,[esi]
  1208.         mov     [esi+1],bl
  1209.         dec     esi
  1210.         jmp     @b
  1211. @@:
  1212.         call    show_file_size
  1213.         mov     ebx,[current_offset]
  1214.         add     ebx,[file_buffer]
  1215.         mov     byte [ebx],0
  1216. .2:
  1217.         mov     ecx,[current_offset]
  1218.         add     ecx,[file_buffer]
  1219.         ;á¬.    ¯¥à¢ãî  ¢¥àá¨î  heed.asm
  1220.         mov     dl,[ecx]        ;®à¨£¨­ «ì­ë© ¡ ©â
  1221.         mov     ebx,[cursor]
  1222.         and     bl,1    ;­¥ç¥â - । ªâ¨à㥬 áâ à訩 ¯®«ã¡ ©â
  1223.         jnz     .hi_half_byte ;çñâ - áâ à訩
  1224.         and     dl,0xf0 ;®¡­ã«ï¥¬ ¬«. ¯-¡ ©â ®à¨£¨­ «ì­®£® ¡ ©â 
  1225.         jmp     .patch_byte
  1226. .hi_half_byte:  ;®¤­®¢à¥¬¥­­® ᤢ¨£ ¥¬ ­ã¦­®¥ §­ ç¥­¨¥ ¢ áâ ¯-â ¨ ®¡­ã«ï¥¬ ¬« ¤è¨©
  1227.         shl     ax,4
  1228.         and     dl,0x0f ;®¡­ã«ï¥¬ áâ à訩 ¯®«ã¡ ©â 㠮ਣ¨­ «ì­®£® ¡ ©â 
  1229. .patch_byte:
  1230.         or      ah,dl
  1231.         mov     [ecx],ah
  1232.         jmp     RIGHT
  1233.  
  1234. raspred_mem:
  1235.         pushad
  1236.         xor     edx,edx
  1237.         mov     ecx,4096
  1238.         mov     eax,[file_size]
  1239.         inc     eax
  1240.         div     ecx
  1241.         cmp     eax,[prev_f_size_bl]
  1242.         ja      @f
  1243.         je      .ret
  1244.         cmp     [file_size],4096
  1245.         jbe     .ret
  1246.         mov     [prev_f_size_bl],eax
  1247.         xor     edx,edx
  1248.         mul     ecx
  1249.         mov     ecx,eax
  1250.         jmp     .1
  1251. @@:
  1252.         mov     [prev_f_size_bl],eax
  1253.         xor     edx,edx
  1254.         mul     ecx
  1255.         add     ecx,eax
  1256. .1:
  1257.         mcall   68,20,,[file_buffer]
  1258. .ret:
  1259.         popad
  1260.         ret
  1261. ;---------------------------------------
  1262.  
  1263. align   4
  1264. show_file_size:
  1265.         mov     ebx,[file_size]
  1266.         mov     edx,[low_area];
  1267.         mov     esi,1
  1268.         mov     ecx,8
  1269.         call    hex_output
  1270.         ret
  1271.  
  1272.  
  1273. align   4
  1274. draw_window:
  1275.         mcall   0,100*65536+653,100*65536+360,((0x73 shl 24) + frgrd_color),,title
  1276.         mcall   9,threath_buf,-1
  1277.         cmp     byte [threath_buf+70],3 ;®ª­® á¢ñà­ãâ® ¢ § £®«®¢®ª?
  1278.         jnae    @f
  1279. .@d:
  1280.         call    end_draw
  1281.         add     esp,4
  1282.         jmp     still
  1283. @@:
  1284.         cmp     dword [threath_buf+66],(24*4)   ;¯à®¢¥àª  ¬¨­¨¬ «ì­®© ¢ëá®âë
  1285.         jae     @f
  1286.         mov     esi,dword [threath_buf+46]
  1287.         sub     esi,dword [threath_buf+66]
  1288.         add     esi,24*4
  1289.         mcall   67,-1,-1,-1,
  1290.         jmp     .@d
  1291. @@:
  1292.         cmp     dword [threath_buf+62],(26*6)   ;¯à®¢¥àª  ¬¨­¨¬ «ì­®© è¨à¨­ë
  1293.         jae     @f
  1294.         mov     edx,dword [threath_buf+42]
  1295.         sub     edx,dword [threath_buf+62]
  1296.         add     edx,26*6
  1297.         mcall   67,-1,-1,,-1
  1298.         jmp     .@d
  1299. @@:
  1300.         mov     eax,[file_size]
  1301.         mov     ebx,[bytes_per_line]
  1302.         xor     edx,edx
  1303.         div     ebx
  1304.         mov     [scroll_bar_data_vertical.size_x],0
  1305.         cmp     eax,[number_strings]
  1306.         jl      @f
  1307.         mov     [scroll_bar_data_vertical.size_x],scroll_width_size
  1308. @@:
  1309.         mov     eax,dword [threath_buf+62]      ;è¨à¨­  ª«¨¥­â᪮© ®¡« áâ¨
  1310.         sub     ax,[scroll_bar_data_vertical.size_x]
  1311.         mov     [scroll_bar_data_vertical.start_x],ax
  1312.         mov     eax,dword [threath_buf+66]      ;¢ëá®â  ª«¨¥­â᪮© ®¡« áâ¨
  1313.         sub     eax,24+24-11
  1314.         mov     [scroll_bar_data_vertical.size_y],ax
  1315.         mov     ebx,eax
  1316.         push    eax
  1317.         add     ebx,20
  1318.         mov     [scroll_bar_data_vertical.max_area],ebx
  1319.         mov     ebx,[scroll_bar_data_vertical.btn_high]
  1320.         shl     ebx,1
  1321.         add     ebx,20
  1322.         mov     [scroll_bar_data_vertical.cur_area],ebx
  1323.         pop     eax
  1324.         sub     eax,3
  1325.         mov     ebx,18
  1326.         xor     edx,edx
  1327.         div     bx
  1328.         mov     [number_strings],eax    ;ª®«-¢® hex áâப ¢ ®ª­¥
  1329.         mov     ebx,[bytes_per_line]
  1330.         mul     ebx
  1331.         mov     edi,[screen_table]      ;ª®«-¢® ¡ ©â®¢ ¤«ï ¢ë¢®¤ 
  1332.         mov     dword [edi],eax
  1333.  
  1334.         push    eax
  1335.  
  1336.         mov     ebx,dword [threath_buf+62]
  1337.         inc     ebx
  1338.         mov     ecx,(FIRST_HEX-18)
  1339.         ror     ecx,16
  1340.         mov     cx,18
  1341.         ror     ecx,16
  1342.         mcall   13,,,frgrd_color        ;¯®«®á  ᢥàåã
  1343.  
  1344.         mcall   ,,18,panel_clr1 ;¢¥àå­ïï ¯ ­¥«ì
  1345.  
  1346.         dec     ebx
  1347.         mcall   38,,<18,18>,panel_clr2
  1348.         mov     ecx,dword [threath_buf+66]
  1349.         sub     cx,18
  1350.         push    cx
  1351.         shl     ecx,16
  1352.         pop     cx
  1353.         mcall   ,,,panel_clr3   ;­¨¦­ïï ¯ ­¥«ì
  1354.         add     ecx,1*65536
  1355.         mov     cx,18
  1356. ;       inc     ebx
  1357.         mcall   13,,,panel_clr1
  1358.  
  1359.  
  1360.         mov     eax,dword [threath_buf+62]
  1361.         sub     eax,scroll_width_size
  1362.         shr     eax,3   ;div 8
  1363.         mov     [len_str_scr],eax
  1364.  
  1365.  
  1366.         mov     eax,[len_str_scr]
  1367.         shl     eax,1
  1368.         cmp     eax,[ready_screen_buffer.string_size]
  1369.         jae     @f
  1370.  
  1371.         mov     edi,[screen_table]
  1372.         mov     eax,[bytes_per_line]
  1373.         sub     dword [edi],eax
  1374.         dec     [number_strings]
  1375.  
  1376. @@:
  1377.         shr     ecx,16
  1378.         mov     edx,ecx
  1379.         mov     ecx,(FIRST_HEX)
  1380.         shr     ecx,16
  1381.         mov     eax,[number_strings]
  1382.         lea     ebx,[eax*8];*18
  1383.         lea     ebx,[ebx*2]
  1384.         lea     eax,[eax*2]
  1385.         add     eax,ebx
  1386.         add     cx,ax
  1387.         add     cx,21
  1388.         sub     dx,cx
  1389.         shl     ecx,16
  1390.         add     cx,dx
  1391.         sub     ecx,1*65536
  1392.         movzx   ebx,    word [scroll_bar_data_vertical.start_x]
  1393.         mcall   13,,,frgrd_color
  1394.  
  1395.         pop     eax
  1396.  
  1397.         cmp     eax,[file_size]
  1398.         jge     @f
  1399. ;       push    dword scroll_bar_data_vertical
  1400. ;       call    [scrollbar_ver_mouse]
  1401.         xor     eax,eax
  1402.         inc     eax
  1403.         mov     [scroll_bar_data_vertical.all_redraw],eax
  1404.         push    dword scroll_bar_data_vertical  ;draw for Vertical ScrollBar
  1405.         call    [scrollbar_ver_draw]
  1406.         xor     eax,eax ;reset all_redraw flag
  1407.         mov     [scroll_bar_data_vertical.all_redraw],eax
  1408. @@:
  1409.         push    dword menu_data_1       ;draw for Menu 1
  1410.         call    [menu_bar_draw]
  1411.         push    dword menu_data_2       ;draw for Menu 2
  1412.         call    [menu_bar_draw]
  1413.         push    dword menu_data_3       ;draw for Menu 3
  1414.         call    [menu_bar_draw]
  1415.  
  1416. ;;;
  1417.  
  1418.         mov     eax,dword [threath_buf+66]
  1419.         add     eax,8*65536-15
  1420.         mov     [low_area],eax
  1421.  
  1422.         mov     ebx,[beg_str_scr]
  1423.         mov     [beg_str_scr],0
  1424.         mov     eax,[len_str_scr]
  1425.         shl     eax,1
  1426.         cmp     eax,[ready_screen_buffer.string_size]
  1427.         jae     @f
  1428.  
  1429.         mov     [beg_str_scr],ebx
  1430.         movzx   eax,word [threath_buf+66]
  1431.         sub     eax,34
  1432.         mov     [scroll_bar_data_horizontal.start_y],ax
  1433.  
  1434. ;cur_area/(size_x-30)=len_str_scr/string_size
  1435.  
  1436.         mov     eax,dword [threath_buf+62]
  1437.         sub     ax,[scroll_bar_data_vertical.size_x]
  1438.         mov     [scroll_bar_data_horizontal.size_x],ax
  1439.         sub     eax,[scroll_bar_data_horizontal.btn_high]
  1440.         sub     eax,[scroll_bar_data_horizontal.btn_high]
  1441.         mov     [scroll_bar_data_horizontal.max_area],eax
  1442.         xor     edx,edx
  1443.         mov     ebx,[len_str_scr]
  1444.         mul     ebx
  1445.         mov     ebx,[ready_screen_buffer.string_size]
  1446.         shr     ebx,1
  1447.         div     ebx
  1448.         mov     [scroll_bar_data_horizontal.cur_area],eax
  1449.  
  1450.         push    dword scroll_bar_data_horizontal        ;draw for Horizontal ScrollBar
  1451.         call    [scrollbar_hor_mouse]
  1452.         xor     eax,eax
  1453.         inc     eax
  1454.         mov     [scroll_bar_data_horizontal.all_redraw],eax
  1455.         push    dword scroll_bar_data_horizontal        ;draw for Vertical ScrollBar
  1456.         call    [scrollbar_hor_draw]
  1457.         xor     eax,eax ;reset all_redraw flag
  1458.         mov     [scroll_bar_data_horizontal.all_redraw],eax
  1459. @@:
  1460.         mov     eax,[low_area]
  1461.         mov     edi,[screen_table]
  1462.         mov     esi,[bytes_per_line]
  1463.         mov     ecx,esi
  1464.         shl     ecx,1
  1465.         mov     eax,[edi]
  1466.         mov     ebx,[cursor]
  1467.         inc     ebx
  1468.         shr     ebx,1
  1469. @@:
  1470.         cmp     eax,ebx
  1471.         jge     @f
  1472.         add     [begin_offset],esi
  1473.         sub     [cursor],ecx
  1474.         sub     ebx,esi
  1475.         jmp     @b
  1476. @@:
  1477.         bts     [flags],6
  1478.         ret
  1479.  
  1480. align   4
  1481. start_draw:
  1482.         mcall   12,1
  1483.         ret
  1484.  
  1485. end_draw:
  1486.         mcall   12,2
  1487.         ret
  1488.  
  1489. close_prog:
  1490.         mcall   -1
  1491. ;-------------------------------------------------------------------------------
  1492. change_codepage:        ;¬¥­ï¥¬ ¢â®àãî ¯®«®¢¨­ã â ¡«¨æë
  1493.         test    ah,ah
  1494.         jnz     @f
  1495.         btc     [flags],4
  1496.         jc      .1
  1497.         push    [codepage_offset]
  1498.         pop     [codepage_offset_previous]
  1499.         mov     [codepage_offset],2*128
  1500.         jmp     .end
  1501. .1:
  1502.         push    [codepage_offset_previous]
  1503.         pop     [codepage_offset]
  1504.         jmp     .end
  1505. @@:
  1506.         cmp     [codepage_offset],0
  1507.         jne     @f
  1508.         add     [codepage_offset],128
  1509.         jmp     .end
  1510. @@:
  1511.         mov     [codepage_offset],0
  1512. .end:
  1513.         call    show_codepage
  1514.         jmp     red
  1515.  
  1516. show_codepage:
  1517.         mov     ebp,6
  1518.         mov     edx,dword [threath_buf+62]
  1519.         sub     edx,73
  1520.         shl     edx,16
  1521.         add     edx,[low_area]
  1522.         mov     edi,string_cp866
  1523.         cmp     [codepage_offset],0
  1524.         je      @f
  1525.         add     edi,6
  1526.         cmp     [codepage_offset],128
  1527.         je      @f
  1528.         add     edi,6
  1529. @@:
  1530.         mov     ecx,8*65536+16
  1531.         mov     esi,1
  1532.         push    ebp
  1533.         mov     ebp,0
  1534. @@:
  1535.         xor     ebx,ebx
  1536.         push    edi
  1537.         mov     bl,[edi]
  1538.         shl     bx,4
  1539.         add     ebx,font_buffer
  1540.         mov     edi,palitra.5
  1541.         mcall   65
  1542.         add     edx,8*65536
  1543.         pop     edi
  1544.         inc     edi
  1545.         dec     dword [esp]
  1546.         jnz     @b
  1547.         add     esp,4
  1548.         ret
  1549.  
  1550. show_insert:    ;®â®¡à ¦¥­¨¥ ०¨¬  ¢áâ ¢ª¨/§ ¬¥­ë
  1551.         mov     ebp,3
  1552.         mov     edx,dword [threath_buf+62]
  1553.         sub     edx,120
  1554.         shl     edx,16  ; mov edx,428*65536+335
  1555.         add     edx,[low_area]
  1556.         mov     edi,string_ins
  1557.         push    ebp
  1558.         mov     ecx,8*65536+16
  1559.         mov     esi,1
  1560.         mov     ebp,0
  1561. .1:
  1562.         xor     ebx,ebx
  1563.         push    edi
  1564.         bt      [flags],1
  1565.         jnc     .2
  1566.         mov     bl,[edi]
  1567.         shl     bx,4
  1568. .2:
  1569.         add     ebx,font_buffer
  1570.         mov     edi,palitra.5
  1571.         mcall   65
  1572.         add     edx,8*65536
  1573.         pop     edi
  1574.         inc     edi
  1575.         dec     dword [esp]
  1576.         jnz     .1
  1577.         add     esp,4
  1578.         ret
  1579. ;-------------------------------------------------------------------------------
  1580.         ;help window
  1581. create_help_window:
  1582.         pushad
  1583.         mcall   51,1,.thread,(.threat_stack+16*4)
  1584.         popad
  1585.         ret
  1586. .thread:
  1587.         call    .window
  1588. .still:
  1589.         mcall   10
  1590.         dec     al
  1591.         jz      .red
  1592.         dec     al
  1593.         jz      .key
  1594.         dec     al
  1595.         jz      .button
  1596.         jmp     .still
  1597.         mcall   -1
  1598. .button:
  1599.         mcall   17,1
  1600.         cmp     ah,1
  1601.         jne     @f
  1602.         mcall   -1
  1603. @@:
  1604.         cmp     ah,2
  1605.         jne     @f
  1606.         mov     edi,(help_end-help_text)/51
  1607.         movzx   eax,[cur_help_string]
  1608.         sub     edi,13
  1609.         sub     edi,eax
  1610.         jz      .still
  1611.         inc     [cur_help_string]
  1612.         jmp     .red
  1613. @@:
  1614.         cmp     ah,3
  1615.         jne     .still
  1616.         cmp     [cur_help_string],0
  1617.         je      .still
  1618.         dec     [cur_help_string]
  1619.         jmp     .red
  1620.  
  1621. .key:
  1622.         mcall   2
  1623.         jmp     .still
  1624.  
  1625. .red:
  1626.         call    .window
  1627.         jmp     .still
  1628.  
  1629. .window:
  1630.         pushad
  1631.         mcall   12,1
  1632.         mcall   0,50*65536+320,0x70*65536+240,0x13000000,,help_but_text
  1633.         mcall   8,<130,20>,<6,12>,2,0xaaaaaa
  1634.         mcall   ,<150,20>,,3,
  1635.         mov     ebx,8*65536+15
  1636.         mov     ecx,0x00DDDDDD
  1637.         xor     edx,edx
  1638.         movzx   eax,byte [cur_help_string]
  1639.         mov     edi,(help_end-help_text)/51
  1640.         sub     edi,eax
  1641.         mov     esi,51
  1642.         mul     si
  1643.         mov     edx,help_text
  1644.         add     edx,eax
  1645.         mov     eax,4
  1646. @@:
  1647.         add     ebx,0x10
  1648.         mcall
  1649.         add     edx,51
  1650.         dec     edi
  1651.         jnz     @b
  1652.         mcall   12,2
  1653.         popad
  1654.         ret
  1655.  
  1656. .threat_stack:  times   16      dd      0
  1657. ;-------------------------------------------------
  1658.  
  1659. open_file:
  1660.         mov     [func_70.func_n],5
  1661.         mov     [func_70.param1],0
  1662.         mov     [func_70.param2],0
  1663.         mov     [func_70.param3],0
  1664.         mov     [func_70.param4],bufferfinfo
  1665.         mov     [func_70.rezerv],0
  1666.         mov     [func_70.name],file_name
  1667.         mcall   70,func_70
  1668.  
  1669.         test    al,al   ;ä ©« ­ ©¤¥­?
  1670.         jz      @f
  1671.         mcall   4,400*65536+31,0x80CC0000,error_open_file_string
  1672.         jmp     open_file
  1673. @@:
  1674. ;       mov     edx,[blocks_counter]
  1675. ;       mov     edi,[blocks_table]
  1676. ;       @@:     mov     ecx,[edi]       ;¢ë᢮¡®¦¤ ¥¬:
  1677. ;       mcall   68,13   ;¡«®ª¨ ä ©« 
  1678. ;       add     edi,8
  1679. ;       dec     edx
  1680. ;       jnz     @b
  1681. ;       mcall   68,13,[blocks_table]    ;â ¡«¨æã
  1682.  
  1683.         mov     eax,    dword [bufferfinfo+32]  ;ª®¯¨à㥬 à §¬¥à ä ©« 
  1684.         mov     [file_size],eax
  1685.  
  1686. ;       mov     ebx,65536       ;64Š ¡«®ª
  1687. ;       xor     edx,edx
  1688. ;       div     ebx
  1689. ;       push    dx      ;¤«¨­  ¯®á«¥¤­¥£® ¡«®ª 
  1690. ;       test    dx,dx
  1691. ;       jz      @f
  1692. ;       inc     eax
  1693. ;       @@:     test    eax,eax
  1694. ;       jnz     @f
  1695. ;       inc     eax
  1696. ;       @@:     mov     [blocks_counter],eax
  1697. ;       sal     eax,3;*8        ;à §¬¥à â ¡«¨æë á ¨­¤¥ªá ¬¨ ¡«®ª®¢
  1698. ;;      add     eax,32  ;à¥è ¥¬ ¯à®¡«¥¬ã á 32Œ ä ©« ¬¨
  1699.  
  1700. ;       mov     ecx,eax ;¢ë¤¥«ï¥¬ ¯ ¬ïâì:
  1701. ;       mcall   68,12   ;¯®¤ â ¡«¨æã
  1702. ;       mov     [blocks_table],eax
  1703. ;       mov     edi,eax
  1704. ;       mov     ecx,[blocks_counter]
  1705. ;       @@:     mov     dword [edi+4],65536
  1706. ;       add     edi,8
  1707. ;       loop    @b
  1708. ;       xor     edx,edx
  1709. ;       pop     dx      ;¤«¨­  ¯®á«¥¤­¥£® ¡«®ª 
  1710. ;       mov     dword [edi-4],edx
  1711.  
  1712. ;       mov     edx,[blocks_counter]
  1713. ;       mov     edi,[blocks_table]
  1714. ;@@:    mcall   68,12,[edi+4]   ;¯®¤ ¡«®ª
  1715. ;       mov     [edi],eax
  1716. ;       add     edi,8
  1717. ;       dec     edx
  1718. ;       jnz     @b
  1719.  
  1720.         mcall   68,13,[file_buffer]
  1721.         test    eax,eax
  1722.         jnz     @f
  1723.         ;§¤¥áì ®è¨¡ª  ­  ­¥ ®á¢®¡®¦¤¥­¨¥ ¡«®ª 
  1724. @@:
  1725.         mcall   68,12,[file_size]
  1726.         mov     [file_buffer],eax
  1727.  
  1728. ;;¨¬¥¥¬ â ¡«¨æã: [ DWORD 㪠§ â¥«ì ­  ¯¥à¢ë© í«¥¬¥­â ¡«®ª  : DWORD ¤«¨­  ¡«®ª  ]
  1729.  
  1730. ;       mov     ecx,[blocks_counter]    ;®âªà뢠¥¬ ä ©«
  1731. ;       mov     edi,[blocks_table]
  1732.         mov     [func_70.func_n],0
  1733.         mov     [func_70.param1],0
  1734.         mov     [func_70.param2],0
  1735.         mov     [func_70.rezerv],0
  1736.         mov     [func_70.name],file_name
  1737. ;@@:
  1738.         push    dword [file_size];dword [edi+4]
  1739.         pop     dword [func_70.param3]
  1740.         push    dword [file_buffer];dword [edi]
  1741.         pop     dword [func_70.param4]
  1742.         mcall   70,func_70
  1743. ;       add     edi,8
  1744. ;       add     dword [func_70.param1],65536
  1745. ;       loop    @b
  1746.  
  1747.         test    eax,eax
  1748.         jz      @f
  1749.         ;®è¨¡ª  ç⥭¨ï
  1750. @@:
  1751.         call    Ctrl_HOME
  1752.  
  1753.         jmp     redraw_all
  1754. ;-------------------------------------------------------------------------------
  1755. open_dialog_save:
  1756.         mov     [OpenDialog_data.type],1        ; Save
  1757.  
  1758.         push    dword OpenDialog_data
  1759.         call    [OpenDialog_Start]
  1760.  
  1761. ;       cmp     [OpenDialog_data.status],2      ; OpenDialog does not start
  1762. ;;      je      .sysxtree       ; some kind of alternative, instead OpenDialog
  1763. ;       je      save_file
  1764.         cmp     [OpenDialog_data.status],1
  1765.         jne     still
  1766.         mov     esi,fname_buf
  1767.         mov     edi,file_name
  1768.         cld
  1769. @@:
  1770.         cmp     byte [esi],0
  1771.         je      @f
  1772.         movsb
  1773.         jmp     @b
  1774. @@:
  1775.         mov     byte [edi],0
  1776.         sub     esi,path
  1777.         mov     [edit1.size],esi
  1778.         mov     [edit1.pos],esi
  1779. ;       jmp     save_file
  1780. ;-------------------------------------------------------------------------------
  1781. save_file:      ;á®å࠭塞 ä ©«
  1782.         mov     [func_70.func_n],2
  1783.         mov     [func_70.param1],0
  1784.         mov     [func_70.param2],0
  1785.         push    [file_size]
  1786.         pop     [func_70.param3]
  1787.         push    [file_buffer]
  1788.         pop     [func_70.param4]
  1789.         mov     [func_70.rezerv],0
  1790.         mov     [func_70.name],file_name
  1791.         mcall   70,func_70
  1792.         cmp     al,0    ;á®åà ­ñ­ 㤠筮?
  1793.         je      redraw_all
  1794.         mcall   4,400*65536+31,0x80CC0000,error_save_file_string
  1795.         jmp     save_file
  1796. ;-------------------------------------------------------------------------------
  1797. draw_ed_box:    ;à¨á®¢ ­¨¥ edit box' 
  1798. .1:
  1799.         push    eax     ebx     ecx     edx
  1800.         mcall   13,180*65536+220,25*65536+70,0xaaaaaa
  1801.         bt      [flags],9
  1802.         jnc     @f
  1803.         mcall   4,246*65536+35,0x80ffffff,sel_text
  1804. @@:
  1805.         bt      [flags],2
  1806.         jnc     @f
  1807.         push    dword Option_boxs
  1808.         call    [option_box_draw]
  1809. @@:
  1810.         bt      [flags],3
  1811.         jnc     @f
  1812.         push    dword Option_boxs2
  1813.         call    [option_box_draw]
  1814. @@:
  1815.         mov     eax,ed_box_data
  1816.         mov     ecx,[eax]
  1817. @@:
  1818.         add     eax,4
  1819.         push    dword [eax]
  1820.         call    [edit_box_draw]
  1821.         loop    @b
  1822.         pop     edx     ecx     ebx     eax
  1823. .2:
  1824.         mcall   10
  1825.         cmp     al,6
  1826.         je      .mouse
  1827.         cmp     al,3
  1828.         je      .button
  1829.         cmp     al,2
  1830.         je      .keys
  1831.         cmp     al,1
  1832.         jne     .2
  1833.         call    draw_window
  1834.         call    main_area
  1835.         bt      [flags],2
  1836.         jnc     @f
  1837.         push    dword Option_boxs
  1838.         call    [option_box_draw]
  1839. @@:
  1840.         bt      [flags],3
  1841.         jnc     @f
  1842.         push    dword Option_boxs2
  1843.         call    [option_box_draw]
  1844. @@:
  1845.         jmp     .1
  1846.  
  1847. .mouse:
  1848.         bt      [flags],2
  1849.         jnc     @f
  1850.         push    dword Option_boxs
  1851.         call    [option_box_mouse]
  1852. @@:
  1853.         bt      [flags],3
  1854.         jnc     @f
  1855.         push    dword Option_boxs2
  1856.         call    [option_box_mouse]
  1857. @@:
  1858.         jmp     .2
  1859.  
  1860. .keys:
  1861.         mcall   2
  1862.         cmp     ah,13
  1863.         je      .4
  1864.         cmp     ah,27
  1865.         je      .3
  1866.  
  1867.         bt      [flags],2       ;¯à®¢¥àª  ­  ¯à¨¬¥­¨¬®áâì ᨬ¢®«®¢ 0-9,a-b
  1868.         jnc     .eb2
  1869. .eb1:
  1870.         cmp     ah,9
  1871.         jne     .eb1_1
  1872.         push    edx
  1873.         mov     edx,[option_group1]
  1874.         cmp     edx,op1
  1875.         jne     @f
  1876.         mov     edx,op2
  1877.         jmp     .eb1_2
  1878. @@:
  1879.         cmp     edx,op2
  1880.         jne     @f
  1881.         mov     edx,op3
  1882.         jmp     .eb1_2
  1883. @@:
  1884.         mov     edx,op1
  1885. .eb1_2:
  1886.         mov     [option_group1],edx
  1887.         pop     edx
  1888.         jmp     .1
  1889. .eb1_1:
  1890.         cmp     ah,48
  1891.         jb      .eb1_3
  1892.         cmp     ah,57
  1893.         jbe     .eb
  1894.         cmp     ah,102
  1895.         jg      .eb1_3
  1896.         cmp     ah,97
  1897.         jge     .eb
  1898. .eb1_3:
  1899.         cmp     ah,182
  1900.         je      .eb
  1901.         cmp     ah,8
  1902.         je      .eb
  1903.         cmp     ah,176
  1904.         je      .eb
  1905.         cmp     ah,179
  1906.         je      .eb
  1907.         dec     [edit2.shift]
  1908.         dec     [edit2.shift+4]
  1909.  
  1910.         push    dword [ed_box_data+4];  [esp]
  1911.         call    [edit_box_draw]
  1912.         jmp     .2
  1913.  
  1914. .eb2:
  1915.         bt      [flags],3
  1916.         jnc     .eb3
  1917.         cmp     ah,9
  1918.         jne     .eb2_2
  1919.         push    edx
  1920.         mov     edx,[option_group2]
  1921.         cmp     edx,op11
  1922.         jne     @f
  1923.         mov     edx,op12
  1924.         jmp     .eb2_1
  1925. @@:
  1926.         mov     edx,op11
  1927. .eb2_1:
  1928.         mov     [option_group2],edx
  1929.         pop     edx
  1930.         jmp     .1
  1931. .eb2_2:
  1932.         cmp     ah,182
  1933.         je      .eb
  1934.         cmp     ah,8
  1935.         je      .eb
  1936.         cmp     ah,176
  1937.         je      .eb
  1938.         cmp     ah,179
  1939.         je      .eb
  1940.         mov     edx,[option_group2]
  1941.         cmp     edx,op11
  1942.         jne     .eb
  1943.         cmp     ah,48
  1944.         jb      .eb2_3
  1945.         cmp     ah,57
  1946.         jbe     .eb
  1947.         cmp     ah,102
  1948.         jg      .eb2_3
  1949.         cmp     ah,97
  1950.         jge     .eb
  1951. .eb2_3:
  1952.         dec     [edit3.shift]
  1953.         dec     [edit3.shift+4]
  1954.         push    dword [ed_box_data+4];[esp]
  1955.         call    [edit_box_draw]
  1956.         jmp     .2
  1957. .eb3:
  1958.         bt      [flags],9
  1959.         jnc     .eb
  1960.         cmp     ah,9
  1961.         je      .eb3_1
  1962.         cmp     ah,182
  1963.         je      .eb3_2
  1964.         cmp     ah,8
  1965.         je      .eb3_2
  1966.         cmp     ah,176
  1967.         je      .eb3_2
  1968.         cmp     ah,179
  1969.         je      .eb3_2
  1970.         cmp     ah,48
  1971.         jb      .eb3_3
  1972.         cmp     ah,57
  1973.         jbe     .eb3_2
  1974.         cmp     ah,102
  1975.         jg      .eb3_3
  1976.         cmp     ah,97
  1977.         jge     .eb3_2
  1978. .eb3_3:
  1979.         push    edx
  1980.         mov     edx,[edit4.flags]
  1981.         and     edx,2
  1982.         jz      @f
  1983.         pop     edx
  1984.         dec     [edit4.shift]
  1985.         dec     [edit4.shift+4]
  1986.         jmp     .2
  1987. @@:
  1988.         pop     edx
  1989.         dec     [edit5.shift]
  1990.         dec     [edit5.shift+4]
  1991.         jmp     .2
  1992. .eb3_1:
  1993.         push    edx
  1994.         mov     edx,[edit4.flags]
  1995.         and     edx,2
  1996.         jz      @f
  1997.         pop     edx
  1998.         mov     [edit5.flags],2
  1999.         mov     [edit4.flags],0
  2000.         jmp     .eb3_2
  2001. @@:
  2002.         pop     edx
  2003.         mov     [edit4.flags],2
  2004.         mov     [edit5.flags],0
  2005. .eb3_2:
  2006.         push    dword [ed_box_data+4]
  2007.         call    [edit_box_key]
  2008.         push    dword [ed_box_data+8]
  2009.         call    [edit_box_key]
  2010.         jmp     .1
  2011.  
  2012. .eb:
  2013.         push    dword [ed_box_data+4];[esp]
  2014.         call    [edit_box_key]
  2015.         jmp     .2
  2016.  
  2017. .button:
  2018.         mcall   17
  2019.         cmp     ah,1
  2020.         jne     .2
  2021.         jmp     close_prog
  2022. .3:
  2023.         btr     [flags],2
  2024.         btr     [flags],3
  2025.         add     esp,4
  2026.         jmp     redraw_all
  2027. .4:
  2028.         mcall   13,180*65536+220,25*65536+70,frgrd_color
  2029.         ret
  2030.  
  2031.  
  2032. ;-------------------------------------------------
  2033. ;-------------------------------------------------
  2034. ;-------------------------------------------------
  2035.  
  2036. strtohex:
  2037. ;enter: edi - pointer to string,ebx - pointer to size of string; exit: eax in hex
  2038.         mov     esi,hex8_string
  2039. @@:
  2040.         mov     ah,[edi+ecx-1]  ;®¡à ¡®âª  ¢¢¥¤ñ­­ëå ᨬ¢®«®¢
  2041.         sub     ah,48
  2042.         cmp     ah,9
  2043.         jbe     .1
  2044.         sub     ah,7
  2045.         cmp     ah,15
  2046.         jbe     .1
  2047.         sub     ah,32
  2048. .1:
  2049.         mov     [esi+ecx-1],ah
  2050.         dec     ecx
  2051.         jnz     @b
  2052.         mov     ecx,[ebx]
  2053.         xor     eax,eax
  2054. .2:
  2055.         shl     eax,4
  2056.         or      al,[esi]
  2057.         inc     esi
  2058.         dec     ecx
  2059.         jnz     .2
  2060.         ret
  2061.  
  2062. Ctrl_G:
  2063.         bts     [flags],2
  2064.         mov     dword [ed_box_data],1
  2065.         mov     dword [ed_box_data+4],edit2
  2066.         call    draw_ed_box
  2067.         btr     [flags],2
  2068.         mov     ecx,[edit2.size]
  2069.         test    ecx,ecx
  2070.         jz      .end
  2071.         cmp     ecx,8
  2072.         jg      Ctrl_G
  2073.  
  2074.         mov     edi,go_to_string
  2075.         mov     ebx,edit2.size
  2076.         call    strtohex
  2077.  
  2078.         cmp     eax,[file_size] ;¢ë¡®à check_box' 
  2079.         jg      Ctrl_G
  2080.         mov     edx,[option_group1]
  2081.         cmp     edx,op1 ;abs
  2082.         je      .abs
  2083.         cmp     edx,op2
  2084.         jne     .back
  2085.         add     eax,[current_offset]    ;forward
  2086.         cmp     eax,[file_size]
  2087.         jg      Ctrl_G
  2088.         mov     edi,[screen_table]
  2089.         mov     edi,[edi]
  2090.         xor     edx,edx
  2091. @@:
  2092.         add     edx,edi
  2093.         cmp     eax,edx
  2094.         jg      @b
  2095.         sub     edx,edi
  2096.         mov     [begin_offset],edx
  2097.         sub     eax,edx
  2098.         shl     eax,1
  2099.         inc     eax
  2100.         mov     [cursor],eax
  2101.         jmp     .end
  2102.  
  2103. .back:
  2104.         cmp     eax,[current_offset]    ;back
  2105.         jg      Ctrl_G
  2106.         mov     edi,[screen_table]
  2107.         mov     edi,[edi]
  2108.         mov     ebx,[current_offset]
  2109.         sub     ebx,eax
  2110.         xor     edx,edx
  2111. @@:
  2112.         add     edx,edi
  2113.         cmp     edx,ebx
  2114.         jb      @b
  2115.         sub     edx,edi
  2116.         mov     [begin_offset],edx
  2117.         sub     ebx,edx
  2118.         mov     edx,ebx
  2119.         shl     edx,1
  2120.         inc     edx
  2121.         mov     [cursor],edx
  2122.         jmp     .end
  2123. .abs:
  2124.         mov     esi,[screen_table]
  2125.         mov     esi,[esi]
  2126.         xor     ebx,ebx
  2127. .3:
  2128.         add     ebx,esi
  2129.         cmp     eax,ebx
  2130.         jg      .3
  2131.         sub     ebx,esi
  2132.         cmp     ebx,[file_size]
  2133.         jg      Ctrl_G
  2134.         mov     [begin_offset],ebx
  2135.         sub     eax,ebx
  2136.         shl     eax,1
  2137.         inc     eax
  2138.         mov     [cursor],eax
  2139. .end:
  2140.         jmp     red
  2141.  
  2142. Ctrl_B:
  2143.         bts     [flags],9
  2144.         mov     dword [ed_box_data],2
  2145.         mov     dword [ed_box_data+4],edit4
  2146.         mov     dword [ed_box_data+8],edit5
  2147.         call    draw_ed_box
  2148.         btr     [flags],9
  2149.  
  2150.         mov     ecx,[edit4.size]
  2151.         test    ecx,ecx
  2152.         jz      .end
  2153.         cmp     ecx,8
  2154.         jg      Ctrl_B
  2155.  
  2156.         mov     edi,sel1_string
  2157.         mov     ebx,edit4.size
  2158.         call    strtohex
  2159.  
  2160.         cmp     eax,[file_size]
  2161.         jge     Ctrl_B
  2162.         push    eax     ;from
  2163.         mov     ecx,[edit5.size]
  2164.         test    ecx,ecx
  2165.         jz      .end
  2166.         cmp     ecx,8
  2167.         jg      Ctrl_B
  2168.  
  2169.         mov     edi,sel2_string
  2170.         mov     ebx,edit5.size
  2171.         call    strtohex
  2172.  
  2173.         cmp     eax,[file_size]
  2174.         jb      @f
  2175.         pop     eax
  2176.         jmp     Ctrl_B
  2177. @@:
  2178.         pop     [shblock_beg]
  2179.         cmp     eax,[shblock_beg]
  2180.         jae     @f
  2181.         xchg    eax,[shblock_beg]
  2182. @@:
  2183.         mov     [shblock_end],eax
  2184.         bts     [flags],8
  2185. .end:
  2186.         jmp     red
  2187.  
  2188. Ctrl_F:
  2189.         bts     [flags],3
  2190.         mov     dword [ed_box_data],1
  2191.         mov     dword [ed_box_data+4],edit3
  2192.         call    draw_ed_box
  2193.         btr     [flags],3
  2194.         mov     ecx,[edit3.size]
  2195.         test    ecx,ecx
  2196.         jz      .end
  2197.         cmp     ecx,8
  2198.         jg      Ctrl_F
  2199.         mov     edi,find_string
  2200.         mov     edx,[option_group2]
  2201.         cmp     edx,op11
  2202.         jne     .find
  2203.         mov     eax,find_string
  2204.         push    dword [eax]
  2205.         push    dword [eax+4]
  2206.         bts     [flags],0
  2207.         mov     ebx,edit3.size
  2208.         call    strtohex
  2209.         mov     ecx,[edit3.size]
  2210.         bt      cx,0
  2211.         jnc     .3
  2212.         inc     ecx
  2213.         shl     eax,4
  2214. .3:
  2215.         shr     ecx,1
  2216. .4:
  2217.         mov     [edi+ecx-1],al
  2218.         shr     eax,8
  2219.         loop    .4
  2220. .find:
  2221.         mov     esi,[current_offset]
  2222.         mov     ebx,[file_size]
  2223.         mov     eax,ebx
  2224.         add     eax,[file_buffer]
  2225.         add     esi,[file_buffer]
  2226. .5:
  2227.         mov     ecx,[edit3.size]
  2228.         cmp     edx,op11
  2229.         jne     .7
  2230.         bt      cx,0
  2231.         jnc     .6
  2232.         inc     ecx
  2233. .6:
  2234.         shr     ecx,1
  2235. .7:
  2236.         cld
  2237. @@:
  2238.         cmp     esi,eax
  2239.         jg      .end
  2240.         cmpsb
  2241.         je      .8
  2242.         mov     edi,find_string
  2243.         jmp     .5
  2244. .8:
  2245.         loop    @b
  2246.         sub     esi,[file_buffer]
  2247.         mov     ecx,[edit3.size]
  2248.         cmp     edx,op11
  2249.         jne     .10
  2250.         bt      cx,0
  2251.         jnc     .9
  2252.         inc     ecx
  2253. .9:
  2254.         shr     ecx,1
  2255. .10:
  2256.         sub     esi,ecx
  2257.         xor     edx,edx
  2258.         mov     edi,[screen_table]
  2259.         mov     edi,[edi]
  2260. @@:
  2261.         add     edx,edi
  2262.         cmp     edx,esi
  2263.         jb      @b
  2264.         sub     edx,edi
  2265.         mov     [begin_offset],edx
  2266.         sub     esi,edx
  2267.         shl     esi,1
  2268.         inc     esi
  2269.         mov     [cursor],esi
  2270. .end:
  2271.         bt      [flags],0
  2272.         jnc     @f
  2273.         mov     eax,find_string
  2274.         pop     dword [eax+4]
  2275.         pop     dword [eax]
  2276.         btr     [flags],0
  2277. @@:
  2278.         jmp     red
  2279.  
  2280. invert_byte:
  2281.         mov     ebx,[current_offset]
  2282.         cmp     ebx,[file_size]
  2283.         jae     still
  2284.         add     ebx,[file_buffer]
  2285.         not     byte [ebx]
  2286.         jmp     red
  2287.  
  2288.  
  2289. Insert: ;¯¥à¥ª«î祭¨¥   ०¨¬   ¢áâ ¢ª¨/§ ¬¥­ë
  2290.         btc     [flags],1       ;not [insert_mod]
  2291.         call    show_insert
  2292.         jmp     red
  2293.  
  2294.  
  2295. DEL:
  2296.         bt      [flags],1
  2297.         jnc     still
  2298.         mov     edi,[current_offset]
  2299.         mov     esi,[file_buffer]
  2300.         mov     edx,[file_size]
  2301.         test    edx,edx
  2302.         jz      still
  2303.         dec     edx
  2304.         cmp     edi,edx
  2305.         jbe     @f
  2306.         call    LEFT
  2307.         call    LEFT
  2308.         jmp     red
  2309. @@:
  2310.         jb      @f
  2311.         call    LEFT
  2312.         call    LEFT
  2313. @@:
  2314.         cmp     edi,edx
  2315.         je      @f
  2316.         mov     al,[edi+esi+1]
  2317.         mov     [edi+esi],al
  2318.         inc     edi
  2319.         jmp     @b
  2320. @@:
  2321.         dec     [file_size]
  2322.         call    show_file_size
  2323.         jmp     red
  2324.  
  2325.  
  2326. BackSpace:
  2327.         bt      [flags],1       ;cmp [insert_mod],0
  2328.         jnc     still   ;je still
  2329.         mov     edi,[current_offset]
  2330.         mov     esi,[file_buffer]
  2331.         mov     edx,[file_size]
  2332.         test    edx,edx
  2333.         jz      still
  2334.         test    edi,edi
  2335.         jz      still
  2336.         call    LEFT
  2337.         call    LEFT
  2338.         cmp     [cursor],2
  2339.         jne     @f
  2340.         cmp     edx,1
  2341.         jne     @f
  2342.         dec     [cursor]
  2343. @@:
  2344.         cmp     edi,edx
  2345.         jge     @f
  2346.         mov     al,[edi+esi]
  2347.         mov     [edi+esi-1],al
  2348.         inc     edi
  2349.         jmp     @b
  2350. @@:
  2351.         dec     [file_size]
  2352.         call    show_file_size
  2353.         jmp     red
  2354.  
  2355.  
  2356. Ctrl_UP:
  2357.         cmp     [begin_offset],0
  2358.         je      @f
  2359.         mov     eax,[bytes_per_line]
  2360.         sub     [begin_offset],eax
  2361. @@:
  2362.         ret
  2363.  
  2364.  
  2365. Ctrl_DOWN:
  2366.         mov     eax,[cursor]
  2367.         dec     eax
  2368.         shr     eax,1
  2369.         add     eax,[begin_offset]
  2370.         mov     ebx,[bytes_per_line]
  2371.         add     eax,ebx
  2372.         cmp     eax,[file_size]
  2373.         jge     @f
  2374.         add     [begin_offset],ebx
  2375. @@:
  2376.         ret
  2377.  
  2378.  
  2379. UP:
  2380.         mov     eax,[current_offset]
  2381.         cmp     eax,[bytes_per_line]
  2382.         jb      still
  2383.         mov     eax,[cursor]
  2384.         dec     ax
  2385.         shr     ax,1
  2386.         cmp     eax,[bytes_per_line]
  2387.         jge     @f
  2388.         mov     eax,[bytes_per_line]
  2389.         sub     [begin_offset],eax
  2390.         jmp     red
  2391. @@:
  2392.         mov     eax,[bytes_per_line]
  2393.         shl     ax,1
  2394.         sub     [cursor],eax
  2395.         jmp     red
  2396.  
  2397.  
  2398. DOWN:   ;­      áâà®ªã  ¢­¨§
  2399.         mov     eax,[current_offset]
  2400.         add     eax,[bytes_per_line]
  2401.         bt      [flags],1
  2402.         jnc     @f
  2403.         dec     eax
  2404. @@:
  2405.         cmp     eax,[file_size]
  2406.         jge     still   ;¥á«¨ ¬ë ­  ¯®á«¥¤­¥© áâப¥ ä ©« , â® á⮯
  2407.         mov     eax,[screen_table]
  2408.         mov     eax,[eax]
  2409.         mov     edx,[cursor]
  2410.         dec     dx
  2411.         shr     dx,1
  2412.         add     edx,[bytes_per_line]
  2413.         cmp     eax,edx ;­  ¯®á«¥¤­¥© áâப¥?
  2414.         jbe     @f
  2415.         mov     eax,[bytes_per_line]
  2416.         shl     ax,1
  2417.         add     [cursor],eax
  2418.         ret
  2419. @@:
  2420.         mov     eax,[bytes_per_line]
  2421.         add     [begin_offset],eax
  2422.         ret
  2423.  
  2424.  
  2425. LEFT:
  2426.         cmp     [cursor],1
  2427.         jbe     @f
  2428.         dec     [cursor]
  2429.         jmp     .end
  2430. @@:
  2431.         cmp     [begin_offset],0        ;ªãàá®à ­  ¯¥à¢®© áâப¥ ᮠᬥ饭¨¥¬ 0?
  2432.         jne     @f      ;¨­ ç¥ ᬥ頥¬ á ¯à®ªàã⪮© ¢¢¥àå ¢¢¥àå ¨ ¢ ª®­¥æ áâப¨
  2433. ;       inc     [cursor]
  2434.         jmp     .end;still      ;⮣¤  á⮯
  2435. @@:
  2436.         mov     eax,[bytes_per_line]
  2437.         sub     [begin_offset],eax
  2438.         shl     ax,1
  2439.         dec     eax
  2440.         add     [cursor],eax
  2441. .end:
  2442.         ret
  2443.  
  2444.  
  2445. RIGHT:
  2446.         mov     ecx,[begin_offset]      ;¢ëç¨á«ï¥¬ ᬥ饭¨¥ ªãàá®à 
  2447.         mov     edx,[cursor]    ;¤«ï ¯à®¢¥àª¨ áãé¥á⢮¢ ­¨ï
  2448.         shr     edx,1   ;á«¥¤ãî饣® ᨬ¢®« 
  2449.         add     ecx,edx
  2450.         bt      [flags],1
  2451.         jnc     @f
  2452.         dec     ecx     ;áà ¢­¨¢ ¥¬ á à §¬¥à®¬ ä ©« 
  2453. @@:
  2454.         cmp     ecx,[file_size] ;¯®«®¦¥­¨¥¬ ªãàá®à  - ­¥ ¤ «¥¥ 1 ¡ ©â  ®â ª®­æ  ä ©« 
  2455.         jge     red
  2456.         cmp     [file_size],0
  2457.         je      still
  2458.         mov     eax,[screen_table]
  2459.         mov     eax,[eax]
  2460.         mov     ecx,[begin_offset]
  2461.         cmp     eax,edx ;áà ¢­¥­¨¥ ­  ­¨¦­îî áâபã
  2462.         jbe     @f
  2463.         inc     [cursor]        ;ªãàá®à ¢¯à ¢®
  2464.         jmp     red
  2465. @@:
  2466.         mov     ecx,[bytes_per_line]    ;ᬥ頥¬áï ­  áâà®çªã ¢­¨§
  2467.         add     [begin_offset],ecx      ;á ¯à®ªàã⪮©
  2468.         shl     cx,1
  2469.         dec     cx
  2470.         sub     [cursor],ecx
  2471.         jmp     red
  2472.  
  2473.  
  2474. PGDN:
  2475.         mov     edi,[screen_table]
  2476.         mov     eax,[edi]
  2477.         shl     eax,1
  2478.         add     eax,[begin_offset]
  2479.         cmp     eax,[file_size] ;¥áâì «¨ ¢®§¬®¦­®áâì ᬥáâ¨âìáï ­  áâà ­¨æã?
  2480.         jg      Ctrl_END
  2481.         mov     eax,[edi]
  2482.         add     [begin_offset],eax
  2483. ;       mov     ebx,[cursor]
  2484. ;       dec     ebx
  2485. ;       xor     ecx,ecx
  2486. ;       bt      ebx,0
  2487. ;       jnc     @f
  2488. ;       inc     ecx
  2489. ;       @@:     shr     ebx,1
  2490. ;       add     ebx,eax
  2491. ;       @@:     cmp     ebx,[file_size]
  2492. ;       jbe     @f
  2493. ;       sub     ebx,[bytes_per_line]
  2494. ;       jmp     @b
  2495. ;       @@:     sub     ebx,eax
  2496. ;       shl     ebx,1
  2497. ;       inc     ebx
  2498. ;       add     ebx,ecx
  2499. ;       mov     [cursor],ebx
  2500.         jmp     red
  2501.  
  2502.  
  2503. PGUP:
  2504.         mov     eax,[screen_table]
  2505.         mov     eax,[eax]
  2506.         mov     edx,[begin_offset]
  2507.         cmp     eax,edx
  2508.         jbe     @f
  2509.         call    Ctrl_HOME
  2510.         jmp     red
  2511. @@:
  2512.         sub     [begin_offset],eax
  2513.         jmp     red
  2514.  
  2515.  
  2516. HOME:
  2517.         mov     eax,[cursor]
  2518.         dec     ax
  2519.         shr     ax,1
  2520.         mov     ecx,[bytes_per_line]
  2521.         xor     edx,edx
  2522.         div     ecx
  2523.         shl     dx,1
  2524.         sub     [cursor],edx
  2525.         bt      [cursor],0
  2526.         jc      @f
  2527.         dec     [cursor]
  2528. @@:
  2529.         ret
  2530.  
  2531.  
  2532. END_:
  2533.         mov     eax,[cursor]
  2534.         dec     ax
  2535.         shr     ax,1
  2536.         mov     ecx,[bytes_per_line]
  2537.         xor     edx,edx
  2538.         div     ecx
  2539.         mov     eax,[current_offset]
  2540.         sub     eax,edx
  2541.         add     eax,[bytes_per_line]
  2542.         mov     edx,[file_size]
  2543.         cmp     eax,edx
  2544.         jbe     @f
  2545.         sub     edx,eax
  2546.         add     eax,edx
  2547. @@:
  2548.         sub     eax,[begin_offset]
  2549.         shl     eax,1
  2550.         test    eax,eax
  2551.         jz      red
  2552.         dec     eax
  2553.         mov     [cursor],eax
  2554.         jmp     red
  2555.  
  2556.  
  2557. Ctrl_HOME:
  2558.         mov     [begin_offset],0
  2559.         mov     [cursor],1
  2560.         ret
  2561.  
  2562.  
  2563. Ctrl_END:
  2564.         mov     eax,[file_size]
  2565.         mov     ecx,[screen_table]
  2566.         mov     ecx,[ecx]
  2567.         xor     edx,edx
  2568.         div     ecx
  2569.         test    dx,dx
  2570.         jnz     @f
  2571.         test    eax,eax
  2572.         jz      @f
  2573.         mov     edx,ecx
  2574.         dec     eax
  2575. @@:
  2576.         push    dx
  2577.         xor     dx,dx
  2578.         mul     ecx
  2579.         pop     dx
  2580.         shl     edx,1
  2581.         cmp     edx,1
  2582.         jg      @f
  2583.         mov     edx,2
  2584. @@:
  2585.         dec     edx
  2586.         mov     [begin_offset],eax
  2587.         mov     [cursor],edx
  2588.         jmp     red
  2589.  
  2590.  
  2591. ESC:
  2592.         btr     [flags],8
  2593.         jmp     red
  2594.  
  2595. copy_to_buf:
  2596.         bt      [flags],8
  2597.         jnc     .1
  2598.         mov     eax,[shblock_end]
  2599.         sub     eax,[shblock_beg]
  2600.         inc     eax
  2601.         mov     ecx,eax
  2602.         mov     [copy_len],eax
  2603.         mcall   68,20,,[copy_buf]
  2604.         mov     esi,[shblock_beg]
  2605.         mov     edi,[copy_buf]
  2606.         add     esi,[file_buffer]
  2607.         mov     ecx,[copy_len]
  2608.         cld
  2609. @@:
  2610.         movsb
  2611.         loop    @b
  2612.         bts     [flags],10
  2613.         xor     eax,eax
  2614.         ret
  2615. .1:
  2616.         or      eax,-1
  2617.         ret
  2618.  
  2619. Ctrl_C:
  2620.         call    copy_to_buf
  2621.         jmp     still
  2622.  
  2623. shblock_sz      dd      0
  2624.  
  2625. Ctrl_V:
  2626.         bt      [flags],10
  2627.         jnc     still
  2628.         bt      [flags],8
  2629.         jnc     .past_kurs
  2630. ;¢áâ ¢«ï¥¬ ¡«®ª ¢ ¢ë¤¥«¥­­ãî ®¡« áâì
  2631.         mov     ebx,[shblock_end]
  2632.         sub     ebx,[shblock_beg]
  2633.         inc     ebx
  2634.         mov     [shblock_sz],ebx
  2635.         mov     esi,[copy_buf]
  2636.         mov     edi,[file_buffer]
  2637.         add     edi,[shblock_beg]
  2638.         mov     eax,[copy_len]
  2639. .1:
  2640.         cld
  2641. @@:
  2642.         movsb
  2643.         dec     eax
  2644.         jz      .del
  2645.         dec     ebx
  2646.         jnz     @b
  2647. .add:
  2648.         push    esi     edi     eax
  2649.         push    [file_size]
  2650.         add     [file_size],eax
  2651.         call    raspred_mem
  2652.         pop     ecx
  2653.         mov     edi,[esp+4]
  2654.         add     ecx,[file_buffer]
  2655.         sub     ecx,edi
  2656.         inc     ecx
  2657.         mov     edi,[file_size]
  2658.         add     edi,[file_buffer]
  2659.         mov     esi,edi
  2660.         sub     esi,eax
  2661.         std
  2662. @@:
  2663.         movsb
  2664.         loop    @b
  2665.         pop     eax edi esi
  2666.         cld
  2667. @@:
  2668.         movsb
  2669.         dec     eax
  2670.         jnz     @b
  2671.         mov     eax,[shblock_beg]
  2672.         add     eax,[copy_len]
  2673.         dec     eax
  2674.         mov     [shblock_end],eax
  2675.         jmp     red
  2676. .del:
  2677.         dec     ebx
  2678.         jz      red
  2679.         mov     ecx,[file_size]
  2680.         add     ecx,[file_buffer]
  2681.         sub     ecx,edi
  2682.         mov     esi,edi
  2683.         add     esi,ebx
  2684.         cld
  2685. @@:     movsb
  2686.         loop    @b
  2687.         sub     [file_size],ebx
  2688.         call    raspred_mem
  2689.         mov     eax,[shblock_beg]
  2690.         add     eax,[copy_len]
  2691.         dec     eax
  2692.         mov     [shblock_end],eax
  2693.         jmp     red
  2694.  
  2695. ;¥á«¨ ¡«®ª ­¥ ¢ë¤¥«¥­, â® ¢áâ ¢«ï¥¬ ¡«®ª ¯¥à¥¤ ªãàá®à®¬
  2696. .past_kurs:
  2697. ;       bt      [flags],1
  2698. ;       jnc     still
  2699. ;       mov     esi,[file_buffer]
  2700. ;       add     esi,[current_offset]
  2701. ;       jmp     red
  2702.         jmp     still
  2703.  
  2704. Ctrl_X:
  2705.         bt      [flags],1
  2706.         jnc     still
  2707.         call    copy_to_buf
  2708.         test    eax,eax
  2709.         jnz     still
  2710.  
  2711.         mov     ecx,[file_size]
  2712.         sub     ecx,[copy_len]
  2713.         sub     ecx,[shblock_beg]
  2714.         inc     ecx
  2715.         mov     ebx,[file_size]
  2716.         mov     edi,[shblock_beg]
  2717.         mov     esi,[shblock_end]
  2718.         inc     esi
  2719.         add     esi,[file_buffer]
  2720.         add     edi,[file_buffer]
  2721.         add     ebx,[file_buffer]
  2722.         cld
  2723. @@:
  2724.         cmp     esi,ebx
  2725.         je      .1
  2726.         movsb
  2727.         loop    @b
  2728. .1:
  2729.         mov     eax,[file_size]
  2730.         sub     eax,[copy_len]
  2731.         mov     [file_size],eax
  2732.         btr     [flags],8
  2733.  
  2734.         mov     eax,[shblock_beg]
  2735.         mov     esi,[screen_table]
  2736.         mov     esi,[esi]
  2737.         xor     ebx,ebx
  2738. .3:
  2739.         add     ebx,esi
  2740.         cmp     eax,ebx
  2741.         jg      .3
  2742.         sub     ebx,esi
  2743. ;       cmp     ebx,[file_size]
  2744. ;       jg      Ctrl_G
  2745.         mov     [begin_offset],ebx
  2746.         sub     eax,ebx
  2747.         shl     eax,1
  2748.         inc     eax
  2749.         mov     [cursor],eax
  2750.         jmp     red
  2751.  
  2752. ;---------------------------------------------------------------------
  2753. open_dialog:
  2754.         mov     [OpenDialog_data.type],0        ; Open
  2755.  
  2756.         push    dword OpenDialog_data
  2757.         call    [OpenDialog_Start]
  2758.  
  2759. ;       cmp     [OpenDialog_data.status],2      ; OpenDialog does not start
  2760. ;       je      .sysxtree       ; some kind of alternative, instead OpenDialog
  2761.         cmp     [OpenDialog_data.status],1
  2762.         jne     still
  2763.         mov     esi,fname_buf
  2764. .load:
  2765.         mov     edi,file_name
  2766.         cld
  2767. @@:
  2768.         cmp     byte [esi],0
  2769.         je      @f
  2770.         movsb
  2771.         jmp     @b
  2772. @@:
  2773.         mov     byte [edi],0
  2774.         sub     esi,path
  2775.         mov     [edit1.size],esi
  2776.         mov     [edit1.pos],esi
  2777.         jmp     open_file
  2778. ;---------------------------------------------------------------------
  2779.  
  2780. ;       DATA    AREA
  2781.  
  2782.  
  2783. ;---------------------------------------------------------
  2784. ;----------------------- DATA AREA------------------------
  2785. ;---------------------------------------------------------
  2786. align 4
  2787. ProcLib_import:
  2788. OpenDialog_Init         dd aOpenDialog_Init
  2789. OpenDialog_Start        dd aOpenDialog_Start
  2790. ;OpenDialog__Version    dd aOpenDialog_Version
  2791.         dd      0
  2792.         dd      0
  2793. aOpenDialog_Init        db 'OpenDialog_init',0
  2794. aOpenDialog_Start       db 'OpenDialog_start',0
  2795. ;aOpenDialog_Version    db 'Version_OpenDialog',0
  2796. ;---------------------------------------------------------------------
  2797. align   4
  2798. Box_lib_import:
  2799. edit_box_draw           dd aEdit_box_draw
  2800. edit_box_key            dd aEdit_box_key
  2801. edit_box_mouse          dd aEdit_box_mouse
  2802. version_ed              dd aVersion_ed
  2803.  
  2804. option_box_draw         dd aOption_box_draw
  2805. option_box_mouse        dd aOption_box_mouse
  2806. version_op              dd aVersion_op
  2807.  
  2808. scrollbar_ver_draw      dd aScrollbar_ver_draw
  2809. scrollbar_ver_mouse     dd aScrollbar_ver_mouse
  2810. scrollbar_hor_draw      dd aScrollbar_hor_draw
  2811. scrollbar_hor_mouse     dd aScrollbar_hor_mouse
  2812. version_scrollbar       dd aVersion_scrollbar
  2813.  
  2814. menu_bar_draw           dd aMenu_bar_draw
  2815. menu_bar_mouse          dd aMenu_bar_mouse
  2816. version_menu_bar        dd aVersion_menu_bar
  2817.  
  2818.         dd 0
  2819.         dd 0
  2820.  
  2821. aEdit_box_draw          db 'edit_box',0
  2822. aEdit_box_key           db 'edit_box_key',0
  2823. aEdit_box_mouse         db 'edit_box_mouse',0
  2824. aVersion_ed             db 'version_ed',0
  2825.  
  2826. aOption_box_draw        db 'option_box_draw',0
  2827. aOption_box_mouse       db 'option_box_mouse',0
  2828. aVersion_op             db 'version_op',0
  2829.  
  2830. aScrollbar_ver_draw     db 'scrollbar_v_draw',0
  2831. aScrollbar_ver_mouse    db 'scrollbar_v_mouse',0
  2832. aScrollbar_hor_draw     db 'scrollbar_h_draw',0
  2833. aScrollbar_hor_mouse    db 'scrollbar_h_mouse',0
  2834. aVersion_scrollbar      db 'version_scrollbar',0
  2835.  
  2836. aMenu_bar_draw          db 'menu_bar_draw',0
  2837. aMenu_bar_mouse         db 'menu_bar_mouse',0
  2838. aVersion_menu_bar       db 'version_menu_bar',0
  2839. ;---------------------------------------------------------------------
  2840. align   4
  2841. scroll_bar_data_vertical:
  2842. .x:
  2843. .size_x         dw scroll_width_size;+0
  2844. .start_x        dw 565  ;+2
  2845. .y:
  2846. .size_y         dw 284  ;+4
  2847. .start_y        dw 19   ;+6
  2848. .btn_high       dd scroll_width_size    ;+8
  2849. .type           dd 1    ;+12
  2850. .max_area       dd 300+20       ;+16
  2851. .cur_area       dd 50   ;+20
  2852. .position       dd 0    ;+24
  2853. .bckg_col       dd 0xAAAAAA     ;+28
  2854. .frnt_col       dd 0xCCCCCC     ;+32
  2855. .line_col       dd 0    ;+36
  2856. .redraw         dd 0    ;+40
  2857. .delta          dw 0    ;+44
  2858. .delta2         dw 0    ;+46
  2859. .run_x:
  2860. .r_size_x       dw 0    ;+48
  2861. .r_start_x      dw 0    ;+50
  2862. .run_y:
  2863. .r_size_y       dw 0    ;+52
  2864. .r_start_y      dw 0    ;+54
  2865. .m_pos          dd 0    ;+56
  2866. .m_pos_2        dd 0    ;+60
  2867. .m_keys         dd 0    ;+64
  2868. .run_size       dd 0    ;+68
  2869. .position2      dd 0    ;+72
  2870. .work_size      dd 0    ;+76
  2871. .all_redraw     dd 0    ;+80
  2872. .ar_offset      dd 10   ;+84
  2873. ;---------------------------------------------------------------------
  2874. align   4
  2875. scroll_bar_data_horizontal:
  2876. .x:
  2877. .size_x         dw 300  ;0      ;+0
  2878. .start_x        dw 0    ;0      ;+2
  2879. .y:
  2880. .size_y         dw scroll_width_size    ;0      ;+4
  2881. .start_y        dw 300  ;0      ;+6
  2882. .btn_high       dd scroll_width_size    ;+8
  2883. .type           dd 1    ;+12
  2884. .max_area       dd 300  ;+16
  2885. .cur_area       dd 30   ;+20
  2886. .position       dd 1    ;+24
  2887. .bckg_col       dd 0xAAAAAA     ;+28
  2888. .frnt_col       dd 0xCCCCCC     ;+32
  2889. .line_col       dd 0    ;+36
  2890. .redraw         dd 0    ;+40
  2891. .delta          dw 0    ;+44
  2892. .delta2         dw 0    ;+46
  2893. .run_x:
  2894. .r_size_x       dw 0    ;+48
  2895. .r_start_x      dw 0    ;+50
  2896. .run_y:
  2897. .r_size_y       dw 0    ;+52
  2898. .r_start_y      dw 0    ;+54
  2899. .m_pos          dd 0    ;+56
  2900. .m_pos_2        dd 0    ;+60
  2901. .m_keys         dd 0    ;+64
  2902. .run_size       dd 0    ;+68
  2903. .position2      dd 0    ;+72
  2904. .work_size      dd 0    ;+76
  2905. .all_redraw     dd 0    ;+80
  2906. .ar_offset      dd 10   ;+84
  2907. ;---------------------------------------------------------------------
  2908. align   4
  2909. menu_data_1:
  2910. .type:          dd 0    ;+0
  2911. .x:
  2912. .size_x         dw 40   ;+4
  2913. .start_x        dw 2    ;+6
  2914. .y:
  2915. .size_y         dw 15   ;+8
  2916. .start_y        dw 2    ;+10
  2917. .text_pointer:  dd menu_text_area       ;0      ;+12
  2918. .pos_pointer:   dd menu_text_area.1     ;0      ;+16
  2919. .text_end       dd menu_text_area.end   ;0      ;+20
  2920. .mouse_pos      dd 0    ;+24
  2921. .mouse_keys     dd 0    ;+28
  2922. .x1:
  2923. .size_x1        dw 40   ;+32
  2924. .start_x1       dw 2    ;+34
  2925. .y1:
  2926. .size_y1        dw 100  ;+36
  2927. .start_y1       dw 18   ;+38
  2928. .bckg_col       dd 0xeeeeee     ;+40
  2929. .frnt_col       dd 0xff ;+44
  2930. .menu_col       dd 0xffffff     ;+48
  2931. .select         dd 0    ;+52
  2932. .out_select     dd 0    ;+56
  2933. .buf_adress     dd 0    ;+60
  2934. .procinfo       dd 0    ;+64
  2935. .click          dd 0    ;+68
  2936. .cursor         dd 0    ;+72
  2937. .cursor_old     dd 0    ;+76
  2938. .interval       dd 16   ;+80
  2939. .cursor_max     dd 0    ;+84
  2940. .extended_key   dd 0    ;+88
  2941. .menu_sel_col   dd 0x00cc00     ;+92
  2942. .bckg_text_col  dd 0    ;+96
  2943. .frnt_text_col  dd 0xffffff     ;+100
  2944. .mouse_keys_old dd 0    ;+104
  2945. .font_height    dd 8    ;+108
  2946. .cursor_out     dd 0    ;+112
  2947. .get_mouse_flag dd 0    ;+116
  2948.  
  2949. menu_text_area:
  2950.         db 'File',0
  2951. .1:
  2952.         db 'Open',0
  2953.         db 'Save',0
  2954.         db 'Exit',0
  2955. .end:
  2956.         db 0
  2957. ;---------------------------------------------------------------------
  2958. align   4
  2959. menu_data_2:
  2960. .type:          dd 0    ;+0
  2961. .x:
  2962. .size_x         dw 40   ;+4
  2963. .start_x        dw 43   ;+6
  2964. .y:
  2965. .size_y         dw 15   ;+8
  2966. .start_y        dw 2    ;+10
  2967. .text_pointer:  dd menu_text_area_2     ;0      ;+12
  2968. .pos_pointer:   dd menu_text_area_2.1   ;0      ;+16
  2969. .text_end       dd menu_text_area_2.end ;0      ;+20
  2970. .mouse_pos      dd 0    ;+24
  2971. .mouse_keys     dd 0    ;+28
  2972. .x1:
  2973. .size_x1        dw 50   ;+32
  2974. .start_x1       dw 43   ;+34
  2975. .y1:
  2976. .size_y1        dw 100  ;+36
  2977. .start_y1       dw 18   ;+38
  2978. .bckg_col       dd 0xeeeeee     ;+40
  2979. .frnt_col       dd 0xff ;+44
  2980. .menu_col       dd 0xffffff     ;+48
  2981. .select         dd 0    ;+52
  2982. .out_select     dd 0    ;+56
  2983. .buf_adress     dd 0    ;+60
  2984. .procinfo       dd 0    ;+64
  2985. .click          dd 0    ;+68
  2986. .cursor         dd 0    ;+72
  2987. .cursor_old     dd 0    ;+76
  2988. .interval       dd 16   ;+80
  2989. .cursor_max     dd 0    ;+84
  2990. .extended_key   dd 0    ;+88
  2991. .menu_sel_col   dd 0x00cc00     ;+92
  2992. .bckg_text_col  dd 0    ;       +96
  2993. .frnt_text_col  dd 0xffffff     ;+100
  2994. .mouse_keys_old dd 0    ;+104
  2995. .font_height    dd 8    ;+108
  2996. .cursor_out     dd 0    ;+112
  2997. .get_mouse_flag dd 0    ;+116
  2998.  
  2999. menu_text_area_2:
  3000.         db 'View',0
  3001. .1:
  3002.         db 'Add 4',0
  3003.         db 'Add 8',0
  3004.         db 'Sub 4',0
  3005.         db 'Sub 8',0
  3006. .end:
  3007.         db 0
  3008. ;---------------------------------------------------------------------
  3009. align   4
  3010. menu_data_3:
  3011. .type:          dd 0    ;+0
  3012. .x:
  3013. .size_x         dw 40   ;+4
  3014. .start_x        dw 84   ;+6
  3015. .y:
  3016. .size_y         dw 15   ;+8
  3017. .start_y        dw 2    ;+10
  3018. .text_pointer:  dd menu_text_area_3     ;0      ;+12
  3019. .pos_pointer:   dd menu_text_area_3.1   ;0      ;+16
  3020. .text_end       dd menu_text_area_3.end ;0      ;+20
  3021. .mouse_pos      dd 0    ;+24
  3022. .mouse_keys     dd 0    ;+28
  3023. .x1:
  3024. .size_x1        dw 40   ;+32
  3025. .start_x1       dw 84   ;+34
  3026. .y1:
  3027. .size_y1        dw 100  ;+36
  3028. .start_y1       dw 18   ;+38
  3029. .bckg_col       dd 0xeeeeee     ;+40
  3030. .frnt_col       dd 0xff ;+44
  3031. .menu_col       dd 0xffffff     ;+48
  3032. .select         dd 0    ;+52
  3033. .out_select     dd 0    ;+56
  3034. .buf_adress     dd 0    ;+60
  3035. .procinfo       dd 0    ;+64
  3036. .click          dd 0    ;+68
  3037. .cursor         dd 0    ;+72
  3038. .cursor_old     dd 0    ;+76
  3039. .interval       dd 16   ;+80
  3040. .cursor_max     dd 0    ;+84
  3041. .extended_key   dd 0    ;+88
  3042. .menu_sel_col   dd 0x00cc00     ;+92
  3043. .bckg_text_col  dd 0    ;       +96
  3044. .frnt_text_col  dd 0xffffff     ;+100
  3045. .mouse_keys_old dd 0    ;+104
  3046. .font_height    dd 8    ;+108
  3047. .cursor_out     dd 0    ;+112
  3048. .get_mouse_flag dd 0    ;+116
  3049.  
  3050. menu_text_area_3:
  3051.         db 'Help',0
  3052. .1:
  3053.         db 'Help',0
  3054. .end:
  3055.         db 0
  3056. ;---------------------------------------------------------------------
  3057. edit1   edit_box 200,190,27,0xffffff,0x6a9480,0,0xAABBCC,0,134,cur_dir_path,ed_focus,ed_focus,6,6       ;ä ©«   ®âªàëâì\á®åà ­¨âì
  3058. edit2   edit_box 55,260,29,0xeeeeee,0x6a9480,0,0xAABBCC,4,8,go_to_string,ed_focus,ed_focus,0,0  ;¯¥à¥å®¦¤       ­       ᬥ饭¨¥
  3059. edit3   edit_box 55,260,29,0xeeeeee,0x6a9480,0,0xAABBCC,4,8,find_string,ed_focus,ed_focus,0,0   ;¯®¨áª
  3060. edit4   edit_box 55,220,49,0xeeeeee,0x6a9480,0,0xAABBCC,4,8,sel1_string,ed_focus,ed_focus,0,0   ;¢ë¤¥«¨âì       ¡«®ª    ­ ç.ᬥé.
  3061. edit5   edit_box 55,300,49,0xeeeeee,0x6a9480,0,0xAABBCC,4,8,sel2_string,ed_focus,0,0,0  ;¢ë¤¥«¨âì       ¡«®ª    ª®­.ᬥé.
  3062.  
  3063. op1     option_box option_group1,210,50,6,12,0xffffff,0,0,op_text.1,op_text.e1-op_text.1,1
  3064. op2     option_box option_group1,310,50,6,12,0xFFFFFF,0,0,op_text.2,op_text.e2-op_text.2
  3065. op3     option_box option_group1,210,65,6,12,0xffffff,0,0,op_text.3,op_text.e3-op_text.3
  3066. op11    option_box option_group2,210,50,6,12,0xffffff,0,0,op_text2.11,op_text2.e11-op_text2.11
  3067. op12    option_box option_group2,310,50,6,12,0xffffff,0,0,op_text2.21,op_text2.e21-op_text2.21
  3068.  
  3069. option_group1   dd op1  ;㪠§ â¥«¨, ®­¨ ®â®¡à ¦ îâáï ¯® 㬮«ç ­¨î, ª®£¤  ¢ë¢®¤¨âáï
  3070. option_group2   dd op11 ;¯à¨«®¦¥­¨¥
  3071. Option_boxs     dd op1,op2,op3,0
  3072. Option_boxs2    dd op11,op12,0
  3073.  
  3074. op_text:        ; ‘®¯à®¢®¦¤ î騩 ⥪áâ ¤«ï 祪 ¡®ªá®¢
  3075. .1      db 'Absolutely'
  3076. .e1:
  3077. .2      db 'Forward'
  3078. .e2:
  3079. .3      db 'Back'
  3080. .e3:
  3081.  
  3082. op_text2:
  3083. .11     db 'Hex'
  3084. .e11:
  3085. .21     db 'ASCII'
  3086. .e21:
  3087.  
  3088.  
  3089. system_dir_Boxlib                       db '/sys/lib/box_lib.obj',0
  3090. system_dir_ProcLib                      db '/sys/lib/proc_lib.obj',0
  3091.  
  3092. head_f_i:
  3093. head_f_l        db 'error',0
  3094. err_message_found_lib1          db 'box_lib.obj - Not found!',0
  3095. err_message_found_lib2          db 'proc_lib.obj - Not found!',0
  3096.  
  3097. err_message_import1                     db 'box_lib.obj - Wrong import!',0
  3098. err_message_import2                     db 'proc_lib.obj - Wrong import!',0
  3099.  
  3100. sel_text        db "From to",0
  3101.  
  3102. help_but_text   = menu_text_area_3 ;db  'Help',0
  3103. error_open_file_string  db "Isn't found!",0
  3104. error_save_file_string  db "Isn't saved!",0
  3105. string_cp866    db ' cp866'
  3106. string_cp1251   db 'cp1251'
  3107. string_koi8r    db 'koi8-r'
  3108. string_ins      db 'Ins'
  3109.  
  3110.  
  3111. align   4
  3112. number_strings  dd 16   ;ª®«¨ç¥á⢮ áâப ­  «¨áâ¥
  3113. ;bytes_per_line dd 16   ;ª®«-¢® á⮫¡æ®¢
  3114.  
  3115. group_bytes     dd 8
  3116. bytes_per_line  dd 16
  3117.  
  3118.  
  3119.  
  3120. ;blocks_counter dd 1
  3121. ;blocks_table   dd 0
  3122. cursor  dd 1
  3123.  
  3124. flags   dw 001000010b
  3125. ;¡¨â    0: ¢ edit_box - ¢®á¯à¨ï⨥/(­¥) ¢á¥å ¢¢®¤¨¬ëå ᨬ¢®«®¢
  3126. ;1:     0/1 - ०¨¬ § ¬¥­ë/¢áâ ¢ª¨
  3127. ;2:     ¢ edit_box - ®¡à ¡®âª  Ctrl_G
  3128. ;3:     ¢ edit_box - ®¡à ¡®âª  Ctrl_F
  3129. ;4:     ¢ change_codepage - ¥á«¨ ¯®¤­ïâ, â® ¢®ááâ ­®¢¨âì ¯à¥¤ë¤ãéãî ª®¤¨à®¢ªã
  3130. ;5:     vertical_scroll_bar move
  3131. ;6:     ¯®«­ ï  ¯¥à¥à¨á®¢ª  ®ª­ 
  3132. ;7:     horizontal_scroll_bar move
  3133. ;8:     1 - ¢ë¤¥«¥­ ¡«®ª
  3134. ;9:     ¢ edit_box - ®¡à ¡®âª  Ctrl_B
  3135. ;10:    ¢ ¯ ¬ï⨠"¢¨á¨â" ᪮¯¨à®¢ ­­ë© ¡«®ª
  3136.  
  3137. help_text:
  3138. if lang eq ru
  3139.  db 'Ctrl+O              - ®âªàëâì ä ©«                 '
  3140.  db 'Ctrl+S              - á®åà ­¨âì                    '
  3141.  db 'PageUp, PageDown    - áâà ­¨æ  ¢¢¥àå/¢­¨§          '
  3142.  db 'Ctrl+UP, Ctrl+Down  - ¯à®ªàã⪠ áâà ­¨æë ­  áâà®-  '
  3143.  db '                 ªã ¢¢¥àå/¢­¨§ ¡¥§ ᬥ饭¨ï ªãàá®à '
  3144.  db 'Home,End            - ¢ ­ ç «®/ª®­¥æ áâப¨        '
  3145.  db 'Ctrl+Home, Ctrl+End - ¢ ­ ç «®/ª®­¥æ ä ©«          '
  3146.  db 'Left, Right, UP, DN - ªãàá®à ¢«¥¢®/¢¯à ¢®/¢ëè¥/­¨¦¥'
  3147.  db 'n                   - ¨­¢¥àâ¨à®¢ âì ¡ ©â           '
  3148.  db 'Ins                 - ०¨¬ § ¬¥­ë/¢áâ ¢ª¨         '
  3149.  db '  Del               - 㤠«¨âì ¡ ©â ¯®¤ ªãàá®à®¬    '
  3150.  db '  BackSpace         - 㤠«¨âì ¡ ©â ¯¥à¥¤ ªãàá®à®¬  '
  3151.  db '~                   - ᬥ­  ª®¤¨à®¢®ª cp866,cp1251 '
  3152.  db 'Shift+~             - cp866/cp1251,koi8r           '
  3153.  db 'Ctrl+F              - ¯®¨áª                        '
  3154.  db 'Ctrl+G              - ¯¥à¥å®¤ ­  ᬥ饭¨¥          '
  3155.  db 'Ctrl+B              - ¢ë¤¥«¨âì ¡«®ª                '
  3156.  db 'ESC                 - á­ïâì ¢ë¤¥«¥­¨¥              '
  3157.  db 'Ctrl+C              - ª®¯¨à®¢ âì ¡«®ª              '
  3158.  db 'Ctrl+V              - ¢áâ ¢¨âì ¢ ¢ë¤¥«¥­­ãî ®¡« áâì'
  3159.  db 'Ctrl+X              - ¢ë१ âì ¢ ¡ãä¥à             '
  3160. else
  3161.  db 'Ctrl+O              - open file                    '
  3162.  db 'Ctrl+S              - save file                    '
  3163.  db 'PageUp, PageDown    - page up/down                 '
  3164.  db 'Ctrl+UP, Ctrl+Down  - scroll page by one string    '
  3165.  db '                    up/down without cursor movement'
  3166.  db 'Home,End            - at the start/end of string   '
  3167.  db 'Ctrl+Home, Ctrl+End - at the start/end of file     '
  3168.  db 'Left, Right, Up, Dn - move cursor to the lft/rght..'
  3169.  db 'n                   - invert byte                  '
  3170.  db 'Ins                 - replace/past mode            '
  3171.  db '  Del               - delete byte under cursor     '
  3172.  db '  BackSpace         - delete byte before cursor    '
  3173.  db '~                   - change codepages cp866,cp1251'
  3174.  db 'Shift+~             - cp866/cp1251,koi8r           '
  3175.  db 'Ctrl+F              - find                         '
  3176.  db 'Ctrl+G              - go to offset                 '
  3177.  db 'Ctrl+B              - select area                  '
  3178.  db 'ESC                 - deselect area                '
  3179.  db 'Ctrl+C              - copy area                    '
  3180.  db 'Ctrl+V              - past into area from buf      '
  3181.  db 'Ctrl+X              - cut area into buffer         '
  3182. end if
  3183. help_end:
  3184.  
  3185.  
  3186.  
  3187.  
  3188. ;align  4096
  3189. font_buffer     file 'cp866-8x16'       ;ASCII+cp866    (+ð,ñ)
  3190. cp1251          file 'cp1251-8x16'
  3191. koi8_r          file 'koi8-r-8x16'
  3192.  
  3193.  
  3194. ;##########################     open_dial
  3195. get_loops       dd 0
  3196. dlg_pid_get     dd 0
  3197. DLGPID  dd 0
  3198. param:
  3199.         dd 0    ; My dec PID
  3200.         dd 0,0  ; Type of dialog
  3201. run_fileinfo:
  3202.         dd 7
  3203.         dd 0
  3204.         dd param
  3205.         dd 0
  3206.         dd 0
  3207. ;run_filepath
  3208.         db '/sys/SYSXTREE',0
  3209. readdir_fileinfo:
  3210.         dd 1
  3211.         dd 0
  3212.         dd 0
  3213. readblocks      dd      0
  3214. directory_ptr   dd      0
  3215.  
  3216. ;##########################    
  3217.  
  3218.  
  3219. title   db      _title
  3220. ;---------------------------------------------------------------------
  3221. l_libs_start:
  3222. ;       load_library    boxlib_name,cur_dir_path,buf_cmd_lin,system_path,\
  3223. ;       err_message_found_lib,head_f_l,myimport,err_message_import,head_f_i
  3224.  
  3225. library01  l_libs system_dir_Boxlib+9, cur_dir_path, buf_cmd_lin, system_dir_Boxlib, \
  3226. err_message_found_lib1, head_f_l, Box_lib_import, err_message_import1, head_f_i
  3227.  
  3228. library02  l_libs system_dir_ProcLib+9, cur_dir_path, buf_cmd_lin, system_dir_ProcLib, \
  3229. err_message_found_lib2, head_f_l, ProcLib_import, err_message_import2, head_f_i
  3230.  
  3231. end_l_libs:
  3232. ;---------------------------------------------------------------------
  3233. OpenDialog_data:
  3234. .type                   dd 0
  3235. .procinfo               dd procinfo     ;+4
  3236. .com_area_name          dd communication_area_name      ;+8
  3237. .com_area               dd 0    ;+12
  3238. .opendir_pach           dd temp_dir_pach        ;+16
  3239. .dir_default_pach       dd communication_area_default_pach      ;+20
  3240. .start_path             dd open_dialog_path     ;+24
  3241. .draw_window            dd draw_window_1        ;+28
  3242. .status                 dd 0    ;+32
  3243. .openfile_pach          dd fname_buf    ;+36
  3244. .filename_area          dd filename_area        ;+40
  3245. .filter_area            dd Filter
  3246.  
  3247. communication_area_name:
  3248.         db 'FFFFFFFF_open_dialog',0
  3249. open_dialog_path:
  3250.         db '/sys/File Managers/opendial',0
  3251. communication_area_default_pach:
  3252.         db '/rd/1',0
  3253.  
  3254. Filter:
  3255. dd      Filter.end - Filter.1
  3256. .1:
  3257. ;db     'BIN',0
  3258. ;db     'DAT',0
  3259. .end:
  3260. db      0
  3261.  
  3262. start_temp_file_name:   db 'temp.bin',0
  3263. ;---------------------------------------------------------------------
  3264.  
  3265. I_END:
  3266. file_name:
  3267. cur_dir_path    rb 4096
  3268. buf_cmd_lin     rb 0
  3269. procinfo:       ;opendialog
  3270. threath_buf     rb 0x400
  3271. path:
  3272.                 rb 1024+16      ;opendialog
  3273.  
  3274. screen_table    rd 1
  3275. begin_offset    rd 1
  3276. file_buffer     rd 1
  3277.  
  3278. copy_buf        rd 1
  3279. copy_len        rd 1
  3280.  
  3281. current_offset  rd 1
  3282. ;       rd      1 ;¯®¤ áâ à訩 dword
  3283. codepage_offset rd 1
  3284. codepage_offset_previous        rd 1
  3285. low_area        rd 1    ;ª®®à¤¨­ âë ­¨¦­¥© áâப¨
  3286. right_table_xy  rd 1
  3287.  
  3288. prev_f_size_bl  rd 1
  3289.  
  3290. len_str_scr     rd 1
  3291. beg_str_scr     rd 1
  3292.  
  3293. shblock_beg     rd 1    ;ᬥ饭¨¥ ­ ç «  ¡«®ª 
  3294. shblock_end     rd 1    ;ᬥ饭¨¥ ª®­æ  ¡«®ª 
  3295.  
  3296. ;mouse_flag     rd 1
  3297. file_size       rd 1
  3298. ;       rd      1 ;¯®¤ áâ à訩 dword
  3299.  
  3300. ed_box_data:    rd 8    ;¯¥à¢ë© dword -ª®«-¢® í«¥¬¥­â®¢ ¤«ï ®¡à ¡®âª¨, ¤ «¥¥ 㪠§ â¥«¨ ­  editX;
  3301.  
  3302. bufferfinfo     rb 40
  3303. hex8_string     rb 9    ;¡ãä¥à ¤«ï hex_output
  3304. go_to_string    rb 9
  3305. find_string     rb 17
  3306. sel1_string     rb 9
  3307. sel2_string     rb 9
  3308. cur_help_string rb 1    ;­®¬¥à áâப¨, á ª®â®à®© ¢ë¢®¤¨âáï ⥪áâ ¢ help - ®ª­¥
  3309.  
  3310. func_70 f70
  3311. ;---------------------------------------------------------------------
  3312. fname_buf:
  3313.         rb 4096
  3314. ;---------------------------------------------------------------------
  3315. temp_dir_pach:
  3316.         rb 4096
  3317. ;---------------------------------------------------------------------
  3318. filename_area:
  3319.         rb 256
  3320. ;---------------------------------------------------------------------
  3321. D_END: