Subversion Repositories Kolibri OS

Rev

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