Subversion Repositories Kolibri OS

Rev

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

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