Subversion Repositories Kolibri OS

Rev

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