Subversion Repositories Kolibri OS

Rev

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

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