Subversion Repositories Kolibri OS

Rev

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

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