Subversion Repositories Kolibri OS

Rev

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