Subversion Repositories Kolibri OS

Rev

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