Subversion Repositories Kolibri OS

Rev

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