Subversion Repositories Kolibri OS

Rev

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

  1. ;constants
  2. ;for keys
  3. KEY_ESC     equ 27
  4. KEY_PGDN     equ 183
  5. KEY_PGUP     equ 184
  6. KEY_LNDN     equ 177
  7. KEY_LNUP     equ 178
  8. KEY_RIGHT   equ 179
  9. KEY_LEFT     equ 176
  10. KEY_HOME     equ 180
  11. KEY_END     equ 181
  12. KEY_HOMETOP equ 251  ;Ctrl + '['
  13. KEY_ENDBOTTOM equ 253 ;Ctrl + ']'
  14.  
  15.  use32
  16.  org 0x0
  17.  db 'MENUET01'  ; 8 byte id
  18.  dd 0x01        ; header version
  19.  dd START       ; start of code
  20.  dd I_END       ; size of image
  21.  dd 0x80000     ; memory for app
  22.  dd 0x80000     ; esp
  23.  dd 0x0 , 0x0   ; I_Param , I_Icon
  24.  
  25.  include 'lang.inc'
  26.  include 'macros.inc'
  27.  
  28.  
  29. START: ; start of execution
  30.  
  31.   mov  eax,40
  32.   mov  ebx,100111b ;event mouse
  33.   int  0x40
  34.   mov  dword [process_info+42],540
  35.   mov  dword [process_info+46],414
  36.   call draw_window
  37.  
  38. still:
  39.   mov  eax,10  ; wait here for event
  40.   int  0x40
  41.   dec  al      ; redraw request ?
  42.   je   red
  43.   dec  al      ; key in buffer ?
  44.   je   key
  45.   dec  al      ; button in buffer ?
  46.   je   button
  47.                ; mouse event received
  48.  mouse:
  49.   mov  eax,37
  50.   mov  ebx,2
  51.   int  0x40
  52.   or   eax,eax
  53.   jz   still
  54.   cmp  [menu_opened],1
  55.   jne  still
  56.   mov  [menu_opened],0
  57.  
  58.  red:          ; redraw
  59.   call redraw_window
  60.   jmp  still
  61.  
  62.  key:          ; key
  63.   mov  eax,2
  64.   int  0x40
  65. ; test al,al
  66. ; jnz  still
  67.   cmp  ah,KEY_ESC
  68.   jz   close
  69.   mov  al,[o_s_flag]
  70.   and  al,8  ;set bit 3?
  71.   jz   edit_keys ;not - no output to filename area
  72.   cmp  ah,8  ;BACKSPACE
  73.   jnz  no_backspace
  74.   dec  [name_l]
  75.   cmp  [name_l],0
  76.   mov  edx,filename
  77.   je   A1
  78.   jg   @f
  79.   mov  [name_l],0
  80.   jmp  A1
  81.  @@:
  82.   add  dl,[name_l]
  83.  A1:
  84.   sub  [x_cursor],0x60000
  85.   mov  [edx],byte 0
  86.   cmp  [x_cursor],0xb0005
  87.   jge  @f
  88.   mov  [x_cursor],0xb0005
  89. @@:
  90.   call redraw_window
  91.   jmp  still  ;END BACKSPACE
  92.  
  93.  no_backspace:
  94.   cmp  ah,0x30 ;'0'
  95.   jl   A2
  96.   cmp  ah,0x39 ;'9'
  97.   jle  bigsym
  98.   cmp  ah,65 ;'A'
  99.   jbe  bigsym
  100.   cmp  ah,90 ;'Z'
  101.   jle  bigsym
  102.   cmp  ah,97 ;'a'
  103.   jbe  smsym
  104.   cmp  ah,122;'z'
  105.   jle  smsym
  106.   jmp  still
  107.  A2:
  108.   cmp  ah,46 ;'.'
  109.   jz   bigsym
  110.   cmp  ah,0x20
  111.   jz   bigsym
  112.   jmp  still
  113.  smsym:
  114.   sub  ah,32
  115.  bigsym:
  116.   cmp  [name_l],13 ;yes. filename length <13
  117.   jl   @f
  118.   sub  [o_s_flag],8 ;not - disable output to filename area
  119.   mov  [x_cursor],0x680005; - set x-base & x-size
  120.   jmp  _end_keys
  121.  @@:
  122.   mov  edx,filename  ;
  123.   add  dl,[name_l]
  124.   mov  [edx],ah
  125.   inc  [name_l]
  126.   add  [x_cursor],0x60000
  127.  _end_keys:
  128.   call redraw_window
  129.   jmp  still
  130.  edit_keys:
  131.   cmp  ah,KEY_PGDN
  132.   jnz  @f
  133.   call PgDn
  134.   jmp  still
  135.  @@:
  136.   cmp  ah,KEY_PGUP
  137.   jnz  @f
  138.   call PgUp
  139.   jmp  still
  140.  @@:
  141.   cmp  ah,KEY_HOME ;Home
  142.   jnz  @f
  143.   call Home
  144.   jmp  still
  145.  @@:
  146.   cmp  ah,KEY_END ;Home
  147.   jnz  @f
  148.   call _End
  149.   jmp  still
  150.  @@:
  151.   cmp  ah,KEY_HOMETOP
  152.   jnz  @f
  153.   call CtrlHome
  154.   jmp  still
  155.  @@:
  156.   cmp  ah,KEY_ENDBOTTOM
  157.   jnz  @f
  158.   call CtrlEnd
  159.   jmp  still
  160.  @@:
  161.   cmp  ah,KEY_LNDN
  162.   jnz  @f
  163.   call LnDn
  164.   jmp  still
  165.  @@:
  166.   cmp  ah,KEY_LNUP
  167.   jnz  @f
  168.   call LnUp
  169.   jmp  still
  170.  @@:
  171.   cmp  ah,KEY_RIGHT ;Right
  172.   jnz  @f
  173.   call Right
  174.   jmp  still
  175.  @@:
  176.   cmp  ah,KEY_LEFT ;Left
  177.   jnz  @f
  178.   call Left
  179.  @@:
  180.   ;редактирование строки в hex-представлении
  181.   mov  esi,[current]
  182.   mov  bl,[posx]
  183.   add  esi,0x10000 ;0x80000
  184.   cmp  ah,0x30
  185.   jl   still   ;ah<'0'
  186.   cmp  ah,0x39
  187.   jle  A23   ;ah='0'...'9' - перевод из символов в hex
  188. ;проверка на коды старших hex-цифр
  189.   cmp  ah,0x61 ;ah<'a'
  190.   jl   A27   ;может быть вводятся большие буквы?
  191.   cmp  ah,0x66 ;ah>'f'
  192.   jg   still
  193.   sub  ah,0x20 ;конвертируем в большие буквы
  194.   jmp  A24
  195.  A27:
  196.   cmp  ah,0x41
  197.   jl   still   ;ah<'A'
  198.   cmp  ah,0x46
  199.   jg   still   ;ah>'F'
  200.  A24:
  201.   add  ah,9
  202.  A23:
  203.   mov  dl,[esi];оригинальный байт
  204.   and  bl,1    ;если нечет - редактируется младший полубайт, чет - старший
  205.   jz   hi_half_byte
  206.   ;младший полубайт
  207.   and  ah,0x0f ;обнуляем старший полубайт введенной цифры
  208.  ;если ah = 0x30...0x39, то все нормально
  209.  ;если ah = 0x41...0x46, то на метке А24 получим
  210.  ;ah = 0x4A...0x4F и тоже все нормально
  211.   and  dl,0xf0 ;обнуляем младший полубайт у оригинального байта
  212.   jmp  patch_byte
  213.  hi_half_byte:
  214.   ;старший полубайт
  215.   shl  ah,4    ;одновременно сдвигаем нужное значение в старший полубайт
  216.  ;и обнуляем младший
  217.   and  dl,0x0f ;обнуляем старший полубайт у оригинального байта
  218.  patch_byte:
  219.   or   ah,dl   ;объединяем полубайты
  220.   mov  [esi],ah;патчим в памяти
  221.   mov  ebx,0x20100
  222.   movzx ecx,ah ;для функции вывода числа
  223.   ;теперь надо расчитать координаты вывода для числа
  224.   ;edx = x shl 16 + y
  225.   mov  edx,[x_cursor]
  226.   mov  edi,[y_cursor]
  227.   and  edx,0xffff0000
  228.   shr  edi,0x10
  229.   xor  esi,esi
  230.   or   edx,edi
  231.   mov  eax,47
  232.   add  edx,8
  233.   int  0x40
  234.   call redraw_window
  235.   jmp  still
  236.  
  237.  button:   ; button
  238.   mov  eax,17 ; get id
  239.   int  0x40
  240.   dec  ah  ;close programm button
  241.   jne  @f
  242.  close:
  243.   mov  eax,-1 ; close this program
  244.   int  0x40
  245.  @@:
  246.   dec  ah
  247.   jne  @f
  248.   call redraw_window
  249.   call menufile
  250.   jmp  still
  251.  @@:
  252.   dec  ah  ;menu 'coding' button
  253.   jne  @f
  254.   call redraw_window
  255.   call menucoding
  256.   jmp  still
  257.  @@:
  258.   dec  ah  ;menu 'Help' button
  259.   jne  @f
  260.   call redraw_window
  261.   call menuhelp
  262.   jmp  still
  263.  @@:
  264.   ;now processed low_level menu buttons
  265.   ;id m_open = 5
  266.   ;id m_save = 6
  267.   ;id m_exit = 7
  268.   ;id m_win2dos 8
  269.   ;id m_win2koi 9
  270.   ;id m_win2iso 10
  271.   ;id m_dos2win 11
  272.   ;id m_dos2koi 12
  273.   ;id m_dos2iso 13
  274.   ;id m_help 14
  275.   ;id m_about 15
  276.   dec  ah ;open?
  277.   jne  @f
  278.   cmp  [o_s_flag],0  ;disable 'Open' if flag !=0
  279.   jnz  no_open
  280. ;  call redraw_window
  281.   mov  [color],0x0072b9fc
  282.   call f2 ;set x_cursor & y_cursor for input filename
  283.   mov  [o_s_flag],8   ;for output to filename area
  284.  no_open:
  285.   call redraw_window
  286.   jmp  still
  287.  @@:
  288.   dec  ah ;save?
  289.   jne  @f
  290.   cmp  [o_s_flag],1  ;enable save if flag = 1
  291.   jnz  no_save
  292.   movzx ecx,[name_l] ;begin clear filename string
  293.   mov  edi,filename
  294.   xor  al,al
  295.   jecxz no_clear
  296.  clear:
  297.   mov  [edi+ecx],al
  298.   loop clear
  299.   mov  [name_l],al ;set filename length = 0
  300.  no_clear:  ;ebd clear
  301.   call f2 ;set x_cursor & y_cursor for input filename
  302.   mov  [o_s_flag],9 ;for output to filename area
  303.  no_save:
  304.   call redraw_window
  305.   jmp  still
  306.  @@:
  307.   dec  ah ;exit?
  308.   jne  @f
  309.   jmp  close
  310.  @@:
  311.   dec  ah ;m_win2dos?
  312.   jne  @f
  313.   push dword WIN_TABLE
  314.   push dword DOS_TABLE
  315.   call coding
  316.   call redraw_window
  317.   jmp  still
  318.  @@:
  319.   dec  ah ;m_win2koi?
  320.   jne  @f
  321.   push WIN_TABLE
  322.   push KOI_TABLE
  323.   call coding
  324.   call redraw_window
  325.   jmp  still
  326.  @@:
  327.   dec  ah ;m_win2iso?
  328.   jne  @f
  329.   push WIN_TABLE
  330.   push ISO_TABLE
  331.   call coding
  332.   call redraw_window
  333.   jmp  still
  334.  @@:
  335.   dec  ah ;m_dos2win?
  336.   jne  @f
  337.   push DOS_TABLE
  338.   push WIN_TABLE
  339.   call coding
  340.   call redraw_window
  341.   jmp  still
  342.  @@:
  343.   dec  ah ;m_dos2koi?
  344.   jne  @f
  345.   push DOS_TABLE
  346.   push KOI_TABLE
  347.   call coding
  348.   call redraw_window
  349.   jmp  still
  350.  @@:
  351.   dec  ah ;dos2iso?
  352.   jne  @f
  353.   push DOS_TABLE
  354.   push ISO_TABLE
  355.   call coding
  356.   call redraw_window
  357.   jmp  still
  358.  @@:
  359.   dec  ah ;m_help?
  360.   jne  @f
  361.   ;create new thread for output help info
  362.   ;parameter: address for entry_point thread
  363.   push help_thread
  364.   call create_process
  365.   call redraw_window
  366.   jmp  still
  367.  @@:
  368.   dec  ah ;m_about?
  369.   jne  @f
  370.   ;create new thread for output about info
  371.   ;parameter: address for entry_point thread
  372.   push about_thread
  373.   call create_process
  374.   call redraw_window
  375.   jmp  still
  376.  @@:
  377.   ;button 'Go'
  378.   and  [o_s_flag],1
  379.   jnz  _savefile
  380.   ;open file
  381.   mov  eax,6
  382.   mov  ebx,filename
  383.   xor  ecx,ecx
  384.   or   edx,-1
  385.   mov  esi,0x10000
  386.   int  0x40
  387.   inc  [o_s_flag]
  388.   mov  [sizefile],eax
  389.   jmp  end_Go
  390.  _savefile:
  391.   ;save file
  392.   mov  ebx,filename
  393.   mov  ecx,0x10000
  394.   mov  edx,[sizefile]
  395.   xor  esi,esi
  396.   dec  edx
  397.   mov  eax,33
  398.   int  0x40
  399.  end_Go:
  400.   call CtrlHome
  401.   jmp  still
  402.  
  403. Right:
  404.   pushad
  405.   mov  al,[posx]
  406.   inc  al
  407.   cmp  al,0x20
  408.   jl   @f
  409.   mov  [posx],0
  410.   mov  [x_cursor],0x680005
  411.   mov  [text_cursor],0x01200000
  412.   sub  [current],0xf ;because [current] add 0x10 in LnDn
  413.   call LnDn
  414.   popad
  415.   ret
  416.  @@:
  417.   mov  [posx],al
  418.   and  al,1
  419.   jnz  @f ;not increment [current]
  420.   ;increment
  421.   add  [x_cursor],0xa0000
  422.   sub  [text_cursor],0x40000
  423.   inc  [current]
  424.   jmp  end_r
  425.  @@:
  426.   add  [x_cursor],0x60000
  427.   sub  [text_cursor],0x60000
  428.  end_r:
  429.   call redraw_window
  430.   popad
  431.   ret
  432.  
  433. Left:
  434.   pushad
  435.   mov  al,[posx]
  436.   dec  al
  437.   jge  @f
  438.   mov  [posx],0x1f
  439.   mov  [x_cursor],0x015e0005
  440.   mov  [text_cursor],0x00840000
  441.   add  [current],0x0f
  442.   call LnUp
  443.   popad
  444.   ret
  445.  @@:
  446.   mov  [posx],al
  447.   and  al,1
  448.   jnz @f ;decrement [current]
  449.   ;not decrement
  450.   sub  [x_cursor],0x60000
  451.   add  [text_cursor],0x60000
  452.   jmp  end_l
  453.  @@:
  454.   cmp  [current],0
  455.   jle  end_l
  456.   sub  [x_cursor],0xa0000
  457.   add  [text_cursor],0x40000
  458.   dec  [current]
  459.  end_l:
  460.   call redraw_window
  461.   popad
  462.   ret
  463.  
  464. LnDn:
  465.   pushad
  466.   add  [current],0x10
  467.   movzx ecx,[lines]
  468.   cmp  cl,[posy]
  469.   jl   @f ;when counter strings >= number strings in window
  470.   add  [y_cursor],0xa0000
  471.   inc  [posy]
  472.   call redraw_window
  473.   popad
  474.   ret
  475.  @@:
  476.   mov  eax,0x10
  477.   xor  edx,edx
  478.   imul ecx
  479.   sub  eax,0x10
  480.   sub  [end_str],eax
  481. ;  mov  eax,[sizefile]
  482. ;  add  eax,0x80000
  483. ;  cmp  eax,[end_str]
  484. ;  jge  @f
  485. ;  mov  [end_str],eax
  486. ; @@:
  487.   call draw_window
  488.   popad
  489.   ret
  490.  
  491. LnUp:
  492.   pushad
  493.   sub  [current],0x10
  494.   cmp  [current],0
  495.   jge  @f
  496.   mov  [current],0
  497.  @@:
  498.   cmp  [posy],3
  499.   jle @f ;when counter strings < number top string
  500.   sub  [y_cursor],0xa0000
  501.   dec  [posy]
  502.   call redraw_window
  503.   popad
  504.   ret
  505.  @@:
  506. ;  movzx ecx,[lines]
  507. ;  mov  eax,0x10
  508. ;  xor  edx,edx
  509. ;  imul ecx
  510. ;  add  eax,0x10
  511.   sub  [end_str],0x10
  512.   cmp  [end_str],0x10000
  513.   jge  @f
  514.   mov  [end_str],0x10000
  515.  @@:
  516.   call redraw_window
  517.   popad
  518.   ret
  519.  
  520. CtrlEnd:
  521.   pushad
  522.   popad
  523.   ret
  524.  
  525. CtrlHome:
  526.   pushad
  527.   mov  [x_cursor],0x00680005   ;устанавливаются значения, как при открытии
  528.   mov  [y_cursor],0x00280008
  529.   mov  [text_cursor],0x01200000
  530.   mov  [posx],0
  531.   mov  [posy],3
  532.   call b_in_screen
  533.   mov  [end_str],0x10000
  534.   mov  [current],0
  535.   call redraw_window
  536.   popad
  537.   ret
  538.  
  539. _End:
  540.   pushad
  541.   mov  [x_cursor],0x015e0005
  542.   mov  [posx],0x1f
  543.   mov  [text_cursor],0x00840000
  544.   or   [current],0xf
  545.   call b_in_screen
  546.   call redraw_window
  547.   popad
  548.   ret
  549.  
  550. Home:
  551.   pushad
  552.   mov  [x_cursor],0x00680005 ;устанавливаются значения для начала строки
  553.   mov  [posx],0
  554.   mov  [text_cursor],0x01200000
  555.   and  [current],0xfffffff0
  556.   call b_in_screen
  557.   call redraw_window
  558.   popad
  559.   ret
  560.  
  561. PgDn:
  562.   pushad
  563.   xor  edx,edx
  564.   movzx ecx,[lines]
  565.   mov  eax,0x10
  566.   imul ecx
  567.   add  [current],eax
  568.   add  [end_str],eax
  569.   call redraw_window
  570.   popad
  571.   ret
  572.  
  573. PgUp:
  574.   pushad
  575.   xor  edx,edx
  576.   movzx ecx,[lines]
  577.   mov  eax,0x10
  578.   imul ecx
  579.   sub  [current],eax
  580.   cmp  [current],0
  581.   jge  @f
  582.   mov  [current],0
  583.  @@:
  584.   sub  [end_str],eax
  585.   cmp  [end_str],0x10000
  586.   jge  @f
  587. ;  call CtrlHome
  588.   mov  [end_str],0x10000
  589.  @@:
  590.   call redraw_window
  591.   popad
  592.   ret
  593.  
  594. b_in_screen:
  595.   pushad
  596.   call get_process_info
  597.   mov  eax,[process_info+0x2e]
  598.   mov  ebx,0x0a
  599.   sub  eax,0x3c
  600.   cmp  eax,0x10   ;now
  601.   jg   @f   ;now
  602.   mov  [lines],0  ;now
  603.   jmp  C1   ;now
  604.  @@:
  605.   xor  edx,edx
  606.   div  ebx
  607.   mov  [lines],al
  608.  C1:
  609.   popad
  610.   ret
  611.  
  612.  
  613.  
  614. output_screen:
  615.   pushad
  616.   movzx ecx,[lines]
  617.   jecxz no_out ;now
  618.   cmp  [rflag],1
  619.   jz   _redraw
  620.   mov  eax,[end_str]
  621.   sub  eax,0x80001
  622.   cmp  eax,[sizefile]
  623.   jl   @f
  624.  _redraw:
  625.   xor  edx,edx
  626.   mov  eax,0x10
  627.   imul ecx
  628.   sub  [end_str],eax
  629.   cmp  [end_str],0x10000
  630.   jge  A3
  631.   mov  [end_str],0x10000
  632.  A3:
  633.   mov  [rflag],0
  634.  @@:
  635.   mov  eax,0x28
  636.  @@:
  637.   push ecx
  638.   push eax
  639.   call form_str
  640.   mov  ebx,0x01880000
  641.   add  ebx,eax
  642.   mov  ecx,0x00ffffff
  643.   add  eax,10
  644.   mov  edx,[end_str]
  645.   push eax
  646.   sub  edx,0x10
  647.   mov  esi,0x10
  648.   mov  eax,4
  649.   int  0x40
  650.   pop  eax
  651.   pop  ecx
  652.   loop @b
  653.  no_out:
  654.   popad
  655.   ret
  656.  
  657.  
  658.  
  659. form_str:
  660.   pushad
  661.   mov  ebp,[end_str]  ;последний выведенный байт
  662.   xor  edi,edi ;счетчик байт <= 16
  663.   ;вывести адрес
  664.   mov  ecx,ebp
  665.   mov  ebx,0x80100  ;8 цифр, 16-ричные, число в ecx
  666.   sub  ecx,0x10000  ;нормализация адреса
  667.   mov  edx,0x80000  ;начало по Х
  668.   add  edx,[esp+0x24]  ;начало по У
  669.   mov  esi,0x00ffffff ;цвет
  670.   mov  eax,47 ;вывести число
  671.   int  0x40
  672.   add  edx,0x600000   ;0x40 - 8chars + 0x20 - space
  673.   mov  ebx,0x20100    ;2 цифры, 16-ричные, число в ecx
  674.  @@:
  675.   mov  ecx,[ebp+edi]   ;число в ecx
  676.   inc  edi
  677.   and  ecx,0xff
  678.   cmp  edi,0x11
  679.   jz   endstr
  680.   int  0x40
  681.   add  edx,0x100000
  682.   jmp  @b
  683.  endstr:
  684.   dec  edi
  685.   add  ebp,edi
  686.   mov  [end_str],ebp
  687.   popad
  688.   ret  4
  689.  
  690.  
  691.  
  692. draw_cursor:
  693.   pushad
  694.   mov  ebx,[x_cursor]
  695.   mov  ecx,[esp+0x24]
  696.   mov  edx,[color]
  697.   mov  eax,13
  698.   int  0x40
  699.   movzx edi,[o_s_flag]
  700.   and  edi,8
  701.   jnz  @f
  702.   add  ebx,[text_cursor]
  703.   int  0x40
  704.  @@:
  705.   popad
  706.   ret  4
  707.  
  708. f2:
  709.   mov  eax,[process_info+46]
  710.   mov  [x_cursor],0xb0005
  711.   sub  eax,0x11
  712. ;  mov  [text_cursor],-1
  713.   shl  eax,0x10
  714.  
  715.   mov  [y_filename_area],eax
  716.   ret
  717.  
  718. menufile:
  719.   mov  [menu_opened],1
  720.   mov  ebx,[xf_menu];x-base+x_size for hi-level menu button
  721.   mov  edx,5;first id button for this group
  722.   mov  edi,3;counter buttons
  723.   call f1
  724.   ;output text for menu
  725.   shr  ecx,0x10  ;y-base button
  726.   and  ebx,0xffff0000
  727.   add  ecx,0x6000f ;for y-base text
  728.   mov  esi,4 ;length text
  729.   add  ebx,ecx ;full base text
  730.   mov  edx,m_open
  731.   mov  ecx,[sc.work_button_text]
  732.   or   ecx,0x10000000
  733.   sub  eax,4
  734.   int  0x40
  735.   add  ebx,0x0c ;next full base text
  736.   add  edx,4 ;next string
  737.   int  0x40
  738.   add  ebx,0x0c
  739.   add  edx,4
  740.   int  0x40
  741.   ret
  742.  
  743. menucoding:
  744.   mov  [menu_opened],1
  745.   mov  ebx,[xe_menu]
  746.   mov  edx,8 ;first id
  747.   mov  edi,6 ;counter
  748.   add  ebx,0x10 ;add width buttons
  749.   push edi
  750.   call f1
  751.   pop  edi
  752.   shr  ecx,0x10
  753.   and  ebx,0xffff0000
  754.   add  ecx,0x8000f
  755.   mov  esi,8 ;length text
  756.   add  ebx,ecx
  757.   mov  edx,m_win2dos
  758.   mov  ecx,[sc.work_button_text]
  759.   or   ecx,0x10000000
  760.   sub  eax,4
  761.  @@:
  762.   int  0x40
  763.   add  ebx,0x0c
  764.   add  edx,8 ;next string
  765.   dec  edi
  766.   jnz  @b
  767.   ret
  768.  
  769. menuhelp:
  770.   mov  [menu_opened],1
  771.   mov  ebx,[xh_menu]
  772.   mov  edx,14 ;first id
  773.   add  ebx,6 ;add width buttons
  774.   mov  edi,2 ;counter
  775.   call f1
  776.   shr  ecx,0x10
  777.   and  ebx,0xffff0000
  778.   add  ecx,0x8000f
  779.   mov  esi,4 ;length text
  780.   add  ebx,ecx
  781.   mov  edx,m_help
  782.   mov  ecx,[sc.work_button_text]
  783.   or   ecx,0x10000000
  784.   sub  eax,4
  785.   int  0x40
  786.   add  ebx,0x0c
  787.   inc  esi ;add lebgth output text
  788.   add  edx,4
  789.   int  0x40
  790.   ret
  791.  
  792. f1:;uses for drawing low-level menu buttons
  793.   ;counter buttons get into
  794.   ;menufile,menucoding,menuhelp funcs.
  795.   mov  ecx,[y_menu]         ;y-base+y_size for hi-level menu button
  796.   mov  esi,[sc.work_button] ;color buttons
  797.   mov  eax,8
  798.   push ecx                  ;for output text
  799.  @@:
  800.   add  ecx,0xc0000
  801.   int  0x40
  802.   inc  edx ;id
  803.   dec  edi ;counter
  804.   jnz  @b
  805.   pop  ecx ;for output text
  806.   ret
  807.  
  808. redraw_window:
  809.   call get_process_info
  810.   mov  [rflag],1
  811.   call draw_window
  812.   ret
  813.  
  814. ;this is debug func
  815. debug:
  816.   pushad
  817.   mov  ecx,[esp+0x24]
  818.   mov  ebx,0x80100
  819.   mov  edx,0x10000a0
  820.   mov  eax,47
  821.   mov  esi,0x00ffffff
  822.   int  0x40
  823.   popad
  824.   ret  4
  825.  
  826. ;   *********************************************
  827. ;   *******  WINDOW DEFINITIONS AND DRAW ********
  828. ;   *********************************************
  829.  
  830. draw_window:
  831.   pushad
  832.   mov  eax,48
  833.   mov  ebx,3
  834.   mov  ecx,sc
  835.   mov  edx,sizeof.system_colors
  836.   int  0x40
  837.  
  838.   mov  eax,12                 ; function 12:tell os about windowdraw
  839.   mov  ebx,1                  ; 1, start of draw
  840.   int  0x40
  841.      ; DRAW WINDOW
  842.   mov  eax,0                  ; function 0 : define and draw window
  843.                               ; [x start] *65536 + [x size]
  844.   mov  ebx,[process_info+42]
  845.                               ; [y start] *65536 + [y size]
  846.   mov  ecx,[process_info+46]
  847.   mov  edx,0x03000000         ; color of work area RRGGBB,8->color gl
  848.   int  0x40
  849.      ; WINDOW LABEL
  850.   mov  eax,4                  ; function 4 : write text to window
  851.   mov  ebx,8*65536+8          ; [x start] *65536 + [y start]
  852.   mov  ecx,[sc.grab_text]
  853.   or   ecx,0x10000000         ; font 1 & color ( 0xF0RRGGBB )
  854.   mov  edx,labelt             ; pointer to text beginning
  855.   mov  esi,labellen-labelt    ; text length
  856.   int  0x40
  857.     ;check for only header window output
  858.   cmp  dword [process_info+46],25
  859.   jle  minimaze_view
  860.  
  861.      ;MENU AREA
  862.   mov  eax,[process_info+42] ;x-size window
  863.   mov  ecx,[process_info+46] ;y-size window
  864.   push ecx ;for using done
  865.   mov  ebx,0x40000
  866.   sub  eax,8
  867.   mov  edi,ecx
  868.   add  ebx,eax ;x-base + x-size
  869.   sub  edi,22 ;temporary value for menu area
  870.   push ebx ;for drawing buttons area
  871.   sub  ecx,edi ;y-base menu area
  872.   mov  edx,[sc.work_graph]
  873.   shl  ecx,0x10
  874.   mov  eax,13
  875.   add  ecx,0x10
  876.   int  0x40
  877.      ;MENU BUTTONS
  878.   ;now in hi-half ecx register begin Y-coord. menu area
  879.   ;in hi-half ebx begin X-coord.
  880.   ;menu 'File'
  881.   mov  esi,edx ;color
  882.   and  ecx,0xffff0000
  883.   and  ebx,0xffff0000
  884.   add  ecx,0x1000c
  885.   add  ebx,0x20028   ;40x12
  886.   mov  edx,2 ;menu 'File' id = 2
  887.   mov  [y_menu],ecx ;for low-level menus func.
  888.   mov  [xf_menu],ebx;for low-level menus func.
  889.   mov  eax,8
  890.   push ebx ;for output buttons texts
  891.   int  0x40
  892.   ;registers is't change
  893.   ;menu 'Coding'
  894.   add  ebx,0x290018 ;80x12
  895.   inc  edx ;menu 'coding' id = 3
  896.   mov  [xe_menu],ebx;for low-level menus func.
  897.   int  0x40
  898.   ;menu 'Help'
  899.   add  ebx,0x40ffe8 ;+0x280000 - 0x28, 40x12
  900.   inc  edx ;menu 'Help' id = 4
  901.   mov  [xh_menu],ebx;for low-level menus func.
  902.   int  0x40
  903.      ;MENU BUTTONS TEXTS
  904.   ;'File'
  905.   pop  ebx
  906.   shr  ecx,0x10
  907.   and  ebx,0xffff0000
  908.   add  ecx,3
  909.   mov  eax,4                     ; function 4 : write text to window
  910.   add  ebx,0x80000
  911.   mov  edx,f_menu
  912.   add  ebx,ecx                   ; [x start] *65536 + [y start]
  913.   mov  esi,4
  914.   mov  ecx,[sc.work_button_text]
  915.   or   ecx,0x10000000            ; font 1 & color ( 0xF0RRGGBB )
  916.   push esi                       ;for 'Help' menu text
  917.   int  0x40
  918.   ;'coding'
  919.   ;registers is't change
  920.   add  ebx,0x2d0000
  921.   ;mov  esi,6
  922.   add  esi,2
  923. ;  mov  edx,e_menu
  924.   add  edx,4
  925.   int  0x40
  926.   ;'Help'
  927.   add  ebx,0x3b0000
  928. ;   mov  esi,4
  929.   pop  esi
  930. ;  mov  edx,h_menu
  931.   add  edx,6
  932.   int  0x40
  933.  ;LOW_LEVEL MENU
  934.   ;for every hi-level menu exists one procedure
  935.   ;in begin programm they are not calls,
  936.   ;but when user click on one item hi-level menu
  937.   ;or press hot keys, call one func. and after
  938.   ;end work this func. she is redraw window -
  939.   ;low-level menu is hide. Functions:
  940.   ;menufile,menucoding,menuhelp.
  941.   ;Thay uses global virables, top-left corner every
  942.   ;hi-level menu buttons: [xf_menu],[xe_menu],[xh_menu],[y_menu]
  943.  
  944.      ;DRAW BUTTONS AREA
  945.   pop  ebx ;for push ebx into processed menu area: x-bzse + x-size
  946. ;  mov  ecx,[process_info+46]
  947.   pop  ecx
  948.   push ecx
  949.   sub  ecx,24
  950.   mov  edx,[sc.work_graph]
  951.   shl  ecx,16              ;y start
  952.   mov  eax,13
  953.   add  ecx,20
  954.   int  0x40
  955.  
  956. ;filename input area
  957. ;  mov  ecx,[process_info+46]
  958.   pop  ecx
  959.   push ecx ;for info strings
  960.   mov  ebx,0x0008005a
  961.   sub  ecx,21
  962.   xor  edx,edx
  963.   shl  ecx,16
  964.   mov  [y_filename_area],ecx
  965.   dec  edx
  966.   add  ecx,16
  967.   mov  eax,13
  968.   push ecx ;for button 'Go'
  969.   int  0x40
  970.  
  971. ;button 'Go', press in case open/save if filename input complete
  972.   ;button size = 24x16
  973.   mov  eax,8
  974.   pop  ecx ;y-base+y-size
  975.   mov  ebx,0x00680018;x-base+x-size
  976.   dec  ecx
  977.   mov  edx,0xff ;id
  978.   mov  esi,[sc.work_button]
  979.   int  0x40
  980.   shr  ecx,0x10
  981.   and  ebx,0xffff0000
  982.   add  ecx,0x50004
  983.   mov  edx,b_go
  984.   add  ebx,ecx
  985.   mov  esi,2
  986.   mov  ecx,[sc.work_button_text]
  987.   or   ecx,0x10000000
  988.   sub  eax,4
  989.   int  0x40
  990.  
  991. ;where output cursor?
  992.   mov  al,[o_s_flag]
  993.   and  al,8
  994.   je   @f
  995.   mov  ecx,[y_filename_area]
  996.   add  ecx,0x40008
  997.   jmp  cursor
  998.  @@:  ;o_s_flag<0 - not output cursor into filename area
  999.   mov  ecx,[y_cursor]
  1000.  cursor:
  1001.   push ecx
  1002.   call draw_cursor
  1003.  
  1004.   mov  eax,[y_filename_area]
  1005.   mov  ebx,0xa0000
  1006.   mov  edx,filename
  1007.   shr  eax,0x10
  1008.   and  ebx,0xffff0000
  1009.   add  eax,4
  1010.   xor  ecx,ecx
  1011.   add  ebx,eax
  1012.   movzx esi,[name_l]
  1013.   mov  eax,4
  1014.   int  0x40
  1015.  
  1016. ;info strings
  1017.      ; sizefile text
  1018. ;    mov  eax,[process_info+46]
  1019.   pop  eax
  1020.   mov  ebx,0x00840000
  1021.   sub  eax,18
  1022.   xor  ecx,ecx
  1023.   add  ebx,eax
  1024.   mov  edx,sizestr   ; pointer to text beginning
  1025.   mov  eax,4
  1026.   mov  esi,5
  1027.   int  0x40
  1028.   add  ebx,0x00530000
  1029.   inc  esi
  1030. ;    mov  edx,offst
  1031.   add  edx,5
  1032.   inc  esi
  1033.   int  0x40
  1034.     ;sizefile
  1035.   mov  ecx,[sizefile]
  1036.   mov  edx,ebx
  1037.   xor  esi,esi
  1038.   sub  edx,0x00350000
  1039.   mov  eax,47
  1040.   mov  ebx,0x80100
  1041.   int  0x40
  1042.   mov  ecx,[current]
  1043.   add  edx,0x005f0000
  1044.   int  0x40
  1045.  
  1046.   push [text_cursor] ;это позиция курсора в текстовой строке
  1047.   call draw_cursor
  1048.   mov  ecx,[sizefile]
  1049.   jecxz minimaze_view
  1050.   call output_screen
  1051.  
  1052.  minimaze_view:
  1053.   mov  eax,12  ; function 12:tell os about windowdraw
  1054.   mov  ebx,2 ; 2, end of draw
  1055.   int  0x40
  1056.   popad
  1057.   ret
  1058.  
  1059.  
  1060.  
  1061.  
  1062.  
  1063. get_process_info:
  1064.   pushad
  1065.   mov  eax,9
  1066.   mov  ebx,process_info
  1067.   xor  ecx,ecx
  1068.   dec  ecx
  1069.   int  0x40
  1070.   popad
  1071.   ret
  1072.  
  1073. coding:
  1074.   pushad
  1075.   mov  ebp,0x10000 ;0x80000
  1076.   mov  edi,[esp+0x28] ;source table
  1077.   mov  esi,[esp+0x24] ;destination table
  1078.   xor  ecx,ecx ;index in file
  1079.  new_char:
  1080.   xor  ebx,ebx ;index in tables
  1081.  not_c:
  1082.   mov  ah,[ebp+ecx] ;load char
  1083.   cmp  ah,[edi+ebx] ;
  1084.   jz   @f
  1085.   inc  ebx
  1086.   cmp  ebx,0x40
  1087.   jge  end_table
  1088.   jmp  not_c
  1089.  @@:
  1090.   mov  al,[esi+ebx]
  1091.   inc  ebx
  1092.   mov  [ebp+ecx],al
  1093.  end_table:
  1094.   inc  ecx
  1095.   cmp  ecx,[sizefile]
  1096.   jle  new_char
  1097.   popad
  1098.   ret  8
  1099.  
  1100. create_process:
  1101.   pushad
  1102.   mov  eax,51
  1103.   xor  ebx,ebx
  1104.   mov  ecx,[esp+0x24]
  1105.   inc  ebx
  1106.   mov  edx,0x7E000 ;0x1000
  1107.   int  0x40
  1108.   popad
  1109.   ret  4
  1110.  
  1111. help_thread:
  1112.   call help_window
  1113.  help_still:
  1114.   mov  eax,10
  1115.   int  0x40
  1116.   dec  eax
  1117.   jz   help_red
  1118.   dec  eax
  1119.   jz   help_key
  1120.   dec  eax
  1121.   jz   help_button
  1122.   jmp  help_still
  1123.  help_red:
  1124.   call help_window
  1125.   jmp  help_still
  1126.  help_key:
  1127.   inc  eax
  1128.   inc  eax
  1129.   int  0x40
  1130.   jmp  help_still
  1131.  help_button:
  1132.   mov  eax,17
  1133.   int  0x40
  1134.   dec  ah
  1135.   jne  help_still
  1136.   shr  eax,8
  1137.   dec  eax
  1138.   int  0x40
  1139.  
  1140. help_window:
  1141.   pushad
  1142.   mov  eax,12  ; function 12:tell os about windowdraw
  1143.   mov  ebx,1 ; 1, start of draw
  1144.   int  0x40
  1145.      ; DRAW WINDOW
  1146.   mov  eax,0 ; function 0 : define and draw window
  1147.   mov  ebx,0x500140 ; [x start] *65536 + [x size]
  1148.   mov  ecx,0x700110 ; [y start] *65536 + [y size]
  1149.   mov  edx,0x03000000 ; color of work area RRGGBB,8->color gl
  1150.   int  0x40
  1151.      ; WINDOW LABEL
  1152.   mov  eax,4 ; function 4 : write text to window
  1153.   mov  ebx,8*65536+8 ; [x start] *65536 + [y start]
  1154.   mov  ecx,0x10ffffff ; font 1 & color ( 0xF0RRGGBB )
  1155.   mov  edx,help_label ; pointer to text beginning
  1156.   mov  esi,14 ; text length
  1157.   int  0x40
  1158.      ; HELP TEXT
  1159.   add  edx,14 ;help_text addr.
  1160.   add  esi,37 ; = 51 - length 1 line
  1161.   mov  ecx,0x00ffffff
  1162.   mov  edi,(help_end-help_text)/51
  1163.  @@:
  1164.   add  ebx,0x10
  1165.   int  0x40
  1166.   add  edx,51
  1167.   dec  edi
  1168.   jnz  @b
  1169.  
  1170.  
  1171.   mov  eax,12  ; function 12:tell os about windowdraw
  1172.   mov  ebx,2 ; 2, end of draw
  1173.   int  0x40
  1174.   popad
  1175.   ret
  1176.  
  1177. about_thread:
  1178.   call about_window
  1179.  about_still:
  1180.   mov  eax,10
  1181.   int  0x40
  1182.   dec  eax
  1183.   jz   about_red
  1184.   dec  eax
  1185.   jz   about_key
  1186.   dec  eax
  1187.   jz   about_button
  1188.   jmp  about_still
  1189.  about_red:
  1190.   call about_window
  1191.   jmp  about_still
  1192.  about_key:
  1193.   inc  eax
  1194.   inc  eax
  1195.   int  0x40
  1196.   jmp  about_still
  1197.  about_button:
  1198.   mov  eax,17
  1199.   int  0x40
  1200.   dec  ah
  1201.   jne  about_still
  1202.   shr  eax,8
  1203.   dec  eax
  1204.   int  0x40
  1205.  
  1206. about_window:
  1207.   pushad
  1208.   mov  eax,12  ; function 12:tell os about windowdraw
  1209.   mov  ebx,1 ; 1, start of draw
  1210.   int  0x40
  1211.      ; DRAW WINDOW
  1212.   mov  eax,0           ; function 0 : define and draw window
  1213.   mov  ebx,0x500140    ; [x start] *65536 + [x size]
  1214.   mov  ecx,0x700110    ; [y start] *65536 + [y size]
  1215.   mov  edx,0x03000000  ; color of work area RRGGBB,8->color gl
  1216.   int  0x40
  1217.      ; WINDOW LABEL
  1218.   mov  eax,4           ; function 4 : write text to window
  1219.   mov  ebx,8*65536+8   ; [x start] *65536 + [y start]
  1220.   mov  ecx,[sc.work_button_text]
  1221.   or   ecx,0x10000000  ; font 1 & color ( 0xF0RRGGBB )
  1222.   mov  edx,about_label ; pointer to text beginning
  1223.   mov  esi,17          ; text length
  1224.   int  0x40
  1225.      ; ABOUT TEXT
  1226.   add  edx,17 ;about_text addr.
  1227.   add  esi,34 ; = 51 - length 1 line
  1228.   mov  ecx,0x00ddeeff
  1229.   mov  edi,15
  1230.  @@:
  1231.   add  ebx,0x10
  1232.   int  0x40
  1233.   add  edx,51
  1234.   dec  edi
  1235.   jnz  @b
  1236.  
  1237.   mov  eax,12  ; function 12:tell os about windowdraw
  1238.   mov  ebx,2 ; 2, end of draw
  1239.   int  0x40
  1240.   popad
  1241.   ret
  1242.  
  1243. ; DATA AREA
  1244. sizefile dd 0
  1245. current  dd 0 ;current offset relative begin file. Uses as offset for patch.
  1246. ;Coordinates left hi-level menu buttons
  1247. ;Uses into low-level menu output.
  1248. xf_menu  dd 0
  1249. xe_menu  dd 0
  1250. xh_menu  dd 0
  1251. y_menu dd 0 ;top coord. menu
  1252. y_filename_area dd 0 ;top coord. filename input area
  1253. color dd 0
  1254. y_cursor dd 0x280008 ;y coord. shl 16 + y size for cursor
  1255. x_cursor dd 0x680005 ;x coord. shl 16 + x size for cursor
  1256. name_l db 0 ;counter chars into filename
  1257. o_s_flag db 0 ;
  1258. rflag dd 0;
  1259. posx db 0
  1260. posy db 3
  1261. lines db 0
  1262. end_str dd 0x10000 ;addr. first byte for output
  1263. text_cursor dd 0x01200000
  1264.  
  1265. filename: rb 13
  1266.  
  1267. b_go: db 'Go'
  1268.  
  1269. sizestr: db 'SIZE:'
  1270.  
  1271. offst: db 'OFFSET:'
  1272.  
  1273. labelt: db   'HeEd'
  1274. labellen:
  1275.  
  1276. ;text for hi-level menu buttons
  1277. f_menu: db 'File'
  1278. e_menu: db 'Coding'
  1279. h_menu: db 'Help'
  1280. ;text for low-level menu buttons
  1281. ;menu File
  1282. m_open: db 'Open'
  1283. m_save: db 'Save'
  1284. m_exit: db 'Exit'
  1285. ;menu coding
  1286. m_win2dos: db 'Win->Dos'
  1287. m_win2koi: db 'Win->Koi'
  1288. m_win2iso: db 'Win->Iso'
  1289. m_dos2win: db 'Dos->Win'
  1290. m_dos2koi: db 'Dos->Koi'
  1291. m_dos2iso: db 'Dos->Iso'
  1292. ;menu Help
  1293. m_help: db 'Help'
  1294. m_about: db 'About'
  1295. ;tables for coding
  1296. WIN_TABLE:
  1297. db 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9
  1298. db 0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3
  1299. db 0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD
  1300. db 0xDE,0xDF,0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7
  1301. db 0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,0xF0,0xF1
  1302. db 0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB
  1303. db 0xFC,0xFD,0xFE,0xFF
  1304. DOS_TABLE:
  1305. db 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89
  1306. db 0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0x92,0x93
  1307. db 0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D
  1308. db 0x9E,0x9F,0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7
  1309. db 0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xE0,0xE1
  1310. db 0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB
  1311. db 0xEC,0xED,0xEE,0xEF
  1312. KOI_TABLE:
  1313. db 0xE1,0xE2,0xF7,0xE7,0xE4,0xE5,0xF6,0xFA,0xE9,0xEA
  1314. db 0xEB,0xEC,0xED,0xEE,0xEF,0xF0,0xF2,0xF3,0xF4,0xF5
  1315. db 0xE6,0xE8,0xE3,0xFE,0xFB,0xFD,0xFF,0xF9,0xF8,0xFC
  1316. db 0xE0,0xF1,0xC1,0xC2,0xD7,0xC7,0xC4,0xC5,0xD6,0xDA
  1317. db 0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD2,0xD3
  1318. db 0xD4,0xD5,0xC6,0xC8,0xC3,0xDE,0xDB,0xDD,0xDF,0xD9
  1319. db 0xD8,0xDC,0xC0,0xD1
  1320. ISO_TABLE:
  1321. db 0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9
  1322. db 0xBA,0xBB,0xBC,0xBD,0xBE,0xBF,0xC0,0xC1,0xC2,0xC3
  1323. db 0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD
  1324. db 0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7
  1325. db 0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF,0xE0,0xE1
  1326. db 0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB
  1327. db 0xEC,0xED,0xEE,0xEF
  1328.  
  1329. ;text for help_window
  1330. help_label: db 'Help for HeEd.'
  1331. help_text:
  1332. if lang eq ru
  1333.  db '1.HeEd в состоянии открыть файл только один раз и  '
  1334.  db '  нужное число раз сохранить его.                  '
  1335.  db '2.При открытии файла без расширения надо это расши-'
  1336.  db '  ширение все равно указывать как три пробела после'
  1337.  db '  точки.                                           '
  1338.  db '3.Само открытие файла происходит при нажатии кнопки'
  1339.  db '  "Go".                                            '
  1340.  db '4.Создание новых файлов в меню не предусмотрено, но'
  1341.  db '  можно же редактировать...                        '
  1342.  db '5.В файл записывается только количество байт, кото-'
  1343.  db '  рое было размером файла до открытия.             '
  1344.  db '6.При нажатии "Go" с пустым полем имени файла выво-'
  1345.  db '  дится память с адреса 0х80000, но размер файла   '
  1346.  db '  равен 0xFFFFFFFF.                                '
  1347.  db '               (см. инфо "About")                  '
  1348. else
  1349.  db '1.HeEd can once open file and many times save it.  '
  1350.  db '2.To open file without extension it is required to '
  1351.  db '  specify anyway as three spaces after a dot.      '
  1352.  db '3.File is opened when the button "Go" is pressed.  '
  1353.  db '4.Creation of new files in the menu is not provided'
  1354.  db '  but you can edit...                              '
  1355.  db '5.Only number of bytes which was file size when    '
  1356.  db '  opening is written to file.                      '
  1357.  db '6.If you press "Go" with empty filename field,     '
  1358.  db '  memory starting from address 0x80000 is output,  '
  1359.  db '  but file size equals to 0xFFFFFFFF.              '
  1360.  db '               (see info "About")                  '
  1361. end if
  1362. help_end:
  1363. ;text for about_window
  1364. about_label: db 'About this funny.'
  1365. about_text:
  1366. if lang eq ru
  1367.  db 'Некоторая информация для тех, кто захочет дописать '
  1368.  db 'сюда что-то свое: код практически не оптимизирован,'
  1369.  db 'так что разобраться будет не так уж сложно. Строки '
  1370.  db 'для кнопок меню должны идти прямо друг за другом,  '
  1371.  db 'т. к. я при выводе использую не mov esi,размер и   '
  1372.  db 'mov  edx,адрес а просто прибавляю смещения. Что ка-'
  1373.  db 'сается кодировок и размеров файла для сохранения,  '
  1374.  db 'то остается только добавить кнопки меню с текстом  '
  1375.  db '(при добавлении надо учитывать, что ID кнопки опоз-'
  1376.  db 'наются dec ah, а не как cmp ah,ID). Если все же бу-'
  1377.  db 'дет неприятно разбираться, то можете написать и    '
  1378.  db 'спросить. Эта программа была написана в ходе разбо-'
  1379.  db 'рок с GUI MeOS и поэтому не претендует на что-то   '
  1380.  db 'большее, чем пример. Просто надоела эта тема, а вы-'
  1381.  db 'кинуть жалко.            mailto:babalbes@yandex.ru '
  1382. else
  1383.  db 'Some information for those who want add to this    '
  1384.  db 'something their own: the code is practically not   '
  1385.  db 'optimized, so investigation is not complicated.    '
  1386.  db 'Strings for menu buttons must rank after each other'
  1387.  db 'as I use not mov esi,size and mov edx,address when '
  1388.  db 'output but simply add offsets. For encodins and    '
  1389.  db 'file sizes for save, it remains only add buttons   '
  1390.  db 'with text in menu (at addition one should take into'
  1391.  db 'account that buttons ID are recognized as dec ah   '
  1392.  db 'rather than cmp ah,ID). Nevertheless if study is   '
  1393.  db 'unpleasant, you can write and ask. This program has'
  1394.  db 'been written in course of study GUI MeOS and does  '
  1395.  db 'not therefore pretend on some more than example.   '
  1396.  db 'Just this theme bothers, but I regret to delete.   '
  1397.  db '                         mailto:babalbes@yandex.ru '
  1398. end if
  1399. about_end:
  1400.  
  1401. I_END:
  1402.  
  1403. sc system_colors
  1404.  
  1405. process_info:
  1406.   rb 1024
  1407. menu_opened db ?
  1408. m_text:
  1409.