Subversion Repositories Kolibri OS

Rev

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