Subversion Repositories Kolibri OS

Rev

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