;--------------------------------------------------------------------
;--- рисование кнопки с текстом в середине --------------------------
;--------------------------------------------------------------------
macro use_txt_button
{
txt_button:
.draw:
pusha
;--- прорисовка самой кнопки ---
        mov     eax,8
        mov     ebx,[edi] ; [but.width]
        mov     ecx,[edi+4] ;[but.height]
        mov     edx,[edi+8];[but.id]
        mov     esi,[edi+12];[but.color]
        mcall
;--- текст на ней ---
        ; считаем количество символов
        mov     edx,[edi+20]
        xor     esi,esi
.check_next_symbol:
        cmp     [edx+esi],byte 0
        je      .str_end
        inc     esi      ; в esi длина строки в символах
        jmp     .check_next_symbol
.str_end:

        ; вычисляем координаты
        lea     ebx,[esi*2+esi]
        lea     ebx,[ebx*2] ; в ebx длина строки в пикселях

        ;not     ebx
        neg     ebx
        add     bx,[edi] ; [but.width]
        sar     bx,1
        inc     bx
        add     bx,[edi+2];[but.left]  ; в bx позиция слева
        shl     ebx,16


        mov     bx,[edi+4];[but.height]
        sub     bx,8-1
        sar     bx,1
        add     bx,[edi+6];[but.top]   ; в bx позиция сверху

        ; рисуем строку текста
        mov     ecx,[edi+16] ;[but.text_color]
        shr     eax,1
        mcall
popa
ret
}

struc txt_button width,left,height,top,id,color,text_color,text_ptr,\
proc_addres
{
.width dw width ;+0
.left dw left   ;+2
.height dw height ;+4
.top dw top       ;+6
.id dd id         ;+8
.color dd color   ;+12
.text_color dd text_color  ;+16
.text_ptr dd text_ptr      ;+20
.proc_addres dd proc_addres+0 ;+24
}
but_struc_size=24+4
macro draw_txt_buttons start,end
{
        mov     edi,start
        mov     ecx,((end-start)/but_struc_size)
@@:
        call    txt_button.draw
        add     edi,but_struc_size
        loop    @b
}

macro txt_but_set_sys_color start,end,color_table
{
        mov     edi,start
        mov     esi,color_table
        mov     ecx,((end-start)/but_struc_size)
@@:
        push    dword [esi+24]
        pop     dword [edi+12]
        push    dword [esi+28]
        pop     dword [edi+16]
        add     edi,but_struc_size
        loop    @b
}

macro txt_but_ev start,end
{
        mov     edi,start
        mov     ecx,((end-start)/but_struc_size)
.txt_but_next:
        cmp     ah,[edi+8]
        jne     @f
        cmp     dword [edi+24],0
        je      @f
        pusha
        call    dword [edi+24]
        popa
@@:
        add     edi,but_struc_size
        loop    .txt_but_next
}

macro draw_txt_button ptr
{
        mov     edi,ptr
        call    txt_button.draw
}

macro set_sys_colors_txt_button but,sc
{
        mov     esi,sc
        mov     edi,but
        push    dword [esi+24]
        pop     dword [edi+12]
        push    dword [esi+28]
        pop     dword [edi+16]
}

macro event_txt_button but,sc
{

}