Subversion Repositories Kolibri OS

Rev

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

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