Subversion Repositories Kolibri OS

Rev

Rev 4084 | Rev 4146 | 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.   .DrawUB:
  163.         push    ecx
  164.  
  165.                 mov     eax,[NumMenuButt]
  166.         sub     eax,ecx
  167.         mov     edx,eax      ;button ID = ®â 0 ¤® NumMenuButt
  168.         or      edx,60000000h
  169.         shl     eax,4+16          ;*16*10000h
  170.         mov     ecx,eax
  171.         mov     cx,16
  172.  
  173.         xor     ebx,ebx
  174.         mov     bx,[RMenuW]
  175.         mov     esi,[sc.work]
  176.         mcall   8                       ;®¯à¥¤¥«¨«¨
  177.  
  178.         mov     ebx,70000h
  179.         shr     ecx,16
  180.         mov     bx,cx
  181.         add     bx,7
  182.  
  183.         mov     ecx,[sc.work_text]
  184.         or      ecx,80000000h
  185.  
  186.         mov     eax,[NumMenuButt]
  187.         sub     eax,[esp]
  188.         mov     edx,[RBMenuCP+eax*8]
  189.         mcall   4  
  190.  
  191.  
  192.         pop     ecx
  193.         loop    .DrawUB
  194.   ;---------------
  195.  
  196. ; ®¡à ¬«ïî騩 ¯àאַ㣮«ì­¨ª
  197.         xor     ebx,ebx            ;¢¥àå
  198.         mov     bx,[RMenuW]
  199.         xor     ecx,ecx
  200.         mcall   38,,,[sc.workL]
  201.  
  202.         mov     bx,[RMenuW]         ;¯à ¢®
  203.         shl     ebx,16
  204.         mov     bx,[RMenuW]
  205.         xor     ecx,ecx
  206.         mov     cx,[RMenuH]
  207.         mcall
  208.  
  209.         xor     ebx,ebx                  ;­¨§
  210.         mov     bx,[RMenuW]
  211.         mov     cx,[RMenuH]
  212.         shl     ecx,16
  213.         mov     cx,[RMenuH]
  214.         mcall
  215.  
  216.         xor     ebx,ebx               ;«¥¢®
  217.         xor     ecx,ecx
  218.         mov     cx,[RMenuH]
  219.         mcall
  220.  
  221.  
  222. ; ᢥâ«ë© «¥¢ë© ¢¥àå­¨© 㣮«
  223.         xor     ebx,ebx
  224.         mov     bx,[RMenuW]
  225.         add     ebx,1*10000h-1
  226.         mov     ecx,00010001h
  227.         mcall    ,,,[sc.workH]
  228.  
  229.         mov     ebx,00010001h
  230.         xor     ecx,ecx
  231.         mov     cx,[RMenuH]
  232.         add     ecx,1*10000h-1
  233.         mcall
  234.  
  235.  
  236. ;ª®­¥æ à¨á®¢ ­¨ï
  237.         mcall   12,2    ;RedrawWinEnd
  238. ;-------------------------------------------------------------------
  239.  
  240.         mcall   9,RBProcInfo,-1         ;GetThreadInfo RBProcInfo,-1
  241.         mcall   18,21,dword[RBProcInfo+30]
  242.         m2m     dword[RBSlot],eax
  243.  
  244. RBWMessages:
  245.         mcall   10              ;WaitMessage
  246.         dec     eax
  247.         jz      RBWRedraw
  248.         sub     eax,2
  249.         jz      RBWButton
  250.         sub     eax,3
  251.         jz      RBWMouse
  252.         jmp     RBWMessages
  253.  
  254. RBWButton:
  255.         mcall   17              ;GetButtonPressed
  256.         shr     eax,8
  257.  
  258.         mov     ebx,eax
  259.         mov     eax,[RBMenuCP+ebx*8+4] ;¥á«¨ ᤥáì 0, â® ª«¨ª ¯® áâ ­¤ àâ­®© ª­®¯ª¥(ª®â®à ï ­¥ ¢ ini)
  260.         test    eax,eax
  261.         jnz     .RBWB
  262.         mov     eax,[RBMenuCP+ebx*8]  ;ᬮâਬ, 㪠§ â¥«ì ­  ª ªãî ­ ¤¯¨áì ¢ ¯®¤¯¨á¨
  263.         cmp     eax,RMenuRedrawFon                  ; ¨ ¯® ­¥© ¢ë¡¨à ¥¬ ¤¥©á⢨¥
  264.         jz      RBRedrawFon
  265.         cmp     eax,RMenuAlign
  266.         jz      RBAlign
  267.         cmp     eax,RMenuOffMoving
  268.         jz      RBFixIcons
  269.         cmp     eax,RMenuOnMoving
  270.         jz      RBFixIcons
  271.         cmp     eax,RMenuAdd
  272.         jz      RBAdd
  273.         cmp     eax,RMenuDel
  274.         jz      RBDelete
  275.         cmp     eax,RMenuProp
  276.         jz      RBPropeties
  277.  
  278.         jmp     RBWExit
  279.    .RBWB:
  280.         mov     dword[fiRunProg+8],0
  281.         mov     dword[fiRunProg+21],eax
  282.         mcall   70,fiRunProg
  283.  
  284.         jmp     RBWExit
  285.  
  286. RBWMouse:
  287.         call    MouseInWin
  288.         jnc     .RBWMnoInWin          ;¥á«¨ ¢­¥ ®ª­ , â® ¯à®áâ® ¢®ááâ ­ ¢«¨¢ ¥¬ ¯à¥¤ë¤ãéãî ª­®¯ªã
  289.  
  290.         mcall   37,1          ;¯®«®¦¥­¨¥ ¬ëè¨ ®â­®á¨â¥«ì­® ®ª­ 
  291.         and     eax,0FFF0h      ;­ã¦¥­ ⮫쪮 Y, ¯à¨çñ¬ ®ªà㣫ñ­­ë© ¤® ¢¥àå­¥© â®çª¨ ªà â­®© 16(¢ëá®â  ª­®¯ª¨)
  292.         cmp     [PredItem],eax
  293.         je      .RBWMendLightBut
  294.  
  295.         shr     eax,4              ;¥á«¨ ¬ëèì ­  ­¨¦­¥© à ¬ª¥, â® â ª¦¥ ⮫쪮 ¢®ááâ ­®¢¨âì ¯à¥¤ë¤ãéãî ª­®¯ªã
  296.         cmp     eax,[NumMenuButt]
  297.         jae     .RBWMnoInWin
  298.  
  299.         cmp     [PredItem],-1      ;¢®ááâ ­®¢«¥­¨¥ ¯à¥¤ë¤ã饩 ª­®¯ª¨
  300.         je      @f
  301.  
  302.         stdcall DrawRBLine,[PredItem],0
  303.  
  304.       @@:
  305.  
  306.         call    MouseInWin
  307.         jnc     @f
  308.         mcall   37,1          ;¯®«®¦¥­¨¥ ¬ëè¨ ®â­®á¨â¥«ì­® ®ª­ 
  309.         and     eax,0FFF0h      ;­ã¦¥­ ⮫쪮 Y, ¯à¨çñ¬ ®ªà㣫ñ­­ë© ¤® ¢¥àå­¥© â®çª¨ ªà â­®© 16(¢ëá®â  ª­®¯ª¨)
  310.         mov     [PredItem],eax
  311.         stdcall DrawRBLine,eax,1
  312.  
  313.       @@:
  314.         jmp     .RBWMendLightBut
  315.  
  316.  
  317.   .RBWMnoInWin:
  318.         cmp     [PredItem],-1      ;¢®ááâ ­®¢«¥­¨¥ ¯à¥¤ë¤ã饩 ª­®¯ª¨
  319.         je      .RBWMendLightBut
  320.  
  321.         stdcall DrawRBLine,[PredItem],0
  322.         mov     [PredItem],-1
  323.  
  324.   .RBWMendLightBut:
  325.         mcall   37,2            ;GetMouseKey
  326.         test    eax,111b
  327.         jz      RBWMessages
  328.  
  329.         call    MouseInWin
  330.         jc      RBWMessages
  331.  
  332. RBWExit:
  333.         cmp     [SelIcon],-1
  334.         jne     @f
  335.         mcall   68,13,[RBMenuCP]                        ;®á¢®¡®¦¤ ¥¬ ¯ ¬ïâì á ¯®¤¯¨áﬨ ¨ ¯ãâﬨ ª ¯à®£ ¬
  336.       @@:
  337.         mov     [RButtonActiv],0
  338.         mcall   -1      ;ExitProcess
  339.  
  340.  
  341. RBRedrawFon:
  342.         mcall   15,3
  343.         jmp     RBWExit
  344.  
  345. RBAlign:
  346.         call    AlignIcons
  347.  
  348.         m2m     [PIcoDB],[BegData]
  349.         stdcall [ini_enum_sections],IconIni,Ini_SavePos
  350.  
  351.         mov     dword[fiRunProg+8],WarningSave
  352.         mov     dword[fiRunProg+21],pthNotify
  353.         mcall   70,fiRunProg
  354.         mov     [bNotSave],0
  355.  
  356.         jmp     RBRedrawFon
  357.  
  358. RBFixIcons:
  359.         xor     dword[bFixIcons],1
  360.  
  361.         cmp     [bNotSave],0
  362.         je      @f
  363.  
  364.         mov     dword[fiRunProg+8],WarningSave
  365.         mov     dword[fiRunProg+21],pthNotify
  366.         mcall   70,fiRunProg
  367.         mov     [bNotSave],0
  368.  
  369.       @@:
  370.         jmp     RBWExit
  371.  
  372. RBAdd:
  373.         cmp     [DlgAddActiv],1
  374.         je      RBWSetActivWin
  375.         mov     [DlgAddActiv],1
  376.  
  377.         mcall   51,1,DlgAdd,stack_dlg           ;CreateThread DlgAdd,stack_dlg
  378.         jmp     RBWExit
  379.  
  380. RBDelete:
  381.         mov     eax,[SelIcon]
  382.         mov     eax,[IconsOffs+eax*4]
  383.         stdcall [ini_del_section],IconIni,eax
  384.  
  385.         stdcall DelIcon,[SelIcon]
  386.  
  387.         mov     dword[fiRunProg+8],WarningSave
  388.         mov     dword[fiRunProg+21],pthNotify
  389.         mcall   70,fiRunProg
  390.         mov     [bNotSave],0
  391.  
  392.         jmp     RBRedrawFon
  393.  
  394. RBPropeties:
  395.         cmp     [DlgAddActiv],1
  396.         je      RBWSetActivWin
  397.         mov     [DlgAddActiv],1
  398.  
  399.         mcall   51,1,DlgProp,stack_dlg          ;CreateThread DlgProp,stack_dlg
  400.         jmp     RBWExit
  401.  
  402. RBWSetActivWin:
  403.         mcall   18,3,[slotDlgAdd]
  404.         jmp     RBWExit
  405.  
  406. proc DrawRBLine y,active
  407.  
  408.         xor     ebx,ebx
  409.         mov     bx,[RMenuW]
  410.         add     ebx,2*10000h-3
  411.         mov     ecx,[y]
  412.         add     ecx,2
  413.         shl     ecx,16
  414.         mov     cx,16;-1-2
  415.         cmp     [active],1
  416.         jne     @f
  417.         mov     edx,[sc.work_button]
  418.         jmp     .L1
  419.        @@:
  420.         mov     edx,[sc.work]
  421.       .L1:
  422.         mcall   13
  423.  
  424. ;----------------------------------------------
  425.         xor     ebx,ebx            ;¢¥àå
  426.         mov     bx,[RMenuW]
  427.         add     ebx,2*10000h-3
  428.         mov     cx,word[y]
  429.         shl     ecx,16
  430.         mov     cx,word[y]
  431.         add     ecx,00020002h
  432.  
  433.         cmp     [active],1
  434.         jne     @f
  435.         mov     edx,[sc.workL]
  436.         jmp     .L3
  437.        @@:
  438.         mov     edx,[sc.work]
  439.       .L3:
  440.  
  441.         mcall   38
  442.  
  443.         mov     ebx,00020002h            ;«¥¢®
  444.         mov     cx,word[y]
  445.         shl     ecx,16
  446.         mov     cx,word[y]
  447.         add     ecx,00020002h+16
  448.  
  449.         cmp     [active],1
  450.         jne     @f
  451.         mov     edx,[sc.workL]
  452.  
  453.        @@:
  454.  
  455.         mcall
  456.  
  457.         xor     ebx,ebx                  ;­¨§
  458.         mov     bx,[RMenuW]
  459.         add     ebx,2*10000h-3
  460.         mov     cx,word[y]
  461.         shl     ecx,16
  462.         mov     cx,word[y]
  463.         add     ecx,16*10000h+16+00020002h
  464.  
  465.         cmp     [active],1
  466.         jne     @f
  467.         mov     edx,[sc.workH]
  468.        @@:
  469.  
  470.         mcall
  471.  
  472.         mov     bx,[RMenuW]                 ;¯à ¢®
  473.         shl     ebx,16
  474.         mov     bx,[RMenuW]
  475.         add     ebx,-2*10000h-2
  476.         mov     cx,word[y]
  477.         shl     ecx,16
  478.         mov     cx,word[y]
  479.         add     ecx,00020002h+16
  480.  
  481.         cmp     [active],1
  482.         jne     @f
  483.         mov     edx,[sc.workH]
  484.        @@:
  485.  
  486.         mcall
  487.  
  488.         mov     eax,[y]
  489.         shr     eax,4
  490.         mov     edx,[RBMenuCP+eax*8]
  491.  
  492.         xor     ebx,ebx
  493.         mov     ebx,[y]
  494.         add     ebx,7*10000h+7
  495.  
  496.         cmp     [active],1
  497.         jne     @f
  498.         mov     ecx,[sc.work_button_text]
  499.         jmp     .L2
  500.        @@:
  501.         mov     ecx,[sc.work_text]
  502.       .L2:
  503.  
  504.         or      ecx,80000000h
  505.  
  506.         mcall   4
  507.  
  508.         ret
  509. endp
  510.  
  511.  
  512. proc MouseInWin        ;Carry flag = 1, ¥á«¨ ª«¨ª ¢ ®ª­¥
  513.         mcall   37,0            ;GetMousePos
  514.         xor     ebx,ebx
  515.         mov     bx,ax           ;y
  516.         shr     eax,16          ;x
  517.  
  518.         xor     ecx,ecx
  519.         mov     cx,bx
  520.         mov     bx,ax
  521.  
  522.         mcall   34
  523.         cmp     eax,[RBSlot]
  524.         jne     @f
  525.         stc
  526.         ret
  527.       @@:
  528.         clc
  529.         ret
  530. endp
  531.  
  532.  
  533. proc AlignIcons
  534. local posX:WORD,\
  535.       posY:WORD,\
  536.       negatX:WORD,\
  537.       negatY:WORD
  538.  
  539.         xor     ebx,ebx
  540.  
  541.         mov     ecx,[MaxNumIcon]
  542.         test    ecx,ecx
  543.         jnz     .AlignIco
  544.         ret
  545.  .AlignIco:
  546.         push    ecx
  547.         or      ecx,-1
  548.         mov     edi,dword[IconsOffs+ebx]
  549.         xor     eax,eax
  550.         repne   scasb
  551.         repne   scasb
  552.         repne   scasb
  553.         repne   scasb
  554.  
  555.         mov     dword[negatX],0
  556.  
  557.      ;-------- ¯à¥®¡à §ã¥¬ ª®®à¤¨­ âë ¢ ¯®«®¦¨â¥«ì­ë¥
  558.         mov     ax,[edi+2]
  559.         test    ax,8000h
  560.         jz      @f
  561.         neg     ax
  562.         mov     word[negatX],1
  563.       @@:
  564.         mov     [posX],ax
  565.  
  566.         mov     ax,[edi]
  567.         test    ax,8000h
  568.         jz      @f
  569.         neg     ax
  570.         mov     word[negatY],1
  571.       @@:
  572.         mov     [posY],ax
  573.  
  574.       ;-----
  575.         mov     ax,[posY]
  576.         mov     dx,ALIGN_SIZE
  577.  
  578.         cmp     ax,dx
  579.         jb      .AI0
  580.     @@: sub     ax,dx
  581.         cmp     ax,dx
  582.         jae     @b
  583.     .AI0:
  584.  
  585.         mov     dx,ax
  586.         cmp     dx,ALIGN_SIZE/2
  587.         jb      .AI1
  588.  
  589.         mov     ax,ALIGN_SIZE
  590.         sub     ax,dx
  591.         add     [posY],ax
  592.  
  593.         jmp     .AI2
  594.      .AI1:
  595.         sub     [posY],dx
  596.      .AI2:
  597.      ;-----
  598.         mov     ax,[posX]
  599.         mov     dx,ALIGN_SIZE
  600.  
  601.         cmp     ax,dx
  602.         jb      .AI3
  603.     @@: sub     ax,dx
  604.         cmp     ax,dx
  605.         jae     @b
  606.     .AI3:
  607.  
  608.         mov     dx,ax
  609.         cmp     dx,ALIGN_SIZE/2
  610.         jb      .AI4
  611.  
  612.         mov     ax,ALIGN_SIZE
  613.         sub     ax,dx
  614.         add     [posX],ax
  615.  
  616.         jmp     .AI5
  617.      .AI4:
  618.         sub     [posX],dx
  619.      .AI5:
  620.  
  621.       ;----- ¯à¥®¡à §®¢ ­¨¥ ­ § ¤ ¨ ¯®¯à ¢ª  ¢ ®âà¨æ â¥«ì­ëå ª®®à¤¨­ â
  622.         mov     ax,[posX]
  623.  
  624.         cmp     [negatX],1
  625.         jne     @f
  626.         neg     ax
  627.         inc     ax
  628.         jmp     .AI6
  629.       @@:
  630.  
  631.         mov     dx,[ScreenX]
  632.         shr     dx,1
  633.         cmp     ax,dx
  634.         jbe     .AI6
  635.         sub     ax,[ScreenX]
  636.       .AI6:
  637.         mov     word[edi+2],ax
  638.  
  639.  
  640.         mov     ax,[posY]
  641.         cmp     [negatY],1
  642.         jne     @f
  643.         neg     ax
  644.         inc     ax
  645.         jmp     .AI7
  646.       @@:
  647.  
  648.         mov     dx,[ScreenY]
  649.         shr     dx,1
  650.         cmp     ax,dx
  651.         jbe     .AI7
  652.         sub     ax,[ScreenY]
  653.       .AI7:
  654.          mov     word[edi],ax
  655.  
  656.        ;--------
  657.  
  658.  
  659.  
  660.         pop     ecx
  661.         add     ebx,4
  662.         dec     ecx
  663.         jnz     .AlignIco
  664. ;        loop    .AlignIco
  665.  
  666.  
  667. ;        mov     dword[fInfo],2
  668. ;        mcall   70,fInfo
  669.         ret
  670. endp
  671.  
  672. ;-------------------------------------------------------------------------------
  673. proc GetUserBut stdcall,f_name,sec_name,key_name,key_value
  674.         cmp     [NumMenuButt],MAX_USER_BUTTONS
  675.         jne     @f
  676.         ret
  677.      @@:
  678.  
  679.         push    ebx esi edi
  680.  
  681.         mov     edi,[key_name]           ;®¯à¥¤¥«ï¥¬ è¨à¨­ã ¬¥­î
  682.         xor     eax,eax
  683.         or      ecx,-1
  684.         repne   scasb
  685.         sub     edi,[key_name]
  686.         mov     eax,edi
  687.         shl     eax,1
  688.         lea     eax,[eax*2+eax+5*2]
  689.         cmp     ax,[RMenuW]
  690.         jbe     @f
  691.         mov     [RMenuW],ax
  692.      @@:
  693.  
  694.         mov     ebx,[NumMenuButt]
  695.  
  696.         mov     esi,[key_name]
  697.         mov     edi,[RBMenuCP+ebx*8]
  698.     @@: lodsb
  699.         stosb
  700.         test    al,al
  701.         jnz     @b
  702.  
  703.  
  704.         mov     [RBMenuCP+ebx*8+4],edi
  705.         mov     esi,[key_value]
  706.     @@: lodsb
  707.         stosb
  708.         test    al,al
  709.         jnz     @b
  710.  
  711.         mov     [RBMenuCP+ebx*8+8],edi
  712.  
  713.         inc     [NumMenuButt]
  714.  
  715.         pop     edi esi ebx
  716.         mov     eax,1
  717.         ret
  718. endp
  719.  
  720. proc Ini_SavePos stdcall,f_name,sec_name
  721.         push    ebx edi esi
  722.  
  723.         xor     ebx,ebx
  724.   .SearchSect:
  725.         mov     edi,[IconsOffs+ebx*4]
  726.         mov     esi,[sec_name]
  727.       @@:
  728.         lodsb
  729.         scasb
  730.         jne     @f
  731.         test    al,al
  732.         jnz     @b
  733.  
  734.         jmp     .IcoDataFound
  735.       @@:
  736.  
  737.         inc     ebx
  738.         cmp     ebx,[MaxNumIcon]
  739.         jb      .SearchSect
  740.  
  741.         mov     eax,1
  742.         pop     esi edi ebx
  743.         ret
  744.  
  745. .IcoDataFound:
  746.         or      ecx,-1
  747.         repne   scasb
  748.         repne   scasb
  749.         repne   scasb
  750.  
  751. ;int3
  752.         movzx   eax,word[edi+2]
  753.         test    eax,8000h
  754.         jz      @f
  755.         or      eax,0FFFF0000h
  756.      @@:
  757.  
  758.         stdcall [ini_set_int],[f_name],[sec_name],keyX,eax
  759.  
  760.         movzx   eax,word[edi]
  761.         test    eax,8000h
  762.         jz      @f
  763.         or      eax,0FFFF0000h
  764.      @@:
  765.  
  766.         stdcall [ini_set_int],[f_name],[sec_name],keyY,eax
  767.  
  768.         mov     eax,1
  769.         pop     esi edi ebx
  770.         ret
  771. endp
  772.  
  773.  
  774.  
  775.