Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. ;ret eax=numIcon
  2. proc AddIcon stdcall,x,y,lpIcon,lpName,lpExeFile,lpParams
  3.         push    ebx edi esi
  4.  
  5.         mov     eax,[x]
  6.         mov     ebx,[y]
  7.  
  8.         xor     edx,edx
  9.         test    eax,8000h
  10.         jnz     @f
  11.         mov     dx,[wsW]    ;¥á«¨ ­ ¤®, â® ¯à¥®¡à §®¢ë¢ ¥¬ ¢
  12.         shr     edx,1           ;®âà¨æ â¥«ì­ë¥ ª®®à¤¨­ âë
  13.         add     dx,[wsX]
  14.         cmp     eax,edx
  15.         jbe     @f
  16.         sub     ax,[wsW]
  17.         inc     eax
  18.       @@:
  19.  
  20.         test    ebx,8000h
  21.         jnz     @f
  22.         mov     dx,[wsY]
  23.         shr     edx,1
  24.         add     dx,[wsH]
  25.         cmp     ebx,edx
  26.         jbe     @f
  27.         sub     bx,[wsH]
  28.         inc     ebx
  29.       @@:
  30.                                 ;¯®¯à ¢ª  ­  á«ãç © ¢ë室  §  ªà © íªà ­ 
  31.  
  32.         test    eax,8000h
  33.         jnz     @f
  34.         mov     dx,[wsXe]
  35.         sub     edx,ICON_SIZE
  36.         cmp     eax,edx
  37.         jbe     @f
  38.         mov     eax,edx
  39.      @@:
  40.  
  41.         test    ebx,8000h
  42.         jnz     @f
  43.         mov     dx,[wsYe]
  44.         sub     edx,ICON_SIZE
  45.         cmp     ebx,edx
  46.         jbe     @f
  47.         mov     ebx,edx
  48.      @@:
  49.  
  50.         mov     [x],eax
  51.         mov     [y],ebx
  52.  
  53.         xor     al,al
  54.         or      ecx,-1
  55.         mov     edi,[lpName]
  56.         repne   scasb
  57.         sub     edi,[lpName]
  58.         mov     ebx,edi
  59.         mov     edi,[lpExeFile]
  60.         repne   scasb
  61.         sub     edi,[lpExeFile]
  62.         add     ebx,edi
  63.         mov     edi,[lpParams]
  64.         repne   scasb
  65.         sub     edi,[lpParams]
  66.         add     ebx,edi
  67.         mov     edi,[lpIcon]
  68.         repne   scasb
  69.         sub     edi,[lpIcon]
  70.         add     ebx,edi
  71.         add     ebx,4
  72.         mov     ecx,dword[SizeData]
  73.         add     ecx,ebx
  74.         mov     edx,[IconsOffs]
  75.         mcall   68,20
  76.  
  77.         mov     edx,dword[SizeData]
  78.         mov     dword[SizeData],ecx
  79.         mov     dword[BegData],eax
  80.         mov     edi,eax
  81.         add     edi,edx
  82.         mov     esi,[lpName]
  83.     @@: lodsb
  84.         stosb
  85.         test    al,al
  86.         jnz     @b
  87.  
  88.         mov     esi,[lpExeFile]
  89.     @@: lodsb
  90.         stosb
  91.         test    al,al
  92.         jnz     @b
  93.  
  94.         mov     esi,[lpParams]
  95.     @@: lodsb
  96.         stosb
  97.         test    al,al
  98.         jnz     @b
  99.  
  100.         mov     esi,[lpIcon]
  101.     @@: lodsb
  102.         stosb
  103.         test    al,al
  104.         jnz     @b
  105.  
  106.         mov     eax,[x]
  107.         mov     ebx,[y]
  108.         shl     eax,16
  109.         mov     ax,bx
  110.         mov     dword[edi],eax
  111.  
  112.         stdcall FillIconsOffs
  113.  
  114.         pop     esi edi ebx
  115.         ret
  116. endp
  117.  
  118. proc EditIcon stdcall,NumIcon,lpIcon,lpName,lpExeFile,lpParams
  119.         push    edi
  120.         mov     eax,[NumIcon]
  121.         mov     edi,[IconsOffs+eax*4]
  122.         xor     al,al
  123.         or      ecx,-1
  124.         repne   scasb
  125.         repne   scasb
  126.         repne   scasb
  127.         repne   scasb
  128.         push    dword[edi]
  129.         stdcall DelIcon,[NumIcon]
  130.         pop     edx
  131.         xor     eax,eax
  132.         mov     ax,dx
  133.         shr     edx,16
  134.         stdcall AddIcon,edx,eax,DAreaIcon,DAreaName,DAreaPath,DAreaParams
  135.         pop     edi
  136.         ret
  137. endp
  138.  
  139. proc SetPosition stdcall,NumIcon,x,y
  140.         push    edi
  141.         mov     eax,[NumIcon]
  142.         mov     edi,[IconsOffs+eax*4]
  143.         xor     al,al
  144.         or      ecx,-1
  145.         repne   scasb
  146.         repne   scasb
  147.         repne   scasb
  148.         repne   scasb
  149.         mov     eax,[x]
  150.         shl     eax,16
  151.         mov     ax,word[y]
  152.         mov     dword[edi],eax
  153.         pop     edi
  154.         ret
  155. endp
  156.  
  157. proc GetNumIcon stdcall,x,y,NumIconI  ;­®¬¥à ¨ª®­ª¨, ª®â®àë© ¯à®¢¥àïâì ­¥ ­ ¤® ¨«¨ -1
  158. local posX:WORD,\
  159.       posY:WORD
  160.         push    ebx edi
  161.         mov     ecx,[MaxNumIcon]
  162.         test    ecx,ecx
  163.         jnz     @f
  164.         or      eax,-1
  165.         pop     edi ebx
  166.         ret
  167.      @@:
  168.  
  169.         mov     ebx,ecx
  170.         dec     ebx
  171.    .TestIcon:
  172.         cmp     dword[NumIconI],-1
  173.         je      @f
  174.  
  175.         cmp     ebx,[NumIconI]
  176.         jne     @f
  177.         dec     ebx
  178.         dec     ecx
  179.         test    ecx,ecx
  180.         jz      .NoIcon
  181.      @@:
  182.  
  183.         push    ecx
  184.  
  185.         or      ecx,-1
  186.         xor     al,al
  187.         mov     edi,[IconsOffs+ebx*4]
  188.         repne   scasb
  189.         repne   scasb
  190.         repne   scasb
  191.         repne   scasb
  192.  
  193.         mov     ax,[edi+2]
  194.         test    ax,8000h
  195.         jz      @f
  196.         add     ax,[wsXe]
  197.         jmp     .gni1
  198.       @@:
  199.         add     ax,[wsX]
  200.      .gni1:
  201.         mov     [posX],ax
  202.  
  203.         mov     ax,[edi]
  204.         test    ax,8000h
  205.         jz      @f
  206.         add     ax,[wsYe]
  207.         jmp     .gni2
  208.       @@:
  209.         add     ax,[wsY]
  210.      .gni2:
  211.  
  212.         mov     [posY],ax
  213.  
  214.         mov     eax,[x]
  215.         mov     edx,[y]
  216.  
  217.         cmp     ax,[posX]
  218.         jb      @f
  219.         add     word[posX],ICON_SIZE
  220.         cmp     ax,[posX]
  221.         ja      @f
  222.  
  223.         cmp     dx,[posY]
  224.         jb      @f
  225.         add     word[posY],ICON_SIZE
  226.         cmp     dx,[posY]
  227.         ja      @f
  228.  
  229.         jmp     .OkIcon
  230.      @@:
  231.  
  232.         dec     ebx
  233.         pop     ecx
  234.  
  235.         ;loop    .TestIcon
  236.         dec     ecx
  237.         jnz     .TestIcon
  238.         jmp     .NoIcon
  239.    .OkIcon:
  240.         mov     eax,ebx
  241.         pop     edi ebx
  242.         ret
  243.    .NoIcon:
  244.         or      eax,-1
  245.         pop     edi ebx
  246.         ret
  247. endp
  248.  
  249. proc DelIcon stdcall,NumIcon
  250.         push    ebx edi esi
  251.  
  252.         cmp     [MaxNumIcon],0
  253.         je      .end
  254.  
  255.         cmp     [MaxNumIcon],1
  256.         je      .OhneIco
  257.  
  258.         mov     ebx,[NumIcon]
  259.  
  260.         mov     eax,[MaxNumIcon]
  261.         dec     eax
  262.         mov     [MaxNumIcon],eax
  263.         cmp     ebx,eax
  264.         je      @f
  265.  
  266.         shl     ebx,2
  267.  
  268.         mov     ecx,dword[BegData]
  269.         add     ecx,dword[SizeData]
  270.         sub     ecx,[IconsOffs+4+ebx]
  271.  
  272.         mov     edx,[IconsOffs+4+ebx]
  273.         sub     edx,[IconsOffs+ebx]
  274.         sub     dword[SizeData],edx
  275.  
  276.         mov     esi,[IconsOffs+4+ebx]
  277.         mov     edi,[IconsOffs+ebx]
  278.         rep     movsb
  279.         jmp     .endDel
  280.  
  281.      @@:
  282.         mov     ecx,dword[BegData]
  283.         add     ecx,dword[SizeData]
  284.         sub     ecx,[IconsOffs+ebx*4]
  285.         sub     dword[SizeData],ecx
  286.  
  287.   .endDel:
  288.         stdcall FillIconsOffs
  289.         jmp     .end
  290.  
  291. .OhneIco:
  292.         mov     edi,[BegData]
  293.         mov     [SizeData],0
  294.         mov     dword[edi],0
  295.         mov     [MaxNumIcon],0
  296.         mov     dword[IconsOffs],0
  297.    .end:
  298.         mcall   15,3
  299.         pop     esi edi ebx
  300.         ret
  301. endp