Subversion Repositories Kolibri OS

Rev

Rev 154 | 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,40       ; ãáâ ­®¢¨¬ ¬ áªã ᮡë⨩
  17.   mov   ebx,100000b  ; ­ á ¨­â¥à¥áã¥â ⮫쪮 ¬ëèì
  18.   int   0x40
  19.  
  20. still:               ; £« ¢­ë© 横« ®á­®¢­®£® ¯à®æ¥áá 
  21.  
  22.   mov   eax,10       ; ¦¤ñ¬ ᮡëâ¨ï
  23.   int   0x40
  24.  
  25.   mov   eax,37       ; ª ª¨¥ ­ ¦ âë ª¯®¯ª¨?
  26.   mov   ebx,2
  27.   int   0x40
  28.  
  29.   cmp   eax,2        ; ¥á«¨ ­¥ ¯à ¢ ï, ¢®§¢à â
  30.   jne   still
  31.  
  32. ;---¯®¥å «¨!---
  33.  
  34. ;  mov   eax,37       ; íâ® ¤«ï ®â« ¤ª¨ - ¥á«¨ ¬ëèì ¢ â®çª¥ (0;0), § ªà®¥¬áï
  35. ;  xor   ebx,ebx
  36. ;  int   0x40
  37. ;  test  eax,eax      ; ªãàá®à ¢ â®çª¥ (0;0), â.¥. eax = 0
  38. ;  je    exit
  39.  
  40.  
  41.   mov   eax,9        ; ¯®«ã稬 ç¨á«® ¯à®æ¥áᮢ ¢ á¨á⥬¥
  42.   mov   ebx,procinfo
  43.   xor   ecx,ecx
  44.   int   0x40
  45.  
  46.   inc   eax          ; ⥯¥àì ¢ eax ᮤ¥à¦¨âáï ç¨á«® ¯à®æ¥áᮢ + 1
  47.   mov   [processes],eax
  48.   mov   ecx,1
  49.  
  50.  new_process:
  51.   pushad
  52.   mov   eax,9        ; ¯®«ã稬 ¨­ä®à¬ æ¨î ® ¯à®æ¥áá¥; ­®¬¥à - ¢ ecx
  53.   mov   ebx,procinfo
  54.   int   0x40
  55.   mov   eax,37       ; ª®®à¤¨­ âë ªãàá®à 
  56.   xor   ebx,ebx
  57.   int   0x40
  58.   mov   ebx,eax                  ; eax = cursor_x
  59.   shr   eax,16                   ; ebx = cursor_y
  60.   and   ebx,0xffff
  61.   mov   [curx1],eax              ; curx1 = cursor_x
  62.   mov   [cury1],ebx              ; cury1 = cursor_y
  63. ; \begin{diamond}[18.09.2006]
  64. ; ignore minimized windows
  65.         test    [procinfo.wnd_state], 2
  66.         jnz     ne_goden
  67. ; \end{diamond}[18.09.2006]
  68.   mov   eax,[procinfo.x_start]   ; eax = wnd_x_start
  69.   mov   ebx,[procinfo.y_start]   ; ebx = wnd_y_start
  70.  
  71.   mov   ecx,[procinfo.x_size]
  72.   add   ecx,eax                  ; ecx = wnd_x_end
  73.   mov   edx,[procinfo.y_size]
  74.   add   edx,ebx                  ; ecx = wnd_y_end
  75.  
  76.   cmp   eax,[curx1]  ; wnd_x_start > cursor_x => ªãàá®à «¥¢¥¥ ®ª­ 
  77.   jg    ne_goden
  78.   cmp   ecx,[curx1]  ; wnd_x_end   < cursor_x => ªãàá®à ¯à ¢¥¥ ®ª­ 
  79.   jl    ne_goden
  80.   cmp   ebx,[cury1]  ; wnd_y_start > cursor_y => ªãàá®à ¢ëè¥ ®ª­ 
  81.   jg    ne_goden
  82.   cmp   edx,[cury1]  ; wnd_y_end   < cursor_y => ªãàá®à ­¨¦¥ ®ª­ 
  83.   jl    ne_goden
  84.  
  85. goden:               ; ª«¨ª ¡ë« ¢­ãâਠª ª®£®-â® ®ª­ , ¯®í⮬㠭¨ç¥£® ­¥ ¤¥« ¥¬
  86.   popad
  87.   jmp   still
  88.  
  89. ne_goden:            ; ª«¨ª ¡ë« á­ à㦨 à áᬠâਢ ¥¬®£® ®ª­ , ¯®í⮬ã
  90.   popad
  91.   inc   ecx
  92.   cmp   ecx,[processes]
  93.   jl    new_process  ; «¨¡® ᬮਬ á«¥¤ãî饥 ®ª­®, «¨¡® § ¯ã᪠¥¬ ¬¥­î
  94.  
  95.  
  96. @@:             ; ¯®¤®¦¤ñ¬, ¯®ª  ¯®«ì§®¢ â¥«ì ­¥ ®â¯ãá⨫ ¯à ¢ãî ª­®¯ªã ¬ëè¨
  97.   mov   eax,37
  98.   mov   ebx,2   ; äã­ªæ¨ï 37-2:
  99.   int   0x40    ;   ­ ¦ âë «¨ ª­®¯ª¨ ¬ëè¨?
  100.   cmp   eax,ebx ; ¥á«¨ ®â¯ãá⨫, (eax != 2)
  101.   jnz   @f      ;   ¨¤ñ¬ ¢ ­ ç «® £« ¢­®£® 横« 
  102.  
  103.   mov   eax,5   ; ¨­ ç¥
  104.   mov   ebx,2   ;   ¯®¤®¦¤ñ¬ 2 ¬á
  105.   int   0x40
  106.  
  107.   jmp   @b      ;   ¨ ¯à®¢¥à¨¬ ¬ëèì ®¯ïâì
  108. @@:
  109.  
  110. ; ¥á«¨ 㦥 ¡ë«® ®âªàëâ® ¬¥­î, ­ã¦­® ¯®¤®¦¤ âì, ¯®ª  ®­® § ªà®¥âáï:
  111. @@:
  112.   cmp   [menu_opened],0
  113.   je    @f
  114.   mov   eax,5
  115.   mov   ebx,3  ; ¦¤ñ¬ 3 ¬á
  116.   int   0x40
  117.   jmp   @b
  118. @@:
  119.  
  120.   mov   eax,51           ;   ⥯¥àì ¬®¦­® ᬥ«® § ¯ã᪠âì ¯à®æ¥áá (¯®â®ª) ¬¥­î
  121.   mov   ebx,1            ; ᮧ¤ ñ¬ ¯®â®ª (thread)
  122.   mov   ecx,start_wnd    ; â®çª  ¢å®¤  ¯®â®ª 
  123.   mov   edx,stack_wnd    ; ¢¥à設  áâíª  ¤«ï ¯®â®ª 
  124.   int   0x40
  125.  
  126.   jmp   still
  127.  
  128.  
  129.  
  130. exit_menu:            ; ¥á«¨ ¢ë室¨¬ ¨§ ¬¥­î, ­ ¤® § ¯¨á âì ¢ [menu_opened] 0
  131.   mov   [menu_opened],0
  132. exit:                 ; á ¬ë ¨¤ñ¬, ª®£¤  ¢ë室¨¬ ¨§ ®á­®¢­®£® ¯à®æ¥áá 
  133.   or    eax,-1        ; eax = -1
  134.   int   0x40
  135.  
  136.  
  137.  
  138.  
  139. ; §¤¥áì áâ àâã¥â ¯à®æ¥áá ¬¥­î
  140. start_wnd:
  141.   mov   [menu_opened],1
  142.   mov   eax,40      ; ãáâ ­®¢¨¬ ¬ áªã ¦¥« ¥¬ëå ᮡë⨩ ¤«ï í⮣® ¯à®æ¥áá 
  143.   mov   ebx,100101b ; ¬¥­î + ª­®¯ª¨ + ¯¥à¥à¨á®¢ª 
  144.   int   0x40
  145.  
  146. red:
  147.   call  draw_window
  148.  
  149. still2:             ; £« ¢­ë© 横« ¯à®æ¥áá  ¬¥­î
  150.  
  151.   mov   eax,10      ; ¦¤ñ¬ ᮡëâ¨ï
  152.   int   0x40
  153.  
  154.   cmp   eax,1       ; ¯¥à¥à¨á®¢ª ?
  155.   je    red
  156.   cmp   eax,3       ; ª­®¯ª ?
  157.   je    button
  158.   cmp   eax,6       ; ¬ëèì?
  159.   je    mouse
  160.  
  161.   jmp   still2      ; ¢¥à­ñ¬áï ¢ ­ ç «® £« ¢­®£® 横« 
  162.  
  163.  
  164. ; Ž€Ž’—ˆŠ Œ›˜ˆ
  165. mouse:            ; ª®£¤  ¯®«ì§®¢ â¥«ì ­ ¦¬ñâ ª­®¯ªã ¬ëè¨, § ªà®¥¬áï
  166.   mov   eax,37
  167.   mov   ebx,2     ; ª ª¨¥ ª­®¯ª¨ ­ ¦ âë?
  168.   int   0x40
  169.   test  eax,eax   ; ­¨ª ª¨¥? - ⮣¤  ¯à¥ªà á­®! ¢¥à­ñ¬áï ¢ £« ­ë© 横«
  170.   jz    still2
  171.   jmp   exit_menu ;   ¥á«¨ ¢áñ-â ª¨ ­ ¦ âë - § ªà®¥¬ ®ª­®
  172.  
  173.  
  174. ; €†€’€ ŠŽŠ€
  175. button:
  176.   mov   eax,17        ; ¯®«ãç¨âì ¨¤¥­â¨ä¨ª â®à ­ ¦ â®© ª­®¯ª¨
  177.   int   0x40
  178.  
  179.   sub   ah,10         ; áà ¢­¨¢ ¥¬ á 10
  180.   jl    nofuncbtns    ; ¥á«¨ ¬¥­ìè¥ - § ªà뢠¥¬ ¬¥­î
  181.  
  182.   movzx ebx,ah        ; ¯®«ã稫¨ ­®¬¥à ¯à®£à ¬¬ë ¢ ᯨ᪥ ¢ ebx
  183.   mov   esi, [startapps + ebx*4]
  184.   mov   edi, start_info.path
  185.   cld
  186.  @@:
  187.   lodsb
  188.   stosb
  189.   test  al, al
  190.   jnz   @b
  191.   mcall 70, start_info
  192.  
  193. ;  mov   eax,5         ; ¯®¤®¦¤ñ¬, ¯®ª  ¯à®£à ¬¬  § ¯ãáâ¨âìáï
  194. ;  mov   ebx,1         ;   â® ¥ñ ®ª­® ­¥ ¡ã¤¥â ®âà¨á®¢ ­® (¡ £ ¢ ï¤à¥???)
  195. ;  int   0x40          ; à áª®¬¬¥­â¨àã©â¥ í⨠áâப¨, ¥á«¨ ã ¢ á ¯à®¡«¥¬ë
  196.                        ; á ®âà¨á®¢ª®©
  197.  
  198. nofuncbtns:           ; § ªà뢠¥¬ ¬¥­î
  199.   jmp   exit_menu
  200.  
  201.  
  202.  
  203. _BTNS_            = 8     ; ª®«¨ç¥á⢮ ª­®¯®ª ("¯ã­ªâ®¢ ¬¥­î")
  204.  
  205. if lang eq ru
  206.   font            = 0x00000000
  207.   string_length   = 20          ; ¤«¨­  áâப¨
  208.   wnd_x_size      = 133         ; è¨à¨­  ®ª­ 
  209.   header_pos      = 36 shl 16 + 7
  210. else
  211.   font            = 0x10000000
  212.   string_length   = 12          ; ¤«¨­  áâப¨
  213.   wnd_x_size      = 105         ; è¨à¨­  ®ª­ 
  214.   header_pos      = 23 shl 16 + 7
  215. end if
  216.  
  217. ;*******************************
  218. ;********  ˆ‘“…Œ ŽŠŽ  ********
  219. ;*******************************
  220.  
  221. draw_window:
  222.  
  223.   mov   eax,12           ; ­ ç¨­ ¥¬ "à¨á®¢ âì"
  224.   mov   ebx,1
  225.   int   0x40
  226.  
  227.   mov   eax,[curx1]      ; ⥪ã騥 ª®®à¤¨­ âë ªãàá®à 
  228.   mov   [curx],eax       ; § ¯¨è¥¬ ¢ ª®®à¤¨­ âë ®ª­ 
  229.   mov   eax,[cury1]
  230.   mov   [cury],eax
  231.  
  232. ; ⥯¥àì ¡ã¤¥¬ áç¨â âì ª®®à¤¨­ âë ®ª­ , çâ®¡ë ®­® §  ªà © íªà ­  ­¥ ¢ë«¥§«®
  233.   mov   eax,14                ; ¯®«ã稬 à §¬¥à íªà ­ 
  234.   int   0x40
  235.   mov   ebx,eax
  236.   shr   eax,16                ; ¢ eax - x_screen
  237.   and   ebx,0xffff            ; ¢ ebx - y_screen
  238.   add   eax,-wnd_x_size       ; eax = [x_screen - è¨à¨­  ®ª­ ]
  239.   add   ebx,-_BTNS_*15-21     ; ebx = [y_screen - ¢ëá®â  ®ª­ ]
  240.  
  241.   cmp   eax,[curx]
  242.   jg    .okx                  ; ¥á«¨ ®ª­® ᫨誮¬ ¡«¨§ª® ª ¯à ¢®¬ã ªà î,
  243.   add   [curx],-wnd_x_size    ; ᤢ¨­¥¬ ¥£® ¢«¥¢® ­  100
  244.  .okx:
  245.  
  246.   cmp   ebx, [cury]
  247.   jg    .oky                  ; ¯® ¢¥à⨪ «¨ â®ç­® â ª¦¥
  248.   add   [cury], -_BTNS_*15-21
  249.  .oky:
  250.  
  251.   mov   eax, 48                   ; ¯®«ãç¨âì á¨á⥬­ë¥ 梥â 
  252.   mov   ebx, 3
  253.   mov   ecx, sc                   ;   ¤à¥á áâàãªâãàë
  254.   mov   edx, sizeof.system_colors ;  ¨ ¥¥ à §¬¥à
  255.   int   0x40
  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.   int   0x40
  269.  
  270.   mov   eax, 4             ; § £®«®¢®ª
  271.   mov   ebx, header_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, header        ;   ¤à¥á § £®«®¢ª 
  287.   mov   esi, header.size   ;  ¤«¨­  § £®«®¢ª  ("M E N U")
  288.   int   0x40
  289.   pop   ecx
  290.   add   ebx, 1 shl 16      ;  á¤¢¨­¥¬ ¢¯à ¢® ­  1
  291.   int   0x40
  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.   int   0x40
  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.   int   0x40
  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.   int   0x40
  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/MV",0>       ,\
  350.     <"/RD/1/JPEGVIEW",0> ,\
  351.     <"/RD/1/CPU",0>      ,\
  352.     <"/RD/1/SPANEL",0>   ,\
  353.     <"/RD/1/ICON",0> ,\
  354.     <"/RD/1/VRR",0>
  355.  
  356. ;  header:            ; § £®«®¢®ª
  357. ;    db 'M E N U'
  358. ;  header_len = $ - header
  359.  
  360. ;  text:              ; ⥪áâ ­  ª­®¯ª å
  361. ;    db 'Background  '; 12
  362. ;    db 'Colors      '
  363. ;    db 'MeView      '
  364. ;    db 'Processes   '
  365. ;    db 'Panel setup '
  366. ;    db 'Icon manager'
  367.  
  368.   sz header, "KolibriOS"
  369.  
  370.   lsz text,\
  371.     en, 'Background  ',\
  372.     en, 'Colors      ',\
  373.     en, 'MeView      ',\
  374.     en, 'JpegView    ',\
  375.     en, 'Processes   ',\
  376.     en, 'Panel setup ',\
  377.     en, 'Icon manager',\
  378.     en, 'VRR         ',\
  379.     \
  380.     ru, 'ƒ¥­¥à â®à ®¡®¥¢     ',\
  381.     ru, '‘¨á⥬­ë¥ æ¢¥â      ',\
  382.     ru, 'à®á¬®âà BMP        ',\
  383.     ru, 'à®á¬®âà JPEG       ',\
  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.  
  414.   rb 1024                       ; áâíª ¤«ï ®ª­  ¬¥­î - 墠â¨â ¨ 1 Š¡
  415.   align 32
  416.   stack_wnd:
  417.  
  418.  
  419. MEOS_APP_END
  420. ; ŠŽ…– Žƒ€ŒŒ›