Subversion Repositories Kolibri OS

Rev

Rev 3497 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. ;*********************************
  2. ;*                               *
  3. ;*    PAINT 0.02 ¤«ï MenuetOS    *
  4. ;*                               *
  5. ;*     Š®¬¯¨«¨à®¢ âì FASM'®¬     *
  6. ;*                               *
  7. ;*********************************
  8.  
  9. ;******************************************************************************
  10. ; â㠯ணࠬ¬ã ­¥ ­ã¦­® á¥à쥧­® à áᬠâਢ âì - íâ® ¢á¥£® «¨èì ¯à¨¬¥à,
  11. ; ¢ ª®â®à®¬ ¯®ª § ­®, ª ª à ¡®â âì á ­¥ª®â®à묨 á¨á⥬­ë¬¨ äã­ªæ¨ï¬¨ Œ¥Ž‘,
  12. ; ­® ­¨ª ª ­¥ ­®à¬ «ì­ë© £à ä¨ç¥áª¨© । ªâ®à. Š®¤ ¯à®£à ¬¬ë Ž—…œ ¯à®á⮩,
  13. ; ¨ ®­  ¯à¥¤­ §­ ç¥­  ¤«ï â¥å, ªâ® ⮫쪮 ­ ç¨­ ¥â ¨§ãç âì  áᥬ¡«¥à,
  14. ; ¯®í⮬ã ï áâ६¨«áï ᤥ« âì ¥£® ª ª ¬®¦­® ¡®«¥¥ ¯®­ïâ­ë¬.
  15. ; ’¥¬ ­¥ ¬¥­¥¥, ª®¤ ¤®¢®«ì­® ­¥¯«®å® ®¯â¨¬¨§¨à®¢ ­, å®âï íâ® ­¥¬­®£®
  16. ; ¬®¦¥â § âà㤭¨âì ¥£® ¯®­¨¬ ­¨¥. Ÿ ¯®áâ à «áï âé â¥«ì­® ¯à®ª®¬¬¥­â¨à®¢ âì
  17. ; á«®¦­ë¥ ¬¥áâ . Šáâ â¨, ¨¤¥ï ¯à®£à ¬¬ë ¯à¨­ ¤«¥¦¨â ­¥ ¬­¥,   Sniper'ã, ¤«ï
  18. ; ª®â®à®£® ¢®¡é¥¬-â® ¢á¥ ¨ ¯¨á «®áì.
  19. ;   “¤ ç¨ ¢ ¨§ã祭¨¨  á¬ !
  20. ;   ˆ¢ ­ ®¤¤ã¡­ë©, ivan-yar@bk.ru
  21. ;******************************************************************************
  22.  
  23. ; ®¤ª«îç ¥¬ ­¥®¡å®¤¨¬ë¥ ¬ ªà®áë
  24. include '../../../macros.inc'
  25.  
  26. ;******************************************************************************
  27.  
  28. ; €—€‹Ž Žƒ€ŒŒ›
  29. use32
  30.         org  0x0
  31.         db   'MENUET01'      ; 8 byte id
  32.         dd   0x01            ; title version
  33.         dd   START           ; start of code
  34.         dd   I_END           ; size of image
  35.         dd   E_END           ; memory for app
  36.         dd   E_END           ; esp
  37.         dd   0x0,0x0         ; I_Param , I_Icon
  38.  
  39. ; Ž‹€‘’œ ŠŽ„€
  40. START:
  41.     mov  eax,40       ; á®®¡é¨¬ á¨á⥬¥, ª ª¨¥ ᮡëâ¨ï ¡ã¤¥¬ ®¡à ¡ â뢠âì
  42.     mov  ebx,0100101b ; ¬ áª  ᮡë⨩ - ¯¥à¥à¨á®¢ª  (1) + ª­®¯ª  (3) + ¬ëèì (6
  43.     int  0x40         ; íâ  ª®¬ ­¤  ¢ë§ë¢ ¥â á¨á⥬­ãî äã­ªæ¨î
  44.  
  45.     mov  [workarea.cx],5  ; ª®®à¤¨­ âë à ¡®ç¥© (ª«¨¥­â᪮©) ®¡« áâ¨
  46.     mov  [workarea.cy],30  ; ¤«ï à¨á®¢ ­¨ï
  47.  
  48. red:
  49.     call draw_window   ; ¢ë§ë¢ ¥¬ ¯à®æ¥¤ãàã ®âà¨á®¢ª¨ ®ª­ 
  50.  
  51. still:            ; ƒ‹€‚›‰ –ˆŠ‹ Žƒ€ŒŒ› - –ˆŠ‹ Ž€Ž’Šˆ ‘ŽŽ™…ˆ‰
  52.  
  53.     mov  eax,10   ; äã­ªæ¨ï 10 - ¦¤ âì ᮡëâ¨ï; ¯à®£à ¬¬  ®áâ ­ ¢«¨¢ ¥âáï ­ 
  54.     int  0x40     ; á«¥¤ãîé ï ª®¬ ­¤  ­¥ ¡ã¤¥â ¢ë¯®«­¥­  ¤® â¥å ¯®à, ¯®ª 
  55.                   ; ­¥ ¯à®¨§®©¤ñâ ᮡë⨥
  56.  
  57.     ; ⥯¥àì ॣ¨áâà eax ᮤ¥à¦¨â ­®¬¥à ᮡëâ¨ï
  58.     ; ¯®®ç¥à¥¤­® áà ¢­¨¬ ¥£® á® ¢á¥¬¨ ¢®§¬®¦­ë¬¨ §­ ç¥­¨ï¬¨, çâ®¡ë ¢ë§¢ âì
  59.     ; ­ã¦­ë© ®¡à ¡®â稪
  60.  
  61.     cmp  eax,1    ; ¯¥à¥à¨á®¢ âì ®ª­® ?
  62.     je   red      ; ¥á«¨ ॣ¨áâà eax à ¢¥­ ¥¤¨­¨æ¥, â® ¯¥à¥å®¤¨¬ ­  ¬¥âªã red
  63.     cmp  eax,3    ; ­ ¦ â  ª­®¯ª  ?
  64.     je   button
  65.     cmp  eax,6    ; ¬ëèì?
  66.     je   mouse
  67.  
  68.     jmp  still    ; ¥á«¨ ¯à®¨§®è«® ᮡë⨥, ª®â®à®¥ ¬ë ­¥ ®¡à ¡ â뢠¥¬,
  69.                   ; ¯à®áâ® ¢®§¢à é ¥¬áï ª ­ ç «ã 横« , å®âï â ª®£® ¡ëâì
  70.                   ; ­¥ ¤®«¦­®! ’.¥. ¥á«¨ íâã ª®¬ ­¤ã ®âá ã¡à âì, â®
  71.                   ; ­¨ç¥£® áâà è­®£® ­¥ á«ãç¨âáï.
  72.  
  73. ;******************************************************************************
  74.  
  75.   button:        ; ®¡à ¡®â稪 ­ ¦ â¨ï ª­®¯ª¨ ¢ ®ª­¥ ¯à®£à ¬¬ë
  76.     mov  eax,17  ; äã­ªæ¨ï N17 - ¯®«ãç¨âì ¨¤¥­â¨ä¨ª â®à ­ ¦ â®© ª­®¯ª¨
  77.     int  0x40
  78.  
  79.     ; ⥯¥àì ¢ ॣ¨áâॠah ᮤ¥à¦¨âáï ¨¤¥­â¨ä¨ª â®à.
  80.  
  81.     shr  eax,8   ; ah -> al (ᤢ¨£ ­  8 ¡¨â ¢¯à ¢®)
  82.  
  83.     dec  al       ; ¨¤¥­â¨ä¨ª â®à_ª­®¯ª¨--;
  84.     jnz  .noclose ; ¥á«¨ १ã«ìâ â ¯à¥¤ë¤ã饩 ª®¬ ­¤ë à ¢¥­ ­ã«î, § ªà뢠¥¬áï
  85.                   ; ¨­ ç¥ - ¨¤ñ¬ ­  ¬¥âªã noclose
  86.  
  87.     or   eax,-1  ; ¢ë室 ¨§ ¯à®£à ¬¬ë
  88.     int  0x40
  89.  
  90.   .noclose:
  91.     ; ¥á«¨ ¬ë á ¯®¯ «¨, §­ ç¨â ¨¤¥­â¨ä¨ª â®à ª­®¯ª¨ ­¥ ¡ë« à ¢¥­ ­ã«î...
  92.     ; ⥯¥àì ã ­ á ¢ eax ᮤ¥à¦¨âáï (­®¬¥à 梥⭮© ª­®¯ª¨ - 1),
  93.     ; â.¥ ¨«¨ 1, ¨«¨ 2, ... ,¨«¨ 5
  94.  
  95.     ; 㬥­ì訬 ­  1:
  96.     dec  eax
  97.  
  98.     ; ¢®â íâ  ¢®â ª®¬ ­¤  ¨§¢«¥ª ¥â ¢ eax ¤¢®©­®¥ á«®¢® ¯®  ¤à¥áã colors+eax*4
  99.     ; £¤¥ colors - ᬥ饭¨¥ ¬¥âª¨ colors, ¯®á«¥ ª®â®à®© ¨¤¥â ¯®á«¥¤®¢ â¥«ì­®áâì
  100.     ; 梥⮢, eax*4 - ­®¬¥à 梥â , 㬭®¦¥­­ë© ­  4, â.ª. ­  ®¤¨­ 梥⠭㦭®
  101.     ; ç¥âëॠ¡ ©â .
  102.     mov  eax,[colors+eax*4]
  103.  
  104.     ; ⥯¥àì ¬ë ãáâ ­®¢¨¬ 梥â, ᮤ¥à¦ é¨©áï ¢ ॣ¨áâॠeax ª ª ®á­®¢­®©:
  105.     mov  [active_color],eax
  106.  
  107.     ; ­ã ¢®â, ᮡá⢥­­®, ¨ ¢áñ, çâ® ®â ­ á âॡ®¢ «®áì ;)
  108.     ; ¢¥à­ñ¬áï ª ­ ç «ã 横«  ®¡à ¡®âª¨ ᮡë⨩
  109.     jmp  still
  110.  
  111. ;******************************************************************************
  112.  
  113.   mouse:          ; ®¡à ¡®â稪 ¬ëè¨
  114.     mov  eax,37             ; á­ ç «  ¯®«ã稬 ⥪ã騥 ª®®à¤¨­ âë ¬ëè¨
  115.     mov  ebx,1
  116.     int  0x40
  117.  
  118.     mov  ebx,eax            ; ¯à¥®¡à §ã¥¬ ¨å
  119.     shr  eax,16             ;   eax=x;
  120.     and  ebx,0xffff         ;   ebx=y;
  121.  
  122.     cmp  ebx,22
  123.     jb   save_canvas
  124.  
  125.     sub  eax,[workarea.cx]  ; x-=[workarea.cx]
  126.     cmp  eax,0              ; ¥á«¨ ¬ëèì «¥¢¥¥ ª«¨¥­â᪮© ®¡« áâ¨,
  127.     jle  .not_pressed       ;   ­¨ç¥£® ­¥ à¨á㥬
  128.     cmp  eax,[workarea.sx]  ; ¥á«¨ ¬ëèì ¯à ¢¥¥...
  129.     jae  .not_pressed
  130.  
  131.     sub  ebx,[workarea.cy]
  132.     cmp  ebx,0              ; ...¢ëè¥...
  133.     jle  .not_pressed
  134.     cmp  ebx,[workarea.sy]  ; ...­¨¦¥...
  135.     jae  .not_pressed
  136.  
  137.     ; ª ª¨¥ ª­®¯ª¨ ­ ¦ âë?
  138.     mov  eax,37
  139.     mov  ebx,2
  140.     int  0x40
  141.  
  142.     ; ¥á«¨ «¥¢ ï ª­®¯ª  (â.¥. eax = 1), ⥠¯®©¤ñ¬ ¤ «ìè¥
  143.     cmp  eax,1
  144.     je   .leftbtn
  145.  
  146.   .not_pressed:
  147.     ; ‹¥¢ ï ª­®¯ª  ­¥ ­ ¦ â , § ¯®¬­¨¬ ⥪ã騥 ª®®à¤¨­ âë ¨ ¡ã¤¥¬ ¦¤ âì ᮡëâ¨ï
  148.     mov  [mouse_pressed],0   ; ¬ëèì ­¥ ­ ¦ â 
  149.     mov  eax,37              ; ¯®«ã稬 ª®®à¤¨­ âë
  150.     mov  ebx,1
  151.     int  0x40
  152.     mov  ebx,eax
  153.     shr  eax,16
  154.     and  ebx,0xffff
  155.     mov  [old_x],eax         ; § ¯®¬­¨¬ ¨å
  156.     mov  [old_y],ebx
  157.     jmp  still
  158.  
  159.   .leftbtn:
  160.     ; ‹¥¢ ï ª­®¯ª  ­ ¦ â , ­ ¤® íâ® § ¯¨á âì!
  161.     mov  [mouse_pressed],1
  162.  
  163.     ; ®«ã稬 ª®®à¤¨­ âë ªãàá®à  ¬ëè¨ (®â­®á¨â¥«ì­® ®ª­ )
  164.         mcall 37,1 ; ¯®«ãç¨âì á®áâ®ï­¨¥ ¬ëè¨
  165.  
  166.     ; ¥à¥¤¥« ¥¬ ¨å â ª, çâ®¡ë ®­¨ ¡ë«¨ ¢ à §­ëå ॣ¨áâà å, â.¥. eax ¨ ebx
  167.     mov  ebx,eax
  168.     shr  eax,16
  169.     and  ebx,0xffff
  170.  
  171.     ; ®¤£®â®¢¨¬ ¯ à ¬¥âàë ¤«ï ä㭪樨 à¨á®¢ ­¨ï «¨­¨¨
  172.     mov  ecx,[old_x]     ; ¤«ï ­ ç «  § £à㧨¬ áâ àë¥ ª®®à¤¨­ âë
  173.     mov  edx,[old_y]
  174.     mov  [old_x],eax     ; ⥯¥àì á®åà ­¨¬ ⥪ã騥 ¢ áâ àë¥
  175.     mov  [old_y],ebx
  176.     shl  ecx,16          ; ¢ ¢¥àå­¥¥ á«®¢® ­ ç «ì­ë¥ (⥪ã騥) ª®®à¤¨­ âë
  177.     shl  edx,16
  178.     add  eax,ecx         ;   ¢ ­¨¦­¥¥ á«®¢® ª®­¥ç­ë¥, â.¥. áâ àë¥
  179.     add  ebx,edx
  180.  
  181.     mov  ecx,ebx             ; ¯®¬¥­ï¥¬ ॣ¨áâàë â ª, ª ª íâ㠭㦭® 38 ä㭪樨
  182.     mov  ebx,eax
  183.     mov  eax,38              ; ­®¬¥à ä㭪樨 ¢ eax
  184.     mov  edx,[active_color]  ; ¢ edx 梥â
  185.     int  0x40
  186.  
  187. ;             - ¯®¯à®¡ã©â¥ ¯®áâ ¢¨âì ¤à㣨¥ §­ ç¥­¨ï (00090001)
  188.     mov  edi,0x00010001      ; çâ®¡ë «¨­¨ï ­¥ ¡ë«  ᫨誮¬ â®­ª®©,
  189.     add  ebx,edi             ; ­ à¨á㥬 à冷¬ ¥é¥ 3!
  190.     int  0x40
  191.     add  ecx,edi
  192.     int  0x40
  193.     sub  ebx,edi
  194.     int  0x40
  195.  
  196.     sub  ebx,edi             ; ­ã   ç⮡ë ᬮâ५®áì ᮢᥬ ªàãâ®,
  197.     int  0x40                ; ¤®à¨á㥬 ¥é¥ 5!
  198.     sub  ecx,edi
  199.     int  0x40
  200.     sub  ecx,edi
  201.     int  0x40
  202.     add  ebx,edi
  203.     int  0x40
  204.     add  ebx,edi
  205.     int  0x40
  206.  
  207.   jmp still
  208.  
  209. ;******************************************************************************
  210.  
  211. save_canvas:
  212.     mov  eax,[proc_info.box.width]
  213.     add  eax,[workarea.cx]
  214.     mov  ebx,[proc_info.box.height]
  215.     add  ebx,[workarea.cy]
  216.  
  217.     jmp still
  218.  
  219. ;******************************************************************************
  220.  
  221. ;   *********************************************
  222. ;   *******  Ž…„…‹…ˆ… ˆ Ž’ˆ‘Ž‚Š€ ŽŠ€ *******
  223. ;   *********************************************
  224.  
  225. draw_window:
  226.  
  227.     mcall 48,3,sc,sizeof.system_colors                     ; Ž„ƒ“†€…Œ ‘ˆ‘’…Œ›… –‚…’€
  228.         mcall 12, 1                    ; ­ ç «® ®âà¨á®¢ª¨ ®ª­ 
  229.     mov edx, [sc.work]
  230.     or  edx, 0x33000000
  231.     mcall 0, (100 shl 16)+400, (100 shl 16)+300, , , title ; à¨á㥬 ®ª­®
  232.         mcall 12, 1
  233.  
  234.     mcall 9,proc_info,-1             ; ¯®«ã稬 ¨­ä®à¬ æ¨î ® ᢮¥¬ ¯®â®ª¥
  235.  
  236.     mov  eax,[proc_info.box.width]   ; ­ áâந¬ à §¬¥à à ¡®ç¥© ®¡« áâ¨
  237.     sub  eax,20                      ; (å à §¬¥à ®ª­  - 20)
  238.     mov  [workarea.sx],eax
  239.     mov  eax,[proc_info.box.height]
  240.     sub  eax,63                      ; (ã à §¬¥à - 63)
  241.     mov  [workarea.sy],eax
  242.  
  243.     cmp  [proc_info.box.height],80
  244.     jb   .finish
  245.        
  246.         mov eax, 8
  247.         mov edx, 1
  248.     ; ᮧ¤ ñ¬ ª­®¯ª¨ ¢ë¡®à  梥â :
  249.     mov  ebx,10*65536+15           ; ­ ç «ì­ ï x ª®®à¤¨­ â  ¨ à §¬¥à
  250.     mov  ecx, 7*65536+15           ; ­ ç «ì­ ï y ª®®à¤¨­ â  & size
  251.  .new_button:
  252.     inc  edx                       ; ¨¤¥­â¨ä¨ª â®à++;
  253.     mov  esi,[btn_colors-8+edx*4]  ; 梥⠪­®¯ª¨
  254.     int  0x40                      ; áâ ¢¨¬ ª­®¯ªã
  255.     add  ebx,18*65536              ; á«¥¤ãîé ï ª­®¯ª  ¯à ¢¥¥ ­  12
  256.     cmp  edx,9                     ; áà ¢­¨¢ ¥¬ edx (¨¤¥­â¨ä¨ª â®à) á 9
  257.     jbe  .new_button               ; ¥á«¨ ¬¥­ìè¥ ¨«¨ à ¢­® -> ¥éñ ®¤­ã ª¯®ªã
  258.  
  259.     mov  eax,13                    ; ç¨á⨬ "宫áâ" - ª«¨¥­âáªãî ®¡« áâì
  260.     mov  ebx,[workarea.cx]
  261.     mov  ecx,[workarea.cy]
  262.     shl  ebx,16
  263.     shl  ecx,16
  264.     add  ebx,[workarea.sx]
  265.     add  ecx,[workarea.sy]
  266.     mov  edx,0xffffff
  267.     mcall 13
  268.  
  269.  .finish:
  270.     ret
  271.  
  272. ;******************************************************************************
  273. ; ­ ç «® ®¡« á⨠¨­¨æ¨ «¨§¨à®¢ ­­ëå ¤ ­­ëå
  274. ; ¥á«¨ ªâ® ¥éñ ­¥ §­ ¥â, çâ® §­ ç¨â "¨­¨æ¨ «¨§¨à®¢ ­­ë¥", â® ¯®ïá­ïî:
  275. ; í⮠⥠¤ ­­ë¥, ª®â®àë¬ ¯à¨á¢®¥­® ­ ç «ì­®¥ §­ ç¥­¨¥
  276.  
  277. ;data
  278.  
  279. title db  'Simple Paint v0.3',0
  280.    
  281.    mouse_pressed   db  0 ; ¯®ª §ë¢ ¥â, ­ ¦ â  «¨ ¡ë«  ¬ëèì ¢ ¯à¥¤ë¤ã騩 ¬®¬¥­â
  282.  
  283. ; æ¢¥â  ª­®¯®ª
  284. btn_colors:
  285.    dd 0xdddddd ; white
  286.    dd 0x444444 ; black
  287.    dd 0x00dd00 ; green
  288.    dd 0x0000dd ; blue
  289.    dd 0xdd0000 ; red
  290.    dd 0xdd00dd ; magenta
  291.    dd 0xdddd00 ; yellow
  292.    dd 0x00dddd ; cyan
  293.    dd 0x559955 ; warm green
  294.  
  295. ; æ¢¥â  ª¨á⨠(¢ ⮬ ¦¥ ¯®à浪¥, çâ® ¨ æ¢¥â  ª­®¯®ª)
  296. colors:
  297.    dd 0xffffff ; ¡¥«ë©
  298.    dd 0x000000 ; ç¥à­ë©
  299.    dd 0x00ff00 ; §¥«¥­ë©
  300.    dd 0x0000ff ; ᨭ¨©
  301.    dd 0xff0000 ; ªà á­ë©
  302.    dd 0xff00ff ; ¯ãà¯ãà­ë©
  303.    dd 0xffff00 ; ¦¥«âë©
  304.    dd 0x00ffff ; £®«ã¡®©
  305.    dd 0x77bb77 ; ⥯«ë© §¥«¥­ë©
  306.  
  307. ;******************************************************************************
  308. ;   ¢®â âãâ ­ ç¨­ ¥âáï ®¡« áâì …¨­¨æ¨ «¨§¨à®¢ ­­ëå ¤ ­­ëå, â.¥.
  309. ; §¤¥áì ¤ ­­ë¬ §­ ç¥­¨ï ­¥ ¯à¨á¢®¥­ë. ‚ ®â«¨ç¨¥ ®â ¨­¨æ., ­¥ 㢥«¨ç¨¢ îâ à §¬¥à
  310. ; ä ©« 
  311.  
  312. I_END:
  313.  
  314.    active_color    dd  ?           ;  ªâ¨¢­ë© 梥â
  315.  
  316.    old_x           dd  ?           ; áâ àë¥ ª®®à¤¨­ âë ¬ëè¨
  317.    old_y           dd  ?
  318.  
  319.    workarea:                       ; ª®®à¤¨­ âë ¨ à §¬¥àë ª«¨¥­â᪮© ®¡« áâ¨
  320.        .cx     dd  ?               ;   c - ª®®¤¨­ âë
  321.        .cy     dd  ?
  322.        .sx     dd  ?               ;   s - à §¬¥àë
  323.        .sy     dd  ?
  324.  
  325.    sc          system_colors       ; á¨á⥬­ë¥ 梥â 
  326.    proc_info   process_information ; ¨­ä®à¬ æ¨ï ® ¯à®æ¥áá¥
  327.  
  328.    restflag    dd  ?
  329.    canvas      rb  800*600*3
  330.  
  331. E_END:
  332.