Subversion Repositories Kolibri OS

Rev

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