Subversion Repositories Kolibri OS

Rev

Rev 3853 | Rev 3921 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. if lang eq ru
  2. MinRMenuW equ 18*6+10
  3. else
  4. MinRMenuW equ 15*6+10
  5. end if
  6.  
  7. idbRRedrawFon equ 100
  8. idbRAlign    equ 101
  9. idbRFixIcons equ 102
  10. idbRAdd      equ 103
  11. idbRDel      equ 104
  12. idbRProp     equ 105
  13.  
  14. ;---- thread for rbutton -----------------------------------------------------------------------
  15. RButtonWin:
  16.         mcall   40,100101b      ;SetMaskMessage 100101b
  17.  
  18.         stdcall GetNumIcon,[MouseX],[MouseY],-1
  19.         mov     [SelIcon],eax
  20.  
  21.         cmp     eax,-1
  22.         jne     @f
  23.         mov     [RMenuH],16*4+3+3
  24.         mov     [RMenuHsb],16*4+3+3
  25.         jmp     .rbw1
  26.       @@:
  27.         mov     [RMenuH],16*5+3+3
  28.         mov     [RMenuHsb],16*5+3+3
  29.     .rbw1:
  30.  
  31.         mov     [NumUserButt],0
  32.         mov     [RMenuW],0
  33.         mcall   70,fiIni
  34.         mcall   68,12,dword[bufIni+32]
  35.         mov     [RBUser],eax
  36.         stdcall [ini_enum_keys],IconIni,secRButt,GetUserBut
  37.  
  38.  
  39. RBWRedraw:
  40.         mcall   12,1    ;RedrawWinBeg
  41.         mov     ebx,[MouseX]
  42.         shl     ebx,16
  43.         mov     bx,[RMenuW]
  44.         mov     ecx,[MouseY]
  45.         shl     ecx,16
  46.         mov     cx,[RMenuH]
  47.         mov     edx,0177CCFFh
  48.         mov     esi,01000000h
  49.         xor     eax,eax
  50.         int     40h
  51.  
  52.        ;-----------
  53.         mov     ecx,[NumUserButt]
  54.   .DrawUB:
  55.         push    ecx
  56.  
  57.         mov     eax,[NumUserButt]
  58.         sub     eax,ecx
  59.         mov     edx,eax      ;button ID
  60.         shl     eax,4+16          ;*16*10000h
  61.         mov     ecx,eax
  62.         mov     cx,16
  63.  
  64.         xor     ebx,ebx
  65.         mov     bx,[RMenuW]
  66.         mov     esi,0888888h
  67.         mcall   8
  68.  
  69.         mov     ebx,50000h
  70.         shr     ecx,16
  71.         mov     bx,cx
  72.         add     bx,5
  73.  
  74.         mov     ecx,80000000h
  75.  
  76.         mov     eax,[NumUserButt]
  77.         sub     eax,[esp]
  78.         mov     edx,[RBUser+eax*8]
  79.  
  80.         mcall   4
  81.  
  82.         pop     ecx
  83.         loop    .DrawUB
  84.  
  85.        ;-----------
  86.         xor     ebx,ebx
  87.         mov     bx,[RMenuW]
  88.         mov     cx,[RMenuH]
  89.         sub     cx,[RMenuHsb]
  90.         push    ecx
  91.         mov     dx,cx
  92.         shl     ecx,16
  93.         mov     cx,dx
  94.  
  95.                                    ;¯¥à¢ ï à §¤¥«¨â¥«ì­ ï «¨­¨ï
  96.         mcall   38,,,0888888h
  97.         add     ecx,00010001h
  98.         mcall     ,,,
  99.  
  100.        ;------------
  101.         mov     ecx,[esp]
  102.         add     ecx,2
  103.         shl     ecx,16
  104.         mov     cx,16
  105.  
  106.         mcall   8,,,idbRRedrawFon,0888888h  ;3 ª­®¯ª¨ ¢â®à®£® ¡«®ª 
  107.         add     ecx,00100000h
  108.         mcall    ,,,idbRAlign
  109.         add     ecx,00100000h
  110.         mcall    ,,,idbRFixIcons
  111.  
  112.         mov     ebx,50000h
  113.         mov     bx,word[esp]
  114.         add     bx,2+5
  115.         mcall   4,,80000000h,RMenuRedrawFon
  116.         add     ebx,16
  117.         mcall    ,,,RMenuAlign
  118.  
  119.         add     ebx,16
  120.         cmp     [bFixIcons],0
  121.         jne     @f
  122.         mov     edx,RMenuOffMoving
  123.         jmp     .RBWR1
  124.      @@:
  125.         mov     edx,RMenuOnMoving
  126.      .RBWR1:
  127.         mcall
  128.  
  129.        ;------------
  130.         xor     ebx,ebx               ;¢â®à ï à §¤¥«¨â¥«ì­ ï «¨­¨ï
  131.         mov     bx,[RMenuW]
  132.         mov     ecx,[esp]
  133.         add     ecx,16*3+2
  134.         mov     dx,cx
  135.         shl     ecx,16
  136.         mov     cx,dx
  137.         mcall   38,,,0888888h
  138.         add     ecx,00010001h
  139.         mcall     ,,,
  140.        ;------------
  141.                                      ;1 ¨«¨ 2 ª­®¯ª¨ âà¥â쥣® ¡«®ª 
  142.         mov     ecx,[esp]
  143.         add     ecx,16*3+4
  144.         shl     ecx,16
  145.         mov     cx,16
  146.         cmp     dword[SelIcon],-1
  147.         je      @f
  148.  
  149.         mcall   8,,,idbRDel,0888888h
  150.         add     ecx,00100000h
  151.         mcall    ,,,idbRProp,0888888h
  152.  
  153.         mov     ebx,50000h
  154.         mov     bx,word[esp]
  155.         add     bx,16*3+4+5
  156.         mcall   4,,80000000h,RMenuDel
  157.         add     bx,16
  158.         mcall    ,,         ,RMenuProp
  159.  
  160.         jmp     .endRM
  161.       @@:
  162.  
  163.         mcall   8,,,idbRAdd,0888888h
  164.         mov     ebx,50000h
  165.         mov     bx,word[esp]
  166.         add     bx,16*3+4+5
  167.         mcall   4,,80000000h,RMenuAdd
  168.  
  169.       .endRM:
  170.  
  171.         pop     ecx
  172.         mcall   12,2    ;RedrawWinEnd
  173.  
  174.         mcall   9,RBProcInfo,-1         ;GetThreadInfo RBProcInfo,-1
  175.         mcall   18,21,dword[RBProcInfo+30]
  176.         m2m     dword[RBSlot],eax
  177.  
  178. RBWMessages:
  179.         mcall   10              ;WaitMessage
  180.         dec     eax
  181.         jz      RBWRedraw
  182.         sub     eax,2
  183.         jz      RBWButton
  184.         sub     eax,3
  185.         jz      RBWMouse
  186.         jmp     RBWMessages
  187.  
  188. RBWButton:
  189.         mcall   17              ;GetButtonPressed
  190.         shr     eax,8
  191.         cmp     eax,idbRRedrawFon
  192.         jz      RBRedrawFon
  193.         cmp     eax,idbRAlign
  194.         jz      RBAlign
  195.         cmp     eax,idbRFixIcons
  196.         jz      RBFixIcons
  197.         cmp     eax,idbRAdd
  198.         jz      RBAdd
  199.         cmp     eax,idbRDel
  200.         jz      RBDelete
  201.         cmp     eax,idbRProp
  202.         jz      RBPropeties
  203.  
  204.         cmp     eax,[NumUserButt]
  205.         ja      @f
  206.  
  207.         mov     eax,[RBUser+eax*8+4]
  208.         mov     dword[fiRunProg+8],0
  209.         mov     dword[fiRunProg+21],eax
  210.         mcall   70,fiRunProg
  211.     @@:
  212.         jmp     RBWExit
  213.  
  214. RBWMouse:
  215.         mcall   37,2            ;GetMouseKey
  216.         test    eax,111b
  217.         jz      RBWMessages
  218.         mcall   37,0            ;GetMousePos
  219.         xor     ebx,ebx
  220.         mov     bx,ax           ;y
  221.         shr     eax,16          ;x
  222.  
  223.         xor     ecx,ecx
  224.         mov     cx,bx
  225.         mov     bx,ax
  226.  
  227.         mcall   34
  228.         cmp     eax,[RBSlot]
  229.         je      RBWMessages
  230.  
  231. RBWExit:
  232.         mcall   68,13,[RBUser]
  233.         mov     [RButtonActiv],0
  234.         mcall   -1      ;ExitProcess
  235.  
  236.  
  237. RBRedrawFon:
  238.         mcall   15,3
  239.         jmp     RBWExit
  240.  
  241. RBAlign:
  242.         call    AlignIcons
  243.  
  244.         m2m     [PIcoDB],[BegData]
  245.         stdcall [ini_enum_sections],IconIni,Ini_SavePos
  246.  
  247.         mov     dword[fiRunProg+8],WarningSave
  248.         mov     dword[fiRunProg+21],pthNotify
  249.         mcall   70,fiRunProg
  250.         mov     [bNotSave],0
  251.  
  252.         jmp     RBRedrawFon
  253.  
  254. RBFixIcons:
  255.         xor     dword[bFixIcons],1
  256.  
  257.         cmp     [bNotSave],0
  258.         je      @f
  259.  
  260.         mov     dword[fiRunProg+8],WarningSave
  261.         mov     dword[fiRunProg+21],pthNotify
  262.         mcall   70,fiRunProg
  263.         mov     [bNotSave],0
  264.  
  265.       @@:
  266.         jmp     RBWExit
  267.  
  268. RBAdd:
  269.       ;  mov     [DlgAddActiv],1
  270.         mcall   51,1,DlgAdd,stack_dlg           ;CreateThread DlgAdd,stack_dlg
  271.         jmp     RBWExit
  272.  
  273. RBDelete:
  274.  
  275.         mov     eax,[SelIcon]
  276.         mov     eax,[IconsOffs+eax*4]
  277.         stdcall [ini_del_section],IconIni,eax
  278.  
  279.         stdcall DelIcon,[SelIcon]
  280.     ;    mov     dword[fiStdIco],2
  281.     ;    m2m     dword[fInfo+12],dword[SizeData]
  282.     ;    mcall   70,fInfo
  283.  
  284.         mov     dword[fiRunProg+8],WarningSave
  285.         mov     dword[fiRunProg+21],pthNotify
  286.         mcall   70,fiRunProg
  287.         mov     [bNotSave],0
  288.  
  289.         jmp     RBRedrawFon
  290.  
  291. RBPropeties:
  292.     ;    mov     [DlgAddActiv],1
  293.         mcall   51,1,DlgProp,stack_dlg          ;CreateThread DlgProp,stack_dlg
  294.         jmp     RBWExit
  295.  
  296.  
  297.  
  298. proc AlignIcons
  299. local posX:WORD,\
  300.       posY:WORD,\
  301.       negatX:WORD,\
  302.       negatY:WORD
  303.  
  304.         xor     ebx,ebx
  305.  
  306.         mov     ecx,[MaxNumIcon]
  307.         test    ecx,ecx
  308.         jnz     .AlignIco
  309.         ret
  310.  .AlignIco:
  311.         push    ecx
  312.         or      ecx,-1
  313.         mov     edi,dword[IconsOffs+ebx]
  314.         xor     eax,eax
  315.         repne   scasb
  316.         repne   scasb
  317.         repne   scasb
  318.         repne   scasb
  319.  
  320.         mov     dword[negatX],0
  321.  
  322.      ;-------- ¯à¥®¡à §ã¥¬ ª®®à¤¨­ âë ¢ ¯®«®¦¨â¥«ì­ë¥
  323.         mov     ax,[edi+2]
  324.         test    ax,8000h
  325.         jz      @f
  326.         neg     ax
  327.         mov     word[negatX],1
  328.       @@:
  329.         mov     [posX],ax
  330.  
  331.         mov     ax,[edi]
  332.         test    ax,8000h
  333.         jz      @f
  334.         neg     ax
  335.         mov     word[negatY],1
  336.       @@:
  337.         mov     [posY],ax
  338.  
  339.       ;-----
  340.         mov     ax,[posY]
  341.         mov     dx,ALIGN_SIZE
  342.  
  343.         cmp     ax,dx
  344.         jb      .AI0
  345.     @@: sub     ax,dx
  346.         cmp     ax,dx
  347.         jae     @b
  348.     .AI0:
  349.  
  350.         mov     dx,ax
  351.         cmp     dx,ALIGN_SIZE/2
  352.         jb      .AI1
  353.  
  354.         mov     ax,ALIGN_SIZE
  355.         sub     ax,dx
  356.         add     [posY],ax
  357.  
  358.         jmp     .AI2
  359.      .AI1:
  360.         sub     [posY],dx
  361.      .AI2:
  362.      ;-----
  363.         mov     ax,[posX]
  364.         mov     dx,ALIGN_SIZE
  365.  
  366.         cmp     ax,dx
  367.         jb      .AI3
  368.     @@: sub     ax,dx
  369.         cmp     ax,dx
  370.         jae     @b
  371.     .AI3:
  372.  
  373.         mov     dx,ax
  374.         cmp     dx,ALIGN_SIZE/2
  375.         jb      .AI4
  376.  
  377.         mov     ax,ALIGN_SIZE
  378.         sub     ax,dx
  379.         add     [posX],ax
  380.  
  381.         jmp     .AI5
  382.      .AI4:
  383.         sub     [posX],dx
  384.      .AI5:
  385.  
  386.       ;----- ¯à¥®¡à §®¢ ­¨¥ ­ § ¤ ¨ ¯®¯à ¢ª  ¢ ®âà¨æ â¥«ì­ëå ª®®à¤¨­ â
  387.         mov     ax,[posX]
  388.  
  389.         cmp     [negatX],1
  390.         jne     @f
  391.         neg     ax
  392.         inc     ax
  393.         jmp     .AI6
  394.       @@:
  395.  
  396.         mov     dx,[ScreenX]
  397.         shr     dx,1
  398.         cmp     ax,dx
  399.         jbe     .AI6
  400.         sub     ax,[ScreenX]
  401.       .AI6:
  402.         mov     word[edi+2],ax
  403.  
  404.  
  405.         mov     ax,[posY]
  406.         cmp     [negatY],1
  407.         jne     @f
  408.         neg     ax
  409.         inc     ax
  410.         jmp     .AI7
  411.       @@:
  412.  
  413.         mov     dx,[ScreenY]
  414.         shr     dx,1
  415.         cmp     ax,dx
  416.         jbe     .AI7
  417.         sub     ax,[ScreenY]
  418.       .AI7:
  419.          mov     word[edi],ax
  420.  
  421.        ;--------
  422.  
  423.  
  424.  
  425.         pop     ecx
  426.         add     ebx,4
  427.         dec     ecx
  428.         jnz     .AlignIco
  429. ;        loop    .AlignIco
  430.  
  431.  
  432. ;        mov     dword[fInfo],2
  433. ;        mcall   70,fInfo
  434.         ret
  435. endp
  436.  
  437. ;-------------------------------------------------------------------------------
  438. proc GetUserBut stdcall,f_name,sec_name,key_name,key_value
  439.         cmp     [NumUserButt],16
  440.         jne     @f
  441.         ret
  442.      @@:
  443.  
  444.         push    ebx esi edi
  445.  
  446.         mov     edi,[key_name]           ;®¯à¥¤¥«ï¥¬ è¨à¨­ã ¬¥­î
  447.         xor     eax,eax
  448.         or      ecx,-1
  449.         repne   scasb
  450.         sub     edi,[key_name]
  451.         mov     eax,edi
  452.         shl     eax,1
  453.         lea     eax,[eax*2+eax+5*2]
  454.         cmp     ax,[RMenuW]
  455.         jbe     @f
  456.         mov     [RMenuW],ax
  457.      @@:
  458.         cmp     [RMenuW],MinRMenuW
  459.         jae     @f
  460.         mov     [RMenuW],MinRMenuW
  461.      @@:
  462.  
  463.         mov     ebx,[NumUserButt]
  464.  
  465.         mov     esi,[key_name]
  466.         mov     edi,[RBUser+ebx*8]
  467.     @@: lodsb
  468.         stosb
  469.         test    al,al
  470.         jnz     @b
  471.  
  472. ;debug_newline
  473.  
  474.  
  475.         mov     [RBUser+ebx*8+4],edi
  476.         mov     esi,[key_value]
  477.     @@: lodsb
  478.         stosb
  479.         test    al,al
  480.         jnz     @b
  481.  
  482.         mov     [RBUser+ebx*8+8],edi
  483.  
  484.         inc     [NumUserButt]
  485.         add     [RMenuH],16
  486.  
  487.         pop     edi esi ebx
  488.         mov     eax,1
  489.         ret
  490. endp
  491.  
  492. proc Ini_SavePos stdcall,f_name,sec_name
  493.         push    ebx edi esi
  494. ;int3
  495.         xor     ebx,ebx
  496.   .SearchSect:
  497.         mov     edi,[IconsOffs+ebx*4]
  498.         mov     esi,[sec_name]
  499.       @@:
  500.         lodsb
  501.         scasb
  502.         jne     @f
  503.         test    al,al
  504.         jnz     @b
  505.  
  506.         jmp     .IcoDataFound
  507.       @@:
  508.  
  509.         inc     ebx
  510.         cmp     ebx,[MaxNumIcon]
  511.         jb      .SearchSect
  512.  
  513.         mov     eax,1
  514.         pop     esi edi ebx
  515.         ret
  516.  
  517. .IcoDataFound:
  518.         or      ecx,-1
  519.         repne   scasb
  520.         repne   scasb
  521.         repne   scasb
  522.  
  523.         movzx   eax,word[edi+2]
  524.         test    eax,8000h
  525.         jz      @f
  526.         or      eax,0FFFF0000h
  527.      @@:
  528.  
  529.         stdcall [ini_set_int],[f_name],[sec_name],keyX,eax
  530.  
  531.         movzx   eax,word[edi]
  532.         test    eax,8000h
  533.         jz      @f
  534.         or      eax,0FFFF0000h
  535.      @@:
  536.  
  537.         stdcall [ini_set_int],[f_name],[sec_name],keyY,eax
  538.  
  539.         mov     eax,1
  540.         pop     esi edi ebx
  541.         ret
  542. endp
  543.  
  544.  
  545.  
  546.