Subversion Repositories Kolibri OS

Rev

Rev 318 | Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1. ;
  2. ;   DESKTOP CONTEXT MENU
  3. ;   written by Ivan Poddubny
  4. ;
  5. ;   €¢â®à - ˆ¢ ­ ®¤¤ã¡­ë©
  6. ;   e-mail: ivan-yar@bk.ru
  7. ;
  8. ;   Compile with flat assembler
  9. ;
  10. include 'lang.inc'
  11. include '..\..\..\macros.inc'
  12.  
  13. meos_app_start
  14. code
  15.  
  16.   mov   eax, 48                   ; ¯®«ãç¨âì á¨á⥬­ë¥ 梥â 
  17.   mov   ebx, 3
  18.   mov   ecx, sc                   ;   ¤à¥á áâàãªâãàë
  19.   mov   edx, sizeof.system_colors ;  ¨ ¥¥ à §¬¥à
  20.   mcall
  21.  
  22.   mov   eax,40       ; ãáâ ­®¢¨¬ ¬ áªã ᮡë⨩
  23.   mov   ebx,100000b  ; ­ á ¨­â¥à¥áã¥â ⮫쪮 ¬ëèì
  24.   mcall
  25.  
  26. still:               ; £« ¢­ë© 横« ®á­®¢­®£® ¯à®æ¥áá 
  27.  
  28.   mov   eax,10       ; ¦¤ñ¬ ᮡëâ¨ï
  29.   mcall
  30.  
  31.   mov   eax,37       ; ª ª¨¥ ­ ¦ âë ª¯®¯ª¨?
  32.   mov   ebx,2
  33.   mcall
  34.  
  35.   cmp   eax,2        ; ¥á«¨ ­¥ ¯à ¢ ï, ¢®§¢à â
  36.   jne   still
  37.  
  38. ;---¯®¥å «¨!---
  39.  
  40. ;  mov   eax,37       ; íâ® ¤«ï ®â« ¤ª¨ - ¥á«¨ ¬ëèì ¢ â®çª¥ (0;0), § ªà®¥¬áï
  41. ;  xor   ebx,ebx
  42. ;  mcall
  43. ;  test  eax,eax      ; ªãàá®à ¢ â®çª¥ (0;0), â.¥. eax = 0
  44. ;  je    exit
  45.  
  46.  
  47.   mov   eax,9        ; ¯®«ã稬 ç¨á«® ¯à®æ¥áᮢ ¢ á¨á⥬¥
  48.   mov   ebx,procinfo
  49.   xor   ecx,ecx
  50.   mcall
  51.  
  52.   inc   eax          ; ⥯¥àì ¢ eax ᮤ¥à¦¨âáï ç¨á«® ¯à®æ¥áᮢ + 1
  53.   mov   [processes],eax
  54.   mov   ecx,1
  55.  
  56.  new_process:
  57.   pushad
  58.   mov   eax,9        ; ¯®«ã稬 ¨­ä®à¬ æ¨î ® ¯à®æ¥áá¥; ­®¬¥à - ¢ ecx
  59.   mov   ebx,procinfo
  60.   mcall
  61.   mov   eax,37       ; ª®®à¤¨­ âë ªãàá®à 
  62.   xor   ebx,ebx
  63.   mcall
  64.   mov   ebx,eax                  ; eax = cursor_x
  65.   shr   eax,16                   ; ebx = cursor_y
  66.   and   ebx,0xffff
  67.   mov   [curx1],eax              ; curx1 = cursor_x
  68.   mov   [cury1],ebx              ; cury1 = cursor_y
  69. ; \begin{diamond}[18.09.2006]
  70. ; ignore minimized windows
  71.         test    [procinfo.wnd_state], 2
  72.         jnz     ne_goden
  73. ; \end{diamond}[18.09.2006]
  74.   mov   eax,[procinfo.box.left]   ; eax = wnd_x_start
  75.   mov   ebx,[procinfo.box.top]    ; ebx = wnd_y_start
  76.  
  77.   mov   ecx,[procinfo.box.width]
  78.   add   ecx,eax                  ; ecx = wnd_x_end
  79.   mov   edx,[procinfo.box.height]
  80.   add   edx,ebx                  ; ecx = wnd_y_end
  81.  
  82.   cmp   eax,[curx1]  ; wnd_x_start > cursor_x => ªãàá®à «¥¢¥¥ ®ª­ 
  83.   jg    ne_goden
  84.   cmp   ecx,[curx1]  ; wnd_x_end   < cursor_x => ªãàá®à ¯à ¢¥¥ ®ª­ 
  85.   jl    ne_goden
  86.   cmp   ebx,[cury1]  ; wnd_y_start > cursor_y => ªãàá®à ¢ëè¥ ®ª­ 
  87.   jg    ne_goden
  88.   cmp   edx,[cury1]  ; wnd_y_end   < cursor_y => ªãàá®à ­¨¦¥ ®ª­ 
  89.   jl    ne_goden
  90.  
  91. goden:               ; ª«¨ª ¡ë« ¢­ãâਠª ª®£®-â® ®ª­ , ¯®í⮬㠭¨ç¥£® ­¥ ¤¥« ¥¬
  92.   popad
  93.   jmp   still
  94.  
  95. ne_goden:            ; ª«¨ª ¡ë« á­ à㦨 à áᬠâਢ ¥¬®£® ®ª­ , ¯®í⮬ã
  96.   popad
  97.   inc   ecx
  98.   cmp   ecx,[processes]
  99.   jl    new_process  ; «¨¡® ᬮਬ á«¥¤ãî饥 ®ª­®, «¨¡® § ¯ã᪠¥¬ ¬¥­î
  100.  
  101.  
  102. @@:             ; ¯®¤®¦¤ñ¬, ¯®ª  ¯®«ì§®¢ â¥«ì ­¥ ®â¯ãá⨫ ¯à ¢ãî ª­®¯ªã ¬ëè¨
  103.   mov   eax,37
  104.   mov   ebx,2   ; äã­ªæ¨ï 37-2:
  105.   mcall    ;   ­ ¦ âë «¨ ª­®¯ª¨ ¬ëè¨?
  106.   cmp   eax,ebx ; ¥á«¨ ®â¯ãá⨫, (eax != 2)
  107.   jnz   @f      ;   ¨¤ñ¬ ¢ ­ ç «® £« ¢­®£® 横« 
  108.  
  109.   mov   eax,5   ; ¨­ ç¥
  110.   mov   ebx,2   ;   ¯®¤®¦¤ñ¬ 2 ¬á
  111.   mcall
  112.  
  113.   jmp   @b      ;   ¨ ¯à®¢¥à¨¬ ¬ëèì ®¯ïâì
  114. @@:
  115.  
  116. ; ¥á«¨ 㦥 ¡ë«® ®âªàëâ® ¬¥­î, ­ã¦­® ¯®¤®¦¤ âì, ¯®ª  ®­® § ªà®¥âáï:
  117. @@:
  118.   cmp   [menu_opened],0
  119.   je    @f
  120.   mov   eax,5
  121.   mov   ebx,3  ; ¦¤ñ¬ 3 ¬á
  122.   mcall
  123.   jmp   @b
  124. @@:
  125.  
  126.   mov   eax,51           ;   ⥯¥àì ¬®¦­® ᬥ«® § ¯ã᪠âì ¯à®æ¥áá (¯®â®ª) ¬¥­î
  127.   mov   ebx,1            ; ᮧ¤ ñ¬ ¯®â®ª (thread)
  128.   mov   ecx,start_wnd    ; â®çª  ¢å®¤  ¯®â®ª 
  129.   mov   edx,stack_wnd    ; ¢¥à設  áâíª  ¤«ï ¯®â®ª 
  130.   mcall
  131.  
  132.   jmp   still
  133.  
  134.  
  135.  
  136. exit_menu:            ; ¥á«¨ ¢ë室¨¬ ¨§ ¬¥­î, ­ ¤® § ¯¨á âì ¢ [menu_opened] 0
  137.   mov   [menu_opened],0
  138. exit:                 ; á ¬ë ¨¤ñ¬, ª®£¤  ¢ë室¨¬ ¨§ ®á­®¢­®£® ¯à®æ¥áá 
  139.   or    eax,-1        ; eax = -1
  140.   mcall
  141.  
  142.  
  143.  
  144.  
  145. ; §¤¥áì áâ àâã¥â ¯à®æ¥áá ¬¥­î
  146. start_wnd:
  147.   mov   [menu_opened],1
  148.   mov   eax,40      ; ãáâ ­®¢¨¬ ¬ áªã ¦¥« ¥¬ëå ᮡë⨩ ¤«ï í⮣® ¯à®æ¥áá 
  149.   mov   ebx,100101b ; ¬¥­î + ª­®¯ª¨ + ¯¥à¥à¨á®¢ª 
  150.   mcall
  151.  
  152. red:
  153.   call  draw_window
  154.  
  155. still2:             ; £« ¢­ë© 横« ¯à®æ¥áá  ¬¥­î
  156.  
  157.   mov   eax,10      ; ¦¤ñ¬ ᮡëâ¨ï
  158.   mcall
  159.  
  160.   cmp   eax,1       ; ¯¥à¥à¨á®¢ª ?
  161.   je    red
  162.   cmp   eax,3       ; ª­®¯ª ?
  163.   je    button
  164.   cmp   eax,6       ; ¬ëèì?
  165.   je    mouse
  166.  
  167.   jmp   still2      ; ¢¥à­ñ¬áï ¢ ­ ç «® £« ¢­®£® 横« 
  168.  
  169.  
  170. ; Ž€Ž’—ˆŠ Œ›˜ˆ
  171. mouse:            ; ª®£¤  ¯®«ì§®¢ â¥«ì ­ ¦¬ñâ ª­®¯ªã ¬ëè¨, § ªà®¥¬áï
  172.   mov   eax,37
  173.   mov   ebx,2     ; ª ª¨¥ ª­®¯ª¨ ­ ¦ âë?
  174.   mcall
  175.   test  eax,eax   ; ­¨ª ª¨¥? - ⮣¤  ¯à¥ªà á­®! ¢¥à­ñ¬áï ¢ £« ­ë© 横«
  176.   jz    still2
  177.   jmp   exit_menu ;   ¥á«¨ ¢áñ-â ª¨ ­ ¦ âë - § ªà®¥¬ ®ª­®
  178.  
  179.  
  180. ; €†€’€ ŠŽŠ€
  181. button:
  182.   mov   eax,17        ; ¯®«ãç¨âì ¨¤¥­â¨ä¨ª â®à ­ ¦ â®© ª­®¯ª¨
  183.   mcall
  184.  
  185.   sub   ah,10         ; áà ¢­¨¢ ¥¬ á 10
  186.   jl    nofuncbtns    ; ¥á«¨ ¬¥­ìè¥ - § ªà뢠¥¬ ¬¥­î
  187.  
  188.   movzx ebx,ah        ; ¯®«ã稫¨ ­®¬¥à ¯à®£à ¬¬ë ¢ ᯨ᪥ ¢ ebx
  189.   mov   esi, [startapps + ebx*4]
  190.   mov   edi, start_info.path
  191.   cld
  192.  @@:
  193.   lodsb
  194.   stosb
  195.   test  al, al
  196.   jnz   @b
  197.   mcall 70, start_info
  198.  
  199. ;  mov   eax,5         ; ¯®¤®¦¤ñ¬, ¯®ª  ¯à®£à ¬¬  § ¯ãáâ¨âìáï
  200. ;  mov   ebx,1         ;   â® ¥ñ ®ª­® ­¥ ¡ã¤¥â ®âà¨á®¢ ­® (¡ £ ¢ ï¤à¥???)
  201. ;  mcall          ; à áª®¬¬¥­â¨àã©â¥ í⨠áâப¨, ¥á«¨ ã ¢ á ¯à®¡«¥¬ë
  202.                        ; á ®âà¨á®¢ª®©
  203.  
  204. nofuncbtns:           ; § ªà뢠¥¬ ¬¥­î
  205.   jmp   exit_menu
  206.  
  207.  
  208.  
  209. _BTNS_            = 6     ; ª®«¨ç¥á⢮ ª­®¯®ª ("¯ã­ªâ®¢ ¬¥­î")
  210.  
  211. if lang eq ru
  212.   font            = 0x00000000
  213.   string_length   = 20          ; ¤«¨­  áâப¨
  214.   wnd_x_size      = 133         ; è¨à¨­  ®ª­ 
  215.   title_pos      = 36 shl 16 + 7
  216. else
  217.   font            = 0x10000000
  218.   string_length   = 12          ; ¤«¨­  áâப¨
  219.   wnd_x_size      = 105         ; è¨à¨­  ®ª­ 
  220.   title_pos      = 23 shl 16 + 7
  221. end if
  222.  
  223. ;*******************************
  224. ;********  ˆ‘“…Œ ŽŠŽ  ********
  225. ;*******************************
  226.  
  227. draw_window:
  228.  
  229.   mov   eax,12           ; ­ ç¨­ ¥¬ "à¨á®¢ âì"
  230.   mov   ebx,1
  231.   mcall
  232.  
  233.   mov   eax,[curx1]      ; ⥪ã騥 ª®®à¤¨­ âë ªãàá®à 
  234.   mov   [curx],eax       ; § ¯¨è¥¬ ¢ ª®®à¤¨­ âë ®ª­ 
  235.   mov   eax,[cury1]
  236.   mov   [cury],eax
  237.  
  238. ; ⥯¥àì ¡ã¤¥¬ áç¨â âì ª®®à¤¨­ âë ®ª­ , çâ®¡ë ®­® §  ªà © íªà ­  ­¥ ¢ë«¥§«®
  239.   mov   eax,14                ; ¯®«ã稬 à §¬¥à íªà ­ 
  240.   mcall
  241.   mov   ebx,eax
  242.   shr   eax,16                ; ¢ eax - x_screen
  243.   and   ebx,0xffff            ; ¢ ebx - y_screen
  244.   add   eax,-wnd_x_size       ; eax = [x_screen - è¨à¨­  ®ª­ ]
  245.   add   ebx,-_BTNS_*15-21     ; ebx = [y_screen - ¢ëá®â  ®ª­ ]
  246.  
  247.   cmp   eax,[curx]
  248.   jg    .okx                  ; ¥á«¨ ®ª­® ᫨誮¬ ¡«¨§ª® ª ¯à ¢®¬ã ªà î,
  249.   add   [curx],-wnd_x_size    ; ᤢ¨­¥¬ ¥£® ¢«¥¢® ­  100
  250.  .okx:
  251.  
  252.   cmp   ebx, [cury]
  253.   jg    .oky                  ; ¯® ¢¥à⨪ «¨ â®ç­® â ª¦¥
  254.   add   [cury], -_BTNS_*15-21
  255.  .oky:
  256.  
  257.   xor   eax, eax           ; äã­ªæ¨ï 0 - ᮧ¤ âì ®ª­®
  258.   mov   ebx, [curx]        ;  ebx = [ª®®à¤¨­ â  ¯® x] shl 16 + [è¨à¨­ ]
  259.   shl   ebx, 16
  260.   add   ebx, wnd_x_size
  261.   mov   ecx, [cury]        ;  ecx = [ª®®à¤¨­ â  ¯® y] shl 16 + [¢ëá®â ]
  262.   shl   ecx, 16
  263.   add   ecx, _BTNS_*15+21
  264.   mov   edx, [sc.work]     ;  æ¢¥â à ¡®ç¥© ®¡« áâ¨
  265.   mov   esi, [sc.grab]     ;  æ¢¥â § £®«®¢ª 
  266.   or    esi, 0x81000000
  267.   mov   edi, [sc.frame]    ;  æ¢¥â à ¬ª¨
  268.   mcall
  269.  
  270.   mov   eax, 4             ; § £®«®¢®ª
  271.   mov   ebx, title_pos    ;  [x] shl 16 + [y]
  272.   mov   ecx, [sc.grab_text];  èà¨äâ ¨ 梥â (á¥àë©)
  273.   or    ecx, 0x10000000
  274. ;  add   ecx, -0x333333
  275.   push  ecx
  276.   push  ecx
  277.   xor   edx,edx
  278. .dec_color:
  279.   sub   byte [esp+edx], 0x33
  280.   jae   @f
  281.   mov   byte [esp+edx], 0
  282. @@:
  283.   inc   edx
  284.   jnp   .dec_color
  285.   pop   ecx
  286.   mov   edx, title        ;   ¤à¥á § £®«®¢ª 
  287.   mov   esi, title.size   ;  ¤«¨­  § £®«®¢ª  ("M E N U")
  288.   mcall
  289.   pop   ecx
  290.   add   ebx, 1 shl 16      ;  á¤¢¨­¥¬ ¢¯à ¢® ­  1
  291.   mcall
  292.  
  293.   mov   ebx, 1*65536+wnd_x_size-2  ; ­ ç¨­ ¥¬ ¤¥« âì ª­®¯ª¨
  294.   mov   ecx, 20*65536+15
  295.   mov   edx, 10 or 0x40000000 ; ¡¨â 30 ãáâ ­®¢«¥­ => ª­®¯ª  ­¥ à¨áã¥âáï
  296.  
  297.   mov   edi,_BTNS_           ; ª®«¨ç¥á⢮ ª­®¯®ª (áçñâ稪)
  298.  
  299.  newbtn:                     ; ­ ç «® 横« 
  300.   mov   eax,8                ;  á®§¤ ñ¬ ª­®¯ªã
  301.   mcall
  302.  
  303.                              ;  ¯¨è¥¬ ⥪áâ ­  ª­®¯ª¥
  304.   pushad                     ;   ᯠᠥ¬ ॣ¨áâàë
  305.   shr   ecx, 16
  306.   and   ebx, 0xffff0000
  307.   add   ebx, ecx             ;   ebx = [x] shl 16 + [y];
  308.   add   ebx, 10*65536+4      ;   ebx += ᬥ饭¨¥ ®â­®á¨â¥«ì­® ªà ï ª­®¯ª¨;
  309.   mov   ecx, [sc.work_text]  ;   èà¨äâ ¨ 梥â
  310.   or    ecx, font
  311.   add   edx, -10             ;   edx = ­®¬¥à ª­®¯ª¨;
  312.   imul  edx, string_length   ;   edx *= ¤«¨­  áâப¨;
  313.   add   edx, text            ;   edx += text;  â¥¯¥àì ¢ edx  ¤à¥á áâப¨
  314.   mov   esi, string_length   ;   ¢ esi - ¤«¨­  áâப¨
  315.   mov   eax, 4               ;   äã­ªæ¨ï 4 - ¢ë¢®¤ ⥪áâ 
  316.   mcall
  317.   popad
  318.  
  319.   inc   edx                  ;  ­®¬¥à ª­®¯ª¨++;
  320.   add   ecx,15*65536         ;  ã¢¥«¨ç¨¬ ᬥ饭¨¥ ¯® y
  321.   dec   edi                  ;  ã¬¥­ì訬 áçñâ稪
  322.   jnz   newbtn               ; ¥á«¨ ­¥ ­®«ì, ¯®¢â®à¨¬ ¢áñ ¥éñ à §
  323.  
  324.   mov   eax,12               ; § ª®­ç¨«¨ "à¨á®¢ âì"
  325.   mov   ebx,2
  326.   mcall
  327.  
  328. ret                          ; ¢®§¢à â
  329.  
  330.  
  331.  
  332. ; „€›… Žƒ€ŒŒ›
  333. DATA
  334.  
  335.   macro strtbl name, [string]
  336.   {
  337.    common
  338.      label name dword
  339.    forward
  340.      local str
  341.      dd str
  342.    forward
  343.      str db string
  344.   }
  345.  
  346.   strtbl startapps       ,\
  347.     <"/RD/1/PIC4",0>     ,\
  348.     <"/RD/1/DESKTOP",0>  ,\
  349.     <"/RD/1/ICON",0>,\
  350.     <"/RD/1/SETUP",0>    ,\
  351.     <"/RD/1/VRR",0> ,\
  352.     <"/RD/1/CPU",0>
  353.    
  354.   sz title, "KolibriOS"
  355.  
  356.   lsz text,\
  357.     en, 'Background  ',\
  358.     en, 'Desktop     ',\
  359.     en, 'Icon manager',\
  360.     en, 'Device setup',\
  361.     en, 'VRR         ',\
  362.     en, 'Processes   ',\
  363.     \
  364.     ru, 'ƒ¥­¥à â®à ®¡®¥¢     ',\
  365.     ru, ' áâனª  ®ª®­      ',\
  366.     ru, '“¯à ¢«¥­¨¥ ¨ª®­ª ¬¨ ',\
  367.     ru, ' áâனª  ãáâனá⢠',\
  368.     ru, ' áâனª  ¬®­¨â®à   ',\
  369.     ru, 'à®æ¥ááë            '
  370.  
  371. start_info:
  372.         .mode   dd      7
  373.                 dd      0
  374.         .params dd      0
  375.                 dd      0
  376.                 dd      0
  377.                 db      0
  378.                 dd      start_info.path
  379.  
  380. ; …ˆˆ–ˆ€‹ˆ‡ˆŽ‚€›… „€›…
  381. UDATA
  382.   processes   dd ?              ; ª®«¨ç¥á⢮ ¯à®æ¥áᮢ ¢ á¨á⥬¥
  383.   curx1       dd ?              ; ª®®à¤¨­ âë ªãàá®à 
  384.   cury1       dd ?
  385.   curx        dd ?              ; ª®®à¤¨­ âë ®ª­  ¬¥­î
  386.   cury        dd ?
  387.  
  388.   menu_opened db ?              ; ®âªàëâ® ¬¥­î ¨«¨ ­¥â? (1-¤ , 0-­¥â)
  389.  
  390. align 4
  391. start_info.path rb 256
  392.  
  393.   sc       system_colors        ; á¨á⥬­ë¥ 梥â 
  394.   procinfo process_information  ; ¨­ä®à¬ æ¨ï ® ¯à®æ¥áá¥
  395.  
  396.   rb 1024                       ; áâíª ¤«ï ®ª­  ¬¥­î - 墠â¨â ¨ 1 Š¡
  397.   align 32
  398.   stack_wnd:
  399.  
  400.  
  401. MEOS_APP_END
  402. ; ŠŽ…– Žƒ€ŒŒ›