Subversion Repositories Kolibri OS

Rev

Rev 661 | 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,ebx        ; ¥á«¨ ­¥ ¯à ¢ ï, ¢®§¢à â
  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.   test  eax,ebx ; ¥á«¨ ®â¯ãá⨫, (eax != 2)
  107.   jz    @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.  
  178.         mcall   37, 0
  179.         mov     esi, eax
  180.         shr     esi, 16
  181.         movzx   edi, ax
  182.         mcall   9, procinfo2, -1
  183.         mov     eax, [procinfo2.box.left]
  184.         cmp     esi, eax
  185.         jl      exit_menu
  186.         add     eax, [procinfo2.box.width]
  187.         cmp     esi, eax
  188.         jge     exit_menu
  189.         mov     eax, [procinfo2.box.top]
  190.         cmp     edi, eax
  191.         jl      exit_menu
  192.         add     eax, [procinfo2.box.height]
  193.         cmp     edi, eax
  194.         jge     exit_menu
  195.  
  196.         jmp     still2
  197.  
  198. ; €†€’€ ŠŽŠ€
  199. button:
  200.   mov   eax,17        ; ¯®«ãç¨âì ¨¤¥­â¨ä¨ª â®à ­ ¦ â®© ª­®¯ª¨
  201.   mcall
  202.  
  203.   sub   ah,10         ; áà ¢­¨¢ ¥¬ á 10
  204.   jl    nofuncbtns    ; ¥á«¨ ¬¥­ìè¥ - § ªà뢠¥¬ ¬¥­î
  205.  
  206.   movzx ebx,ah        ; ¯®«ã稫¨ ­®¬¥à ¯à®£à ¬¬ë ¢ ᯨ᪥ ¢ ebx
  207.   mov   esi, [startapps + ebx*4]
  208.   mov   edi, start_info.path
  209.   cld
  210.  @@:
  211.   lodsb
  212.   stosb
  213.   test  al, al
  214.   jnz   @b
  215.   mcall 70, start_info
  216.  
  217. ;  mov   eax,5         ; ¯®¤®¦¤ñ¬, ¯®ª  ¯à®£à ¬¬  § ¯ãáâ¨âìáï
  218. ;  mov   ebx,1         ;   â® ¥ñ ®ª­® ­¥ ¡ã¤¥â ®âà¨á®¢ ­® (¡ £ ¢ ï¤à¥???)
  219. ;  mcall          ; à áª®¬¬¥­â¨àã©â¥ í⨠áâப¨, ¥á«¨ ã ¢ á ¯à®¡«¥¬ë
  220.                        ; á ®âà¨á®¢ª®©
  221.  
  222. nofuncbtns:           ; § ªà뢠¥¬ ¬¥­î
  223.   jmp   exit_menu
  224.  
  225.  
  226.  
  227. _BTNS_            = 6     ; ª®«¨ç¥á⢮ ª­®¯®ª ("¯ã­ªâ®¢ ¬¥­î")
  228.  
  229. if lang eq ru
  230.   font            = 0x00000000
  231.   string_length   = 20          ; ¤«¨­  áâப¨
  232.   wnd_x_size      = 133         ; è¨à¨­  ®ª­ 
  233.   title_pos      = 36 shl 16 + 7
  234. else
  235.   font            = 0x10000000
  236.   string_length   = 12          ; ¤«¨­  áâப¨
  237.   wnd_x_size      = 105         ; è¨à¨­  ®ª­ 
  238.   title_pos      = 23 shl 16 + 7
  239. end if
  240.  
  241. ;*******************************
  242. ;********  ˆ‘“…Œ ŽŠŽ  ********
  243. ;*******************************
  244.  
  245. draw_window:
  246.  
  247.   mov   eax,12           ; ­ ç¨­ ¥¬ "à¨á®¢ âì"
  248.   mov   ebx,1
  249.   mcall
  250.  
  251.   mov   eax,[curx1]      ; ⥪ã騥 ª®®à¤¨­ âë ªãàá®à 
  252.   mov   [curx],eax       ; § ¯¨è¥¬ ¢ ª®®à¤¨­ âë ®ª­ 
  253.   mov   eax,[cury1]
  254.   mov   [cury],eax
  255.  
  256. ; ⥯¥àì ¡ã¤¥¬ áç¨â âì ª®®à¤¨­ âë ®ª­ , çâ®¡ë ®­® §  ªà © íªà ­  ­¥ ¢ë«¥§«®
  257.   mov   eax,14                ; ¯®«ã稬 à §¬¥à íªà ­ 
  258.   mcall
  259.   mov   ebx,eax
  260.   shr   eax,16                ; ¢ eax - x_screen
  261.   and   ebx,0xffff            ; ¢ ebx - y_screen
  262.   add   eax,-wnd_x_size       ; eax = [x_screen - è¨à¨­  ®ª­ ]
  263.   add   ebx,-_BTNS_*15-21     ; ebx = [y_screen - ¢ëá®â  ®ª­ ]
  264.  
  265.   cmp   eax,[curx]
  266.   jg    .okx                  ; ¥á«¨ ®ª­® ᫨誮¬ ¡«¨§ª® ª ¯à ¢®¬ã ªà î,
  267.   add   [curx],-wnd_x_size    ; ᤢ¨­¥¬ ¥£® ¢«¥¢® ­  100
  268.  .okx:
  269.  
  270.   cmp   ebx, [cury]
  271.   jg    .oky                  ; ¯® ¢¥à⨪ «¨ â®ç­® â ª¦¥
  272.   add   [cury], -_BTNS_*15-21
  273.  .oky:
  274.  
  275.   xor   eax, eax           ; äã­ªæ¨ï 0 - ᮧ¤ âì ®ª­®
  276.   mov   ebx, [curx]        ;  ebx = [ª®®à¤¨­ â  ¯® x] shl 16 + [è¨à¨­ ]
  277.   shl   ebx, 16
  278.   add   ebx, wnd_x_size
  279.   mov   ecx, [cury]        ;  ecx = [ª®®à¤¨­ â  ¯® y] shl 16 + [¢ëá®â ]
  280.   shl   ecx, 16
  281.   add   ecx, _BTNS_*15+21
  282.   mov   edx, [sc.work]     ;  æ¢¥â à ¡®ç¥© ®¡« áâ¨
  283.   mov   esi, [sc.grab]     ;  æ¢¥â § £®«®¢ª 
  284.   or    esi, 0x81000000
  285.   mov   edi, [sc.frame]    ;  æ¢¥â à ¬ª¨
  286.   mcall
  287.  
  288.   mov   eax, 4             ; § £®«®¢®ª
  289.   mov   ebx, title_pos    ;  [x] shl 16 + [y]
  290.   mov   ecx, [sc.grab_text];  èà¨äâ ¨ 梥â (á¥àë©)
  291.   or    ecx, 0x10000000
  292. ;  add   ecx, -0x333333
  293.   push  ecx
  294.   push  ecx
  295.   xor   edx,edx
  296. .dec_color:
  297.   sub   byte [esp+edx], 0x33
  298.   jae   @f
  299.   mov   byte [esp+edx], 0
  300. @@:
  301.   inc   edx
  302.   jnp   .dec_color
  303.   pop   ecx
  304.   mov   edx, title        ;   ¤à¥á § £®«®¢ª 
  305.   mov   esi, title.size   ;  ¤«¨­  § £®«®¢ª  ("M E N U")
  306.   mcall
  307.   pop   ecx
  308.   add   ebx, 1 shl 16      ;  á¤¢¨­¥¬ ¢¯à ¢® ­  1
  309.   mcall
  310.  
  311.   mov   ebx, 1*65536+wnd_x_size-2  ; ­ ç¨­ ¥¬ ¤¥« âì ª­®¯ª¨
  312.   mov   ecx, 20*65536+15
  313.   mov   edx, 10 or 0x40000000 ; ¡¨â 30 ãáâ ­®¢«¥­ => ª­®¯ª  ­¥ à¨áã¥âáï
  314.  
  315.   mov   edi,_BTNS_           ; ª®«¨ç¥á⢮ ª­®¯®ª (áçñâ稪)
  316.  
  317.  newbtn:                     ; ­ ç «® 横« 
  318.   mov   eax,8                ;  á®§¤ ñ¬ ª­®¯ªã
  319.   mcall
  320.  
  321.                              ;  ¯¨è¥¬ ⥪áâ ­  ª­®¯ª¥
  322.   pushad                     ;   ᯠᠥ¬ ॣ¨áâàë
  323.   shr   ecx, 16
  324.   and   ebx, 0xffff0000
  325.   add   ebx, ecx             ;   ebx = [x] shl 16 + [y];
  326.   add   ebx, 10*65536+4      ;   ebx += ᬥ饭¨¥ ®â­®á¨â¥«ì­® ªà ï ª­®¯ª¨;
  327.   mov   ecx, [sc.work_text]  ;   èà¨äâ ¨ 梥â
  328.   or    ecx, font
  329.   add   edx, -10             ;   edx = ­®¬¥à ª­®¯ª¨;
  330.   imul  edx, string_length   ;   edx *= ¤«¨­  áâப¨;
  331.   add   edx, text            ;   edx += text;  â¥¯¥àì ¢ edx  ¤à¥á áâப¨
  332.   mov   esi, string_length   ;   ¢ esi - ¤«¨­  áâப¨
  333.   mov   eax, 4               ;   äã­ªæ¨ï 4 - ¢ë¢®¤ ⥪áâ 
  334.   mcall
  335.   popad
  336.  
  337.   inc   edx                  ;  ­®¬¥à ª­®¯ª¨++;
  338.   add   ecx,15*65536         ;  ã¢¥«¨ç¨¬ ᬥ饭¨¥ ¯® y
  339.   dec   edi                  ;  ã¬¥­ì訬 áçñâ稪
  340.   jnz   newbtn               ; ¥á«¨ ­¥ ­®«ì, ¯®¢â®à¨¬ ¢áñ ¥éñ à §
  341.  
  342.   mov   eax,12               ; § ª®­ç¨«¨ "à¨á®¢ âì"
  343.   mov   ebx,2
  344.   mcall
  345.  
  346. ret                          ; ¢®§¢à â
  347.  
  348.  
  349.  
  350. ; „€›… Žƒ€ŒŒ›
  351. DATA
  352.  
  353.   macro strtbl name, [string]
  354.   {
  355.    common
  356.      label name dword
  357.    forward
  358.      local str
  359.      dd str
  360.    forward
  361.      str db string
  362.   }
  363.  
  364.   strtbl startapps       ,\
  365.     <"/sys/PIC4",0>     ,\
  366.     <"/sys/DESKTOP",0>  ,\
  367.     <"/sys/ICONMNGR",0>,\
  368.     <"/sys/SETUP",0>    ,\
  369.     <"/sys/VRR",0> ,\
  370.     <"/sys/CPU",0>
  371.    
  372.   sz title, "KolibriOS"
  373.  
  374.   lsz text,\
  375.     en, 'Background  ',\
  376.     en, 'Desktop     ',\
  377.     en, 'Icon manager',\
  378.     en, 'Device setup',\
  379.     en, 'VRR         ',\
  380.     en, 'Processes   ',\
  381.     \
  382.     ru, 'ƒ¥­¥à â®à ®¡®¥¢     ',\
  383.     ru, ' áâனª  ®ª®­      ',\
  384.     ru, '“¯à ¢«¥­¨¥ ¨ª®­ª ¬¨ ',\
  385.     ru, ' áâனª  ãáâனá⢠',\
  386.     ru, ' áâனª  ¬®­¨â®à   ',\
  387.     ru, 'à®æ¥ááë            '
  388.  
  389. start_info:
  390.         .mode   dd      7
  391.                 dd      0
  392.         .params dd      0
  393.                 dd      0
  394.                 dd      0
  395.                 db      0
  396.                 dd      start_info.path
  397.  
  398. ; …ˆˆ–ˆ€‹ˆ‡ˆŽ‚€›… „€›…
  399. UDATA
  400.   processes   dd ?              ; ª®«¨ç¥á⢮ ¯à®æ¥áᮢ ¢ á¨á⥬¥
  401.   curx1       dd ?              ; ª®®à¤¨­ âë ªãàá®à 
  402.   cury1       dd ?
  403.   curx        dd ?              ; ª®®à¤¨­ âë ®ª­  ¬¥­î
  404.   cury        dd ?
  405.  
  406.   menu_opened db ?              ; ®âªàëâ® ¬¥­î ¨«¨ ­¥â? (1-¤ , 0-­¥â)
  407.  
  408. align 4
  409. start_info.path rb 256
  410.  
  411.   sc       system_colors        ; á¨á⥬­ë¥ 梥â 
  412.   procinfo process_information  ; ¨­ä®à¬ æ¨ï ® ¯à®æ¥áá¥
  413.   procinfo2 process_information
  414.  
  415.   rb 1024                       ; áâíª ¤«ï ®ª­  ¬¥­î - 墠â¨â ¨ 1 Š¡
  416.   align 32
  417.   stack_wnd:
  418.  
  419.  
  420. MEOS_APP_END
  421. ; ŠŽ…– Žƒ€ŒŒ›
  422.