Subversion Repositories Kolibri OS

Rev

Rev 3899 | Rev 3953 | 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,[RBMenuColor];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,,,[RBMenuColor];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,[RBMenuColor];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,,,[RBMenuColor];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,[RBMenuColor];0888888h
  150.         add     ecx,00100000h
  151.         mcall    ,,,idbRProp,[RBMenuColor];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,[RBMenuColor];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.         cmp     [DlgAddActiv],1
  270.         je      RBWSetActivWin
  271.         mov     [DlgAddActiv],1
  272.  
  273.         mcall   51,1,DlgAdd,stack_dlg           ;CreateThread DlgAdd,stack_dlg
  274.         jmp     RBWExit
  275.  
  276. RBDelete:
  277.  
  278.         mov     eax,[SelIcon]
  279.         mov     eax,[IconsOffs+eax*4]
  280.         stdcall [ini_del_section],IconIni,eax
  281.  
  282.         stdcall DelIcon,[SelIcon]
  283.     ;    mov     dword[fiStdIco],2
  284.     ;    m2m     dword[fInfo+12],dword[SizeData]
  285.     ;    mcall   70,fInfo
  286.  
  287.         mov     dword[fiRunProg+8],WarningSave
  288.         mov     dword[fiRunProg+21],pthNotify
  289.         mcall   70,fiRunProg
  290.         mov     [bNotSave],0
  291.  
  292.         jmp     RBRedrawFon
  293.  
  294. RBPropeties:
  295.         cmp     [DlgAddActiv],1
  296.         je      RBWSetActivWin
  297.         mov     [DlgAddActiv],1
  298.  
  299.         mcall   51,1,DlgProp,stack_dlg          ;CreateThread DlgProp,stack_dlg
  300.         jmp     RBWExit
  301.  
  302. RBWSetActivWin:
  303.         mcall   18,3,[slotDlgAdd]
  304.         jmp     RBWExit
  305.  
  306.  
  307. proc AlignIcons
  308. local posX:WORD,\
  309.       posY:WORD,\
  310.       negatX:WORD,\
  311.       negatY:WORD
  312.  
  313.         xor     ebx,ebx
  314.  
  315.         mov     ecx,[MaxNumIcon]
  316.         test    ecx,ecx
  317.         jnz     .AlignIco
  318.         ret
  319.  .AlignIco:
  320.         push    ecx
  321.         or      ecx,-1
  322.         mov     edi,dword[IconsOffs+ebx]
  323.         xor     eax,eax
  324.         repne   scasb
  325.         repne   scasb
  326.         repne   scasb
  327.         repne   scasb
  328.  
  329.         mov     dword[negatX],0
  330.  
  331.      ;-------- ¯à¥®¡à §ã¥¬ ª®®à¤¨­ âë ¢ ¯®«®¦¨â¥«ì­ë¥
  332.         mov     ax,[edi+2]
  333.         test    ax,8000h
  334.         jz      @f
  335.         neg     ax
  336.         mov     word[negatX],1
  337.       @@:
  338.         mov     [posX],ax
  339.  
  340.         mov     ax,[edi]
  341.         test    ax,8000h
  342.         jz      @f
  343.         neg     ax
  344.         mov     word[negatY],1
  345.       @@:
  346.         mov     [posY],ax
  347.  
  348.       ;-----
  349.         mov     ax,[posY]
  350.         mov     dx,ALIGN_SIZE
  351.  
  352.         cmp     ax,dx
  353.         jb      .AI0
  354.     @@: sub     ax,dx
  355.         cmp     ax,dx
  356.         jae     @b
  357.     .AI0:
  358.  
  359.         mov     dx,ax
  360.         cmp     dx,ALIGN_SIZE/2
  361.         jb      .AI1
  362.  
  363.         mov     ax,ALIGN_SIZE
  364.         sub     ax,dx
  365.         add     [posY],ax
  366.  
  367.         jmp     .AI2
  368.      .AI1:
  369.         sub     [posY],dx
  370.      .AI2:
  371.      ;-----
  372.         mov     ax,[posX]
  373.         mov     dx,ALIGN_SIZE
  374.  
  375.         cmp     ax,dx
  376.         jb      .AI3
  377.     @@: sub     ax,dx
  378.         cmp     ax,dx
  379.         jae     @b
  380.     .AI3:
  381.  
  382.         mov     dx,ax
  383.         cmp     dx,ALIGN_SIZE/2
  384.         jb      .AI4
  385.  
  386.         mov     ax,ALIGN_SIZE
  387.         sub     ax,dx
  388.         add     [posX],ax
  389.  
  390.         jmp     .AI5
  391.      .AI4:
  392.         sub     [posX],dx
  393.      .AI5:
  394.  
  395.       ;----- ¯à¥®¡à §®¢ ­¨¥ ­ § ¤ ¨ ¯®¯à ¢ª  ¢ ®âà¨æ â¥«ì­ëå ª®®à¤¨­ â
  396.         mov     ax,[posX]
  397.  
  398.         cmp     [negatX],1
  399.         jne     @f
  400.         neg     ax
  401.         inc     ax
  402.         jmp     .AI6
  403.       @@:
  404.  
  405.         mov     dx,[ScreenX]
  406.         shr     dx,1
  407.         cmp     ax,dx
  408.         jbe     .AI6
  409.         sub     ax,[ScreenX]
  410.       .AI6:
  411.         mov     word[edi+2],ax
  412.  
  413.  
  414.         mov     ax,[posY]
  415.         cmp     [negatY],1
  416.         jne     @f
  417.         neg     ax
  418.         inc     ax
  419.         jmp     .AI7
  420.       @@:
  421.  
  422.         mov     dx,[ScreenY]
  423.         shr     dx,1
  424.         cmp     ax,dx
  425.         jbe     .AI7
  426.         sub     ax,[ScreenY]
  427.       .AI7:
  428.          mov     word[edi],ax
  429.  
  430.        ;--------
  431.  
  432.  
  433.  
  434.         pop     ecx
  435.         add     ebx,4
  436.         dec     ecx
  437.         jnz     .AlignIco
  438. ;        loop    .AlignIco
  439.  
  440.  
  441. ;        mov     dword[fInfo],2
  442. ;        mcall   70,fInfo
  443.         ret
  444. endp
  445.  
  446. ;-------------------------------------------------------------------------------
  447. proc GetUserBut stdcall,f_name,sec_name,key_name,key_value
  448.         cmp     [NumUserButt],16
  449.         jne     @f
  450.         ret
  451.      @@:
  452.  
  453.         push    ebx esi edi
  454.  
  455.         mov     edi,[key_name]
  456.         mov     esi,keyMenuColor
  457.     @@: lodsb
  458.         scasb
  459.         jne     @f
  460.         test    al,al
  461.         jnz     @b
  462.  
  463.         stdcall [ini_get_color],[f_name],[sec_name],[key_name],0888888h
  464.         mov     [RBMenuColor],eax
  465.         ret
  466.    @@:
  467.  
  468.         mov     edi,[key_name]           ;®¯à¥¤¥«ï¥¬ è¨à¨­ã ¬¥­î
  469.         xor     eax,eax
  470.         or      ecx,-1
  471.         repne   scasb
  472.         sub     edi,[key_name]
  473.         mov     eax,edi
  474.         shl     eax,1
  475.         lea     eax,[eax*2+eax+5*2]
  476.         cmp     ax,[RMenuW]
  477.         jbe     @f
  478.         mov     [RMenuW],ax
  479.      @@:
  480.         cmp     [RMenuW],MinRMenuW
  481.         jae     @f
  482.         mov     [RMenuW],MinRMenuW
  483.      @@:
  484.  
  485.         mov     ebx,[NumUserButt]
  486.  
  487.         mov     esi,[key_name]
  488.         mov     edi,[RBUser+ebx*8]
  489.     @@: lodsb
  490.         stosb
  491.         test    al,al
  492.         jnz     @b
  493.  
  494. ;debug_newline
  495.  
  496.  
  497.         mov     [RBUser+ebx*8+4],edi
  498.         mov     esi,[key_value]
  499.     @@: lodsb
  500.         stosb
  501.         test    al,al
  502.         jnz     @b
  503.  
  504.         mov     [RBUser+ebx*8+8],edi
  505.  
  506.         inc     [NumUserButt]
  507.         add     [RMenuH],16
  508.  
  509.         pop     edi esi ebx
  510.         mov     eax,1
  511.         ret
  512. endp
  513.  
  514. proc Ini_SavePos stdcall,f_name,sec_name
  515.         push    ebx edi esi
  516.  
  517.         xor     ebx,ebx
  518.   .SearchSect:
  519.         mov     edi,[IconsOffs+ebx*4]
  520.         mov     esi,[sec_name]
  521.       @@:
  522.         lodsb
  523.         scasb
  524.         jne     @f
  525.         test    al,al
  526.         jnz     @b
  527.  
  528.         jmp     .IcoDataFound
  529.       @@:
  530.  
  531.         inc     ebx
  532.         cmp     ebx,[MaxNumIcon]
  533.         jb      .SearchSect
  534.  
  535.         mov     eax,1
  536.         pop     esi edi ebx
  537.         ret
  538.  
  539. .IcoDataFound:
  540.         or      ecx,-1
  541.         repne   scasb
  542.         repne   scasb
  543.         repne   scasb
  544.  
  545. ;int3
  546.         movzx   eax,word[edi+2]
  547.         test    eax,8000h
  548.         jz      @f
  549.         or      eax,0FFFF0000h
  550.      @@:
  551.  
  552.         stdcall [ini_set_int],[f_name],[sec_name],keyX,eax
  553.  
  554.         movzx   eax,word[edi]
  555.         test    eax,8000h
  556.         jz      @f
  557.         or      eax,0FFFF0000h
  558.      @@:
  559.  
  560.         stdcall [ini_set_int],[f_name],[sec_name],keyY,eax
  561.  
  562.         mov     eax,1
  563.         pop     esi edi ebx
  564.         ret
  565. endp
  566.  
  567.  
  568.  
  569.