diff --git a/programs/develop/libGUI/examples/C example/interface.c b/programs/develop/libGUI/examples/C example/interface.c new file mode 100644 index 0000000000..a21ba52bdd --- /dev/null +++ b/programs/develop/libGUI/examples/C example/interface.c @@ -0,0 +1,1270 @@ + + +#include "./include/kolibrisys.h" +#include "./include/stdlib.h" + + +#define Cannot_load_libGUI 100 +#define ParendSize 44 +#define MessageSize 16 + +#define TOTAL_NUMBERS_OF_CONTROLS 150 + +#define WINDOW_POSX 50 +#define WINDOW_POSY 50 +#define WINDOW_SIZEX 512 +#define WINDOW_SIZEY 384 + +#define FONT_SIZEX 6 + +#define BOOKMARK1_POSX 0 +#define BOOKMARK1_POSY 55 +#define BOOKMARK1_SIZEX 210 +#define BOOKMARK2_POSX 215 +#define BOOKMARK2_POSY 55 + +#define SCREEN_SIZEX 1024 +#define SCREEN_SIZEY 768 + +#define CONTROLS_NUMBER_POS 4 + +#define DISTANCE1 130 + +struct WINDOW +{ + int posx; + int posy; + int sizex; + int sizey; +}; + +struct HEADER +{ + dword ctrl_proc; + dword *ctrl_fd; + dword *ctrl_bk; + dword *child_fd; + dword *child_bk; + dword *parend; + dword ctrl_x; + dword ctrl_y; + dword ctrl_sizex; + dword ctrl_sizey; + dword ctrl_ID; + +}__attribute__((packed));; + +struct MESSAGE +{ + dword type; + dword arg1; + dword arg2; + dword arg3; +}__attribute__((packed)); + +struct ControlButton +{ + dword ctrl_proc; + dword *ctrl_fd; + dword *ctrl_bk; + dword *child_fd; + dword *child_bk; + dword *parend; + dword ctrl_x; + dword ctrl_y; + dword ctrl_sizex; + dword ctrl_sizey; + dword ctrl_ID; + + byte type; + byte flag; + word x; + word y; + word width; + word height; + dword image; + word imageX; + word imageY; + word imageSizeX; + word imageSizeY; + dword transparentColor; + dword text; + word textX; + word textY; + dword textcolor; + dword color1; + dword color2; + word mouseX; + word mouseY; +}__attribute__((packed));; + +struct ControlScroller +{ + dword ctrl_proc; + dword *ctrl_fd; + dword *ctrl_bk; + dword *child_fd; + dword *child_bk; + dword *parend; + dword ctrl_x; + dword ctrl_y; + dword ctrl_sizex; + dword ctrl_sizey; + dword ctrl_ID; + + byte type; + word x; + word y; + word length; + dword color1; + float size; + float pos; + word buttons_flags; + dword ChildButton1; + dword ChildButton2; + word MouseX; + word MouseY; +}__attribute__((packed));; + +struct ControlProgressbar +{ + dword ctrl_proc; + dword *ctrl_fd; + dword *ctrl_bk; + dword *child_fd; + dword *child_bk; + dword *parend; + dword ctrl_x; + dword ctrl_y; + dword ctrl_sizex; + dword ctrl_sizey; + dword ctrl_ID; + + byte type; + byte flag; + dword color1; + dword color2; + dword x; + dword y; + dword sizex; + dword sizey; + float progress; + dword color3; +}__attribute__((packed));; + + +typedef struct InfoForButton +{ + byte type; //0 + byte flag; //1 + word x; //2 + word y; //4 + word width; //6 + word height; //8 + dword image; //10 + word imageX; //14 + word imageY; //16 + word imageSizeX; //18 + word imageSizeY; //20 + dword transparentColor;//24 + dword text; //28 + word textX; //32 + word textY; //34 + dword textcolor; //36 + dword color1; //40 + dword color2; + word mouseX; + word mouseY; +}__attribute__((packed)); + +struct InfoForScroller +{ + byte type; + word x; + word y; + word length; + dword color1; + float size; + float pos; + word buttons_flags; + dword ChildButton1; + dword ChildButton2; + word MouseX; + word MouseY; +}__attribute__((packed)); + +struct InfoForProgressbar +{ + byte type; + byte flag; + dword color1; + dword color2; + dword x; + dword y; + dword sizex; + dword sizey; + float progress; + dword color3; +}__attribute__((packed)); + + +struct InfoForImage +{ + byte type; + byte flag; + dword color1; + dword x; + dword y; + dword sizex; + dword sizey; + dword pointer; +}__attribute__((packed)); + +struct InfoForText +{ + byte type; + byte flag; + dword color1; + dword x; + dword y; + dword length; + dword text; +}__attribute__((packed)); + +struct InfoForNumber +{ + byte type; + byte flag; + dword color1; + dword x; + dword y; + float number; + dword format; +}__attribute__((packed)); + +struct ControlImage +{ + dword ctrl_proc; + dword *ctrl_fd; + dword *ctrl_bk; + dword *child_fd; + dword *child_bk; + dword *parend; + dword ctrl_x; + dword ctrl_y; + dword ctrl_sizex; + dword ctrl_sizey; + dword ctrl_ID; + + byte type; + byte flag; + dword color1; + dword x; + dword y; + dword sizex; + dword sizey; + dword pointer; +}__attribute__((packed)); + +struct ControlText +{ + dword ctrl_proc; + dword *ctrl_fd; + dword *ctrl_bk; + dword *child_fd; + dword *child_bk; + dword *parend; + dword ctrl_x; + dword ctrl_y; + dword ctrl_sizex; + dword ctrl_sizey; + dword ctrl_ID; + + byte type; + byte flag; + dword color1; + dword x; + dword y; + dword length; + dword text; +}__attribute__((packed)); + +struct ControlNumber +{ + dword ctrl_proc; + dword *ctrl_fd; + dword *ctrl_bk; + dword *child_fd; + dword *child_bk; + dword *parend; + dword ctrl_x; + dword ctrl_y; + dword ctrl_sizex; + dword ctrl_sizey; + dword ctrl_ID; + + byte type; + byte flag; + dword color1; + dword x; + dword y; + float number; + dword format; +}__attribute__((packed)); + +//////////////////////////////Info for Bookmark 1/////////////////////////////// +struct InfoForBookmark1 +{ + byte type; + byte flag; + dword x; + dword y; + dword sizex; + dword sizey; + dword color1; + dword reserved; + dword color2; + + dword number_lines_bookmarks; + dword number_lines_bookmarks_in_1; + dword number_lines_bookmarks_in_2; + + dword text_for_1; + dword number_controls_1; + dword type_control_10; + dword info_for_10_control; + + dword a1,b1; + dword a2,b2; + dword a3,b3; + dword a4,b4; + + dword a5,b5; + dword a6,b6; + dword a7,b7; + dword a8,b8; + + dword text_for_2; + dword number_controls_2; + dword type_control_20; + dword info_for_20_control; + + dword a9,b9; + dword a10,b10; + dword a11,b11; + dword a12,b12; + dword a13,b13; + dword a14,b14; + dword a15,b15; + + dword a16,b16; + dword a17,b17; + dword a18,b18; + dword a19,b19; + dword a20,b20; + dword a21,b21; + dword a22,b22; + + dword text_for_3; + dword number_controls_3; + dword type_control_30; + dword info_for_30_control; + +//filler 256 + dword a23,b23; + dword a24,b24; + dword a25,b25; + dword a26,b26; + dword a27,b27; + dword a28,b28; + dword a29,b29; + dword a30,b30; + dword a31,b31; + dword a32,b32; + dword a33,b33; + dword a34,b34; + dword a35,b35; + dword a36,b36; + dword a37,b37; + dword a38,b38; + + dword a39,b39; + dword a40,b40; + dword a41,b41; + dword a42,b42; + dword a43,b43; + dword a44,b44; + dword a45,b45; + dword a46,b46; + dword a47,b47; + dword a48,b48; + dword a49,b49; + dword a50,b50; + dword a51,b51; + dword a52,b52; + dword a53,b53; + dword a54,b54; + + dword text_for_4; + dword number_controls_4; + dword type_control_40; + dword info_for_40_control; + +//filler 64 + dword a55,b55; + dword a56,b56; + dword a57,b57; + dword a58,b58; + + dword a59,b59; + dword a60,b60; + dword a61,b61; + dword a62,b62; + + dword text_for_5; + dword number_controls_5; + dword type_control_50; + dword info_for_50_control; + +}__attribute__((packed)); + +struct ControlBookmark1 +{ + dword ctrl_proc; + dword *ctrl_fd; + dword *ctrl_bk; + dword *child_fd; + dword *child_bk; + dword *parend; + dword ctrl_x; + dword ctrl_y; + dword ctrl_sizex; + dword ctrl_sizey; + dword ctrl_ID; + + byte type; + byte flag; + dword x; + dword y; + dword sizex; + dword sizey; + dword color1; + dword reserved; + dword color2; + + dword number_lines_bookmarks; + dword number_lines_bookmarks_in_1; + dword number_lines_bookmarks_in_2; + + dword text_for_1; + dword number_controls_1; + dword type_control_10; + dword info_for_10_control; + +//filler 64 + dword a1,b1; + dword a2,b2; + dword a3,b3; + dword a4,b4; + + dword a5,b5; + dword a6,b6; + dword a7,b7; + dword a8,b8; + + dword text_for_2; + dword number_controls_2; + dword type_control_20; + dword info_for_20_control; + +//filller 112 bytes + dword a9,b9; + dword a10,b10; + dword a11,b11; + dword a12,b12; + dword a13,b13; + dword a14,b14; + dword a15,b15; + + dword a16,b16; + dword a17,b17; + dword a18,b18; + dword a19,b19; + dword a20,b20; + dword a21,b21; + dword a22,b22; + + dword text_for_3; + dword number_controls_3; + dword type_control_30; + dword info_for_30_control; + +//filler 256 + dword a23,b23; + dword a24,b24; + dword a25,b25; + dword a26,b26; + dword a27,b27; + dword a28,b28; + dword a29,b29; + dword a30,b30; + dword a31,b31; + dword a32,b32; + dword a33,b33; + dword a34,b34; + dword a35,b35; + dword a36,b36; + dword a37,b37; + dword a38,b38; + + dword a39,b39; + dword a40,b40; + dword a41,b41; + dword a42,b42; + dword a43,b43; + dword a44,b44; + dword a45,b45; + dword a46,b46; + dword a47,b47; + dword a48,b48; + dword a49,b49; + dword a50,b50; + dword a51,b51; + dword a52,b52; + dword a53,b53; + dword a54,b54; + + + dword text_for_4; + dword number_controls_4; + dword type_control_40; + dword info_for_40_control; + +//filler 64 + dword a55,b55; + dword a56,b56; + dword a57,b57; + dword a58,b58; + + dword a59,b59; + dword a60,b60; + dword a61,b61; + dword a62,b62; + + dword text_for_5; + dword number_controls_5; + dword type_control_50; + dword info_for_50_control; + +}__attribute__((packed)); +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////Info for Bookmark 2/////////////////////////////// +struct InfoForBookmark2 +{ + byte type; + byte flag; + dword x; + dword y; + dword sizex; + dword sizey; + dword color1; + dword reserved; + dword color2; + + dword number_lines_bookmarks; + dword number_lines_bookmarks_in_1; + + dword text_for_1; + dword number_controls_1; + dword type_control_10; + dword info_for_10_control; + dword type_control_11; + dword info_for_11_control; + + dword text_for_2; + dword number_controls_2; + dword type_control_20; + dword info_for_20_control; + +//filler 64 + dword a1,b1; + dword a2,b2; + dword a3,b3; + dword a4,b4; + + dword a5,b5; + dword a6,b6; + dword a7,b7; + dword a8,b8; + +}__attribute__((packed)); + +struct ControlBookmark2 +{ + dword ctrl_proc; + dword *ctrl_fd; + dword *ctrl_bk; + dword *child_fd; + dword *child_bk; + dword *parend; + dword ctrl_x; + dword ctrl_y; + dword ctrl_sizex; + dword ctrl_sizey; + dword ctrl_ID; + + byte type; + byte flag; + dword x; + dword y; + dword sizex; + dword sizey; + dword color1; + dword reserved; + dword color2; + + dword number_lines_bookmarks; + dword number_lines_bookmarks_in_1; + + dword text_for_1; + dword number_controls_1; + dword type_control_10; + dword info_for_10_control; + dword type_control_11; + dword info_for_11_control; + + dword text_for_2; + dword number_controls_2; + dword type_control_20; + dword info_for_20_control; + +//filler 64 + dword a1,b1; + dword a2,b2; + dword a3,b3; + dword a4,b4; + + dword a5,b5; + dword a6,b6; + dword a7,b7; + dword a8,b8; + +}__attribute__((packed)); +//////////////////////////////////////////////////////////////////////////////// + +// +// libGUI functions +// +void stdcall (*DestroyControl)(void *control); +void stdcall (*SendMessage)(struct HEADER *Parend,struct MESSAGE *Message); +int stdcall (*Version)(void); +void stdcall (*ResizeComponent)(void *Control,int new_sizex,int new_sizey); +void stdcall (*RemoveComponent)(void *Control,int new_x,int new_y); +void* stdcall (*CraeteButton)(struct HEADER *Parend,void *Control); +void* stdcall (*CraeteScroller)(struct HEADER *Parend,void *Control); +void* stdcall (*CraeteBookmark)(struct HEADER *Parend,void *Control); +void* stdcall (*CraeteImage)(struct HEADER *Parend,void *Control); +void* stdcall (*CraeteText)(struct HEADER *Parend,void *Control); +void* stdcall (*CraeteNumber)(struct HEADER *Parend,void *Control); +void* stdcall (*CraeteCheckbox)(struct HEADER *Parend,void *Control); +void* stdcall (*CraeteEditbox)(struct HEADER *Parend,void *Control); +void* stdcall (*CraeteProgressbar)(struct HEADER *Parend,void *Control); + +char* sys_libGUI_path="/sys/lib/libGUI.obj"; + +void link(char *exp){ + + char name_DestroyControl[]={"DestroyControl"}; + char name_SendMessage[]={"SendMessage"}; + char name_Version[]={"Version"}; + char name_ResizeComponent[]={"ResizeComponent"}; + char name_RemoveComponent[]={"RemoveComponent"}; + char name_CraeteButton[]={"CraeteButton"}; + char name_CraeteScroller[]={"CraeteScroller"}; + char name_CraeteBookmark[]={"CraeteBookmark"}; + char name_CraeteImage[]={"CraeteImage"}; + char name_CraeteText[]={"CraeteText"}; + char name_CraeteNumber[]={"CraeteNumber"}; + char name_CraeteCheckbox[]={"CraeteCheckbox"}; + char name_CraeteEditbox[]={"CraeteEditbox"}; + char name_CraeteProgressbar[]={"CraeteProgressbar"}; + + DestroyControl=(void stdcall (*)(void *control)) + _ksys_cofflib_getproc(exp,name_DestroyControl); + SendMessage=(void stdcall (*)(struct HEADER *Parend,struct MESSAGE *Message)) + _ksys_cofflib_getproc(exp,name_SendMessage); + Version=(int stdcall (*)(void)) + _ksys_cofflib_getproc(exp,name_Version); + ResizeComponent=(void stdcall(*)(void *Control,int new_sizex,int new_sizey)) + _ksys_cofflib_getproc(exp,name_ResizeComponent); + RemoveComponent=(void stdcall(*)(void *Control,int new_x,int new_y)) + _ksys_cofflib_getproc(exp,name_RemoveComponent); + CraeteButton=(void* stdcall (*)(struct HEADER *Parend,void *Control)) + _ksys_cofflib_getproc(exp,name_CraeteButton); + CraeteScroller=(void* stdcall (*)(struct HEADER *Parend,void *Control)) + _ksys_cofflib_getproc(exp,name_CraeteScroller); + CraeteBookmark=(void* stdcall (*)(struct HEADER *Parend,void *Control)) + _ksys_cofflib_getproc(exp,name_CraeteBookmark); + CraeteImage=(void* stdcall (*)(struct HEADER *Parend,void *Control)) + _ksys_cofflib_getproc(exp,name_CraeteImage); + CraeteText=(void* stdcall (*)(struct HEADER *Parend,void *Control)) + _ksys_cofflib_getproc(exp,name_CraeteText); + CraeteNumber=(void* stdcall (*)(struct HEADER *Parend,void *Control)) + _ksys_cofflib_getproc(exp,name_CraeteNumber); + CraeteCheckbox=(void* stdcall (*)(struct HEADER *Parend,void *Control)) + _ksys_cofflib_getproc(exp,name_CraeteCheckbox); + CraeteEditbox=(void* stdcall (*)(struct HEADER *Parend,void *Control)) + _ksys_cofflib_getproc(exp,name_CraeteEditbox); + CraeteProgressbar=(void* stdcall (*)(struct HEADER *Parend,void *Control)) + _ksys_cofflib_getproc(exp,name_CraeteProgressbar); + +} + +int Init_libGUI(void) +{ + char *Export; + + Export=(char *)_ksys_cofflib_load(sys_libGUI_path); + if (Export==0) return Cannot_load_libGUI; + + link(Export); + return(0); + +} + +void draw_window(struct WINDOW *win) +{ + _ksys_window_redraw(1); + _ksys_draw_window(win->posx,win->posy,win->sizex,win->sizey,0xaabbcc,3,0x5090d0,0,0x5080d0); + _ksys_window_redraw(2); + +} + +void CraeteInterface(dword *controls,struct HEADER *Parend,struct WINDOW *win) +{ + char *names_of_bookmarks1[]={"SINGLET","DOUBLET","SIXTET","P(H)","OTHER"}; + char *names_of_bookmarks2[]={"SPECTRA","INFORMATION"}; + + char *bookmark_singlet_text[]={"Isomer shift","Amplitude","Width","Xi^2"}; + char *bookmark_doublet_text[]={"Isomer shift","Quadrupol shift","Amplitude 1", + "Amplitude 2","Width 1","Width 2","Xi^2"}; + char *bookmark_sixtet_text[]={"Isomer shift","Quadrupol shift","Feld","Amplitude 1", + "Amplitude 2","Amplitude 3","Amplitude 4","Amplitude 5", + "Amplitude 6","Width 1","Width 2","Width 3","Width 4","Width 5", + "Width 6","Xi^2"}; + char *bookmark_P_text[]={"K","Maximum feld H","Amplitude","Xi^2"}; + char *bookmark_information_text[]={"Channels","Null channel","mm/s","Basis(impulses)"}; + + char button_crate_text[]={"Craete"}; + char button_autocolibrovka_text[]={"Auto colibrovka"}; + char button_combine_spectras_text[]={"To combine spectras"}; + + struct ControlButton *ButtonCraete; + struct InfoForButton *InfoButtonCraete; + struct ControlButton *ButtonAutoColibrovka; + struct InfoForButton *InfoButtonAutoColibrovka; + struct ControlButton *ButtonCombineSpectras; + struct InfoForButton *InfoButtonCombineSpectras; + + struct InfoForImage *InfoImage; + struct ControlImage *Image; + struct InfoForText *InfoText; + struct ControlText *Text; + struct InfoForNumber *InfoNumber; + struct ControlNumber *Number; + struct ControlProgressbar *Progressbar1; + struct InfoForProgressbar *InfoProgressbar1; + + struct ControlBookmark1 *Bookmark1; + struct InfoForBookmark1 *InfoBookmark1; + struct ControlBookmark2 *Bookmark2; + struct InfoForBookmark2 *InfoBookmark2; + + dword *ptr,*ptr2; + int skin_height; + int i; + int x,y; + dword textcolor; + + InfoButtonCraete=malloc(sizeof(InfoButtonCraete)); + InfoButtonAutoColibrovka=malloc(sizeof(InfoButtonAutoColibrovka)); + InfoButtonCombineSpectras=malloc(sizeof(InfoButtonCombineSpectras)); + InfoImage=malloc(sizeof(InfoImage)); + InfoText=malloc(sizeof(InfoText)); + InfoNumber=malloc(sizeof(InfoNumber)); + InfoProgressbar1=malloc(sizeof(InfoProgressbar1)); + + InfoBookmark1=malloc(sizeof(InfoBookmark1)); + InfoBookmark2=malloc(sizeof(InfoBookmark2)); + + skin_height=_ksys_get_skin_height(); + + + InfoButtonCraete->type=0x91;//10010001b + InfoButtonCraete->flag=0; + InfoButtonCraete->x=10; + InfoButtonCraete->y=10; + InfoButtonCraete->width=FONT_SIZEX*sizeof(button_crate_text)+10; + InfoButtonCraete->height=20; + InfoButtonCraete->text=(dword)button_crate_text; + InfoButtonCraete->textcolor=0; + InfoButtonCraete->color1=0xaabbcc; + + InfoButtonAutoColibrovka->type=0x91;//10010001b + InfoButtonAutoColibrovka->flag=0; + InfoButtonAutoColibrovka->x=10; + InfoButtonAutoColibrovka->y=30; + InfoButtonAutoColibrovka->width=FONT_SIZEX*sizeof(button_autocolibrovka_text)+10; + InfoButtonAutoColibrovka->height=20; + InfoButtonAutoColibrovka->text=(dword)button_autocolibrovka_text; + InfoButtonAutoColibrovka->textcolor=0; + InfoButtonAutoColibrovka->color1=0xaabbcc; + + InfoButtonCombineSpectras->type=0x91;//10010001b + InfoButtonCombineSpectras->flag=0; + InfoButtonCombineSpectras->x=10; + InfoButtonCombineSpectras->y=10; + InfoButtonCombineSpectras->width=FONT_SIZEX*sizeof(button_combine_spectras_text)+10; + InfoButtonCombineSpectras->height=20; + InfoButtonCombineSpectras->text=(dword)button_combine_spectras_text; + InfoButtonCombineSpectras->textcolor=0; + InfoButtonCombineSpectras->color1=0xaabbcc; + + //prepea text for bookmark SINGLET + textcolor=0xffffff; + x=10; + y=40; + ptr=58+(dword)InfoBookmark1; + ptr2=58+32+(dword)InfoBookmark1; + for(i=0;i<4;i++) + { + InfoText[i].type=0x80; + InfoText[i].flag=0; + InfoText[i].x=x; + InfoText[i].y=y; + InfoText[i].color1=textcolor; + InfoText[i].text=bookmark_singlet_text[i]; + InfoText[i].length=strlen(bookmark_singlet_text[i]); + + InfoNumber[i].type=0x82; + InfoNumber[i].flag=0; + InfoNumber[i].x=x+DISTANCE1; + InfoNumber[i].y=y; + InfoNumber[i].color1=textcolor; + InfoNumber[i].number=-0.1234567; + InfoNumber[i].format=10*65536+7; + + *ptr=(dword)5; + ptr++; + *ptr=(dword)&InfoText[i]; + ptr++; + + *ptr2=(dword)6; + ptr2++; + *ptr2=(dword)&InfoNumber[i]; + ptr2++; + + y=y+12; + } + //prepea text for bookmark DOUBLET + y=40; + ptr=58+64+16+(dword)InfoBookmark1; + ptr2=58+64+16+56+(dword)InfoBookmark1; + for(i=4;i<4+7;i++) + { + InfoText[i].type=0x80; + InfoText[i].flag=0; + InfoText[i].x=x; + InfoText[i].y=y; + InfoText[i].color1=textcolor; + InfoText[i].text=bookmark_doublet_text[i-4]; + InfoText[i].length=strlen(bookmark_doublet_text[i-4]); + + InfoNumber[i].type=0x82; + InfoNumber[i].flag=0; + InfoNumber[i].x=x+DISTANCE1; + InfoNumber[i].y=y; + InfoNumber[i].color1=textcolor; + InfoNumber[i].number=-0.1234567; + InfoNumber[i].format=10*65536+7; + + *ptr=(dword)5; + ptr++; + *ptr=(dword)&InfoText[i]; + ptr++; + + *ptr2=(dword)6; + ptr2++; + *ptr2=(dword)&InfoNumber[i]; + ptr2++; + y=y+12; + } + //prepea text for bookmark SIXTET + y=40; + ptr=58+64+16+112+16+(dword)InfoBookmark1; + ptr2=58+64+16+112+16+128+(dword)InfoBookmark1; + for(i=4+7;i<4+7+16;i++) + { + InfoText[i].type=0x80; + InfoText[i].flag=0; + InfoText[i].x=x; + InfoText[i].y=y; + InfoText[i].color1=textcolor; + InfoText[i].text=bookmark_sixtet_text[i-(4+7)]; + InfoText[i].length=strlen(bookmark_sixtet_text[i-(4+7)]); + + InfoNumber[i].type=0x82; + InfoNumber[i].flag=0; + InfoNumber[i].x=x+DISTANCE1; + InfoNumber[i].y=y; + InfoNumber[i].color1=textcolor; + InfoNumber[i].number=-0.1234567; + InfoNumber[i].format=10*65536+7; + + *ptr=(dword)5; + ptr++; + *ptr=(dword)&InfoText[i]; + ptr++; + + *ptr2=(dword)6; + ptr2++; + *ptr2=(dword)&InfoNumber[i]; + ptr2++; + y=y+12; + } + //prepea text for bookmark P(H) + y=40; + ptr=58+64+16+112+16+256+16+(dword)InfoBookmark1; + ptr2=58+64+16+112+16+256+16+32+(dword)InfoBookmark1; + for(i=4+7+16;i<4+7+16+4;i++) + { + InfoText[i].type=0x80; + InfoText[i].flag=0; + InfoText[i].x=x; + InfoText[i].y=y; + InfoText[i].color1=textcolor; + InfoText[i].text=bookmark_P_text[i-(4+7+16)]; + InfoText[i].length=strlen(bookmark_P_text[i-(4+7+16)]); + + InfoNumber[i].type=0x82; + InfoNumber[i].flag=0; + InfoNumber[i].x=x+DISTANCE1; + InfoNumber[i].y=y; + InfoNumber[i].color1=textcolor; + InfoNumber[i].number=-0.1234567; + InfoNumber[i].format=10*65536+7; + + *ptr=(dword)5; + ptr++; + *ptr=(dword)&InfoText[i]; + ptr++; + + *ptr2=(dword)6; + ptr2++; + *ptr2=(dword)&InfoNumber[i]; + ptr2++; + y=y+12; + } + + //prepea text for bookmark INFORMATION + textcolor=0xffffff; + x=10; + y=40; + ptr=78+(dword)InfoBookmark2; + ptr2=78+32+(dword)InfoBookmark2; + for(i=4+7+16+4;i<4+7+16+4+4;i++) + { + InfoText[i].type=0x80; + InfoText[i].flag=0; + InfoText[i].x=x; + InfoText[i].y=y; + InfoText[i].color1=textcolor; + InfoText[i].text=bookmark_information_text[i-(4+7+16+4)]; + InfoText[i].length=strlen(bookmark_information_text[i-(4+7+16+4)]); + + InfoNumber[i].type=0x82; + InfoNumber[i].flag=0; + InfoNumber[i].x=x+DISTANCE1; + InfoNumber[i].y=y; + InfoNumber[i].color1=textcolor; + InfoNumber[i].number=-0.1234567; + InfoNumber[i].format=10*65536+7; + + *ptr=(dword)5; + ptr++; + *ptr=(dword)&InfoText[i]; + ptr++; + + *ptr2=(dword)6; + ptr2++; + *ptr2=(dword)&InfoNumber[i]; + ptr2++; + + y=y+12; + } + + //-------------------Init bookmark 1-------------------------------- + InfoBookmark1->type=0x81; //10000001b + InfoBookmark1->x=BOOKMARK1_POSX; + InfoBookmark1->y=BOOKMARK1_POSY; + InfoBookmark1->sizex=BOOKMARK1_SIZEX; + InfoBookmark1->sizey=win->sizey-InfoBookmark1->y-skin_height-5; + InfoBookmark1->color1=0xaabbcc; + InfoBookmark1->color2=0xffffff; + InfoBookmark1->number_lines_bookmarks=2; + InfoBookmark1->number_lines_bookmarks_in_1=3; + InfoBookmark1->number_lines_bookmarks_in_2=2; + + //bookmark singlet + InfoBookmark1->text_for_1=(dword)names_of_bookmarks1[0]; + InfoBookmark1->number_controls_1=1+4+4; + InfoBookmark1->type_control_10=1; + InfoBookmark1->info_for_10_control=(dword)InfoButtonCraete; + + //bookmark doublet + InfoBookmark1->text_for_2=(dword)names_of_bookmarks1[1]; + InfoBookmark1->number_controls_2=1+7+7; + InfoBookmark1->type_control_20=1; + InfoBookmark1->info_for_20_control=(dword)InfoButtonCraete; + + //bookmark sixtet + InfoBookmark1->text_for_3=(dword)names_of_bookmarks1[2]; + InfoBookmark1->number_controls_3=1+16+16; + InfoBookmark1->type_control_30=1; + InfoBookmark1->info_for_30_control=(dword)InfoButtonCraete; + + //bookmark P(H) + InfoBookmark1->text_for_4=(dword)names_of_bookmarks1[3]; + InfoBookmark1->number_controls_4=1+4+4; + InfoBookmark1->type_control_40=1; + InfoBookmark1->info_for_40_control=(dword)InfoButtonCraete; + + //bookmark OTHER + InfoBookmark1->text_for_5=(dword)names_of_bookmarks1[4]; + InfoBookmark1->number_controls_5=1; + InfoBookmark1->type_control_50=1; + InfoBookmark1->info_for_50_control=(dword)InfoButtonCombineSpectras; + + //-----------------------Init bookmark 2-------------------------------- + InfoBookmark2->type=0x81; //10000001b + InfoBookmark2->x=BOOKMARK2_POSX; + InfoBookmark2->y=BOOKMARK2_POSY; + InfoBookmark2->sizex=win->sizex-InfoBookmark2->x-10; + InfoBookmark2->sizey=win->sizey-InfoBookmark2->y-skin_height-5; + InfoBookmark2->color1=0xaabbcc; + InfoBookmark2->color2=0xffffff; + InfoBookmark2->number_lines_bookmarks=1; + InfoBookmark2->number_lines_bookmarks_in_1=2; + + //bookmark SPECTRA + InfoBookmark2->text_for_1=(dword)names_of_bookmarks2[0]; + InfoBookmark2->number_controls_1=2; + InfoBookmark2->type_control_10=4; + InfoBookmark2->info_for_10_control=(dword)InfoImage; + InfoBookmark2->type_control_11=9; + InfoBookmark2->info_for_11_control=(dword)InfoProgressbar1; + + //bookmark INFORMATION + InfoBookmark2->text_for_2=(dword)names_of_bookmarks2[1]; + InfoBookmark2->number_controls_2=1+4+4; + InfoBookmark2->type_control_20=1; + InfoBookmark2->info_for_20_control=(dword)InfoButtonCraete; + + InfoImage->type=0x80;//10000000b + InfoImage->flag=0; + InfoImage->x=10; + InfoImage->y=10; + InfoImage->sizex=InfoBookmark2->sizex-20; + InfoImage->sizey=InfoBookmark2->sizey-44-16; + InfoImage->pointer=(dword)malloc(SCREEN_SIZEX*SCREEN_SIZEY*3); + + InfoProgressbar1->type=0x81;//10000001b; + InfoProgressbar1->flag=0; + InfoProgressbar1->color1=0xffffff; + InfoProgressbar1->color2=0xff0000; + InfoProgressbar1->x=10; + InfoProgressbar1->y=InfoBookmark2->sizey-16-26; + InfoProgressbar1->sizex=InfoBookmark2->sizex-20; + InfoProgressbar1->sizey=16; + InfoProgressbar1->progress=0.1; + InfoProgressbar1->color3=0xaabbcc; + + Bookmark1=CraeteBookmark(Parend,InfoBookmark1); + Bookmark2=CraeteBookmark(Parend,InfoBookmark2); + + ButtonAutoColibrovka=CraeteButton(Parend,InfoButtonAutoColibrovka); + + controls[0]=(dword)Bookmark1; + controls[1]=(dword)Bookmark2; + controls[2]=(dword)ButtonAutoColibrovka; + controls[3]=(dword)InfoImage->pointer; + + //copy child controls of bookmark1 to the array + //It's proved simple way for acces to the child controls of bookmark1. + ptr2=44+58+32+4+(dword)Bookmark1; + for(i=CONTROLS_NUMBER_POS;iposx=WINDOW_POSX; + win->posy=WINDOW_POSY; + win->sizex=WINDOW_SIZEX; + win->sizey=WINDOW_SIZEY; + + draw_window(win); + + controls=malloc(TOTAL_NUMBERS_OF_CONTROLS*100); + Parend=(struct HEADER *)malloc(ParendSize); + Message=(struct MESSAGE *)malloc(MessageSize); + ProcessInformation=malloc(sizeof(ProcessInformation)); + + CraeteInterface(controls,Parend,win); + + Message->type=1; + Message->arg1=0; + Message->arg2=0; + Message->arg3=0; + + SendMessage(Parend,Message); + + exit_status=0; + while(exit_status!=1) + { + switch(_ksys_wait_for_event(2)) + { + case 1: + { + _ksys_get_process_table(ProcessInformation,-1); + win->sizex=ProcessInformation->winx_size; + win->sizey=ProcessInformation->winy_size; + + draw_window(win); + skin_height=_ksys_get_skin_height(); + Bookmark1=controls[0]; + Bookmark2=controls[1]; + new_sizex1=Bookmark1->sizex; + new_sizey1=win->sizey-Bookmark1->y-skin_height-5; + new_sizex2=win->sizex-Bookmark2->x-10; + new_sizey2=win->sizey-Bookmark2->y-skin_height-5; + Image=Bookmark2->info_for_10_control; + new_sizex3=new_sizex2-20; + new_sizey3=new_sizey2-44-16; + Progressbar1=Bookmark2->info_for_11_control; + new_sizex4=new_sizex2-20; + new_sizey4=16; + new_x=Bookmark2->x+10; + new_y=Bookmark2->y+new_sizey2; + RemoveComponent(Progressbar1,new_x,new_y); + ResizeComponent(Bookmark1,new_sizex1,new_sizey1); + ResizeComponent(Image,new_sizex3,new_sizey3); + ResizeComponent(Progressbar1,new_sizex4,new_sizey4); + ResizeComponent(Bookmark2,new_sizex2,new_sizey2); + Message->type=1; + SendMessage(Parend,Message); + break; + } + + case 2: + { + exit_status=1; + break; + } + + case 3: { + if (_ksys_get_button_id()==1) {exit_status=1;} + break; + } + + case 6: + { + mouse_buttons=_ksys_GetMouseButtonsState(); + x=_ksys_GetMouseXY(); + y=x & 0xffff; + x=x >> 16; + Message->type=6; + Message->arg1=x; + Message->arg2=y; + Message->arg3=mouse_buttons; + SendMessage(Parend,Message); + + break; + } + + default: break; + + } + } +} diff --git a/programs/develop/libGUI/examples/C example/kolibri.ld b/programs/develop/libGUI/examples/C example/kolibri.ld new file mode 100644 index 0000000000..398e8ceda3 --- /dev/null +++ b/programs/develop/libGUI/examples/C example/kolibri.ld @@ -0,0 +1,18 @@ +/*OUTPUT_FORMAT("binary")*/ +ENTRY("start_") +SECTIONS +{ + .text 0x000000: + { + *(.text) + } + + .data : { + *(.data) + } + + .bss : + { + *(.bss) + } +} diff --git a/programs/develop/libGUI/examples/C example/makefile2 b/programs/develop/libGUI/examples/C example/makefile2 new file mode 100644 index 0000000000..bf487f5cee --- /dev/null +++ b/programs/develop/libGUI/examples/C example/makefile2 @@ -0,0 +1,22 @@ +OUTFILE = interface.kex +INPUT = interface.c +OUTPUT = interface.o +OBJS = start.o interface.o + + +.SUFFIXES: .asm .o + +$(OUTFILE) : $(OBJS) + fasm start.asm start.o + gcc -c $(INPUT) -nostdinc -I/home/andrew/kolibri/develop/include/ + ld -nostdlib -T kolibri.ld -n -L/home/andrew/kolibri/develop/lib/ -o $(OUTFILE) $(OBJS) -lck -lm + objcopy $(OUTFILE) -O binary + +.asm.o: + fasm $*.asm + +.c.o: + gcc -c $*.c + +clean : + del *.o diff --git a/programs/develop/libGUI/examples/C example/start.asm b/programs/develop/libGUI/examples/C example/start.asm new file mode 100644 index 0000000000..3b78611e6f --- /dev/null +++ b/programs/develop/libGUI/examples/C example/start.asm @@ -0,0 +1,136 @@ +format MS COFF +section '.text' executable +public start_ +;extrn mf_init +extrn main +;include 'debug2.inc' +__DEBUG__=0 + +start_: +;virtual at 0 + db 'MENUET01' ; 1. Magic number (8 bytes) + dd 0x01 ; 2. Version of executable file + dd start ; 3. Start address + dd 0x0 ; 4. Size of image + dd 0x100000 ; 5. Size of needed memory + dd 0x100000 ; 6. Pointer to stack +hparams dd 0x0 ; 7. Pointer to program arguments +hpath dd 0x0 ; 8. Pointer to program path +;end virtual + +start: +;DEBUGF 'Start programm\n' + ;init heap of memory + mov eax,68 + mov ebx,11 + int 0x40 + +;DEBUGF ' path "%s"\n params "%s"\n', .path, .params +; check for overflow + mov al, [path+buf_len-1] + or al, [params+buf_len-1] + jnz .crash +; check if path written by OS + mov eax, [hparams] + test eax, eax + jz .without_path + mov eax, path +.without_path: + mov esi, eax + call push_param +; retrieving parameters + mov esi, params + xor edx, edx ; dl - шфИђ яр№рьхђ№(1) шыш №рчфхышђхыш(0) + ; dh - ёшьтюы ё ъюђю№юую эрїрыёџ яр№рьхђ№ (1 ъртћїъш, 0 юёђрыќэюх) + mov ecx, 1 ; cl = 1 + ; ch = 0 я№юёђю эюыќ +.parse: + lodsb + test al, al + jz .run + test dl, dl + jnz .findendparam + ;{хёыш сћы №рчфхышђхыќ + cmp al, ' ' + jz .parse ;чру№ѓцхэ я№юсхы, у№ѓчшь ёыхфѓўљшщ ёшьтюы + mov dl, cl ;эрїшэрхђёџ яр№рьхђ№ + cmp al, '"' + jz @f ;чру№ѓцхэћ ъртћїъш + mov dh, ch ;яр№рьхђ№ схч ъртћїхъ + dec esi + call push_param + inc esi + jmp .parse + + @@: + mov dh, cl ;яр№рьхђ№ т ъртћїхърѕ + call push_param ;хёыш эх я№юсхы чэрїшђ эрїшэрхђёџ ъръющ ђю яр№рьхђ№ + jmp .parse ;хёыш сћы №рчфхышђхыќ} + +.findendparam: + test dh, dh + jz @f ; схч ъртћїхъ + cmp al, '"' + jz .clear + jmp .parse + @@: + cmp al, ' ' + jnz .parse + +.clear: + lea ebx, [esi - 1] + mov [ebx], ch + mov dl, ch + jmp .parse + +.run: +;DEBUGF 'call main(%x, %x) with params:\n', [argc], argv +if __DEBUG__ = 1 + mov ecx, [argc] + @@: + lea esi, [ecx * 4 + argv-4] + DEBUGF '0x%x) "%s"\n', cx, [esi] + loop @b +end if + push [argc] + push argv + call main +.exit: +;DEBUGF 'Exit from prog\n'; + xor eax,eax + dec eax + int 0x40 + dd -1 +.crash: +;DEBUGF 'E:buffer overflowed\n' + jmp .exit +;============================ +push_param: +;============================ +;parameters +; esi - pointer +;description +; procedure increase argc +; and add pointer to array argv +; procedure changes ebx + mov ebx, [argc] + cmp ebx, max_parameters + jae .dont_add + mov [argv+4*ebx], esi + inc [argc] +.dont_add: + ret +;============================== +public params as '__argv' +public path as '__path' + +section '.bss' +buf_len = 0x400 +max_parameters=0x20 +argc rd 1 +argv rd max_parameters +path rb buf_len +params rb buf_len + +;section '.data' +;include_debug_strings ; ALWAYS present in data section \ No newline at end of file diff --git a/programs/develop/libGUI/examples/bookmarks/GETPROC.ASM b/programs/develop/libGUI/examples/bookmarks/GETPROC.ASM new file mode 100644 index 0000000000..25853abdf3 --- /dev/null +++ b/programs/develop/libGUI/examples/bookmarks/GETPROC.ASM @@ -0,0 +1,47 @@ + +_ksys_cofflib_getproc: + + mov ebx,[esp+4] + + next_name_check: + + mov ecx,[ebx] + test ecx,ecx + jz end_export + + ;cmp export string with name + mov esi,[esp+8] + xor edi,edi + next_simbol_check: + + xor eax,eax + mov al,[ecx] + test al,al + jz exit_check_simbol + + xor edx,edx + mov dl,[esi] + cmp al,dl + je simbols_equvalent + add edi,1 + jmp exit_check_simbol + simbols_equvalent: + + add ecx,1 + add esi,1 + jmp next_simbol_check + exit_check_simbol: + + test edi,edi + jnz function_not_finded + mov eax,[ebx+4] + jmp end_export + function_not_finded: + + add ebx,8 + + jmp next_name_check + + end_export: + + ret 8 diff --git a/programs/develop/libGUI/examples/bookmarks/bookmark.asm b/programs/develop/libGUI/examples/bookmarks/bookmark.asm new file mode 100644 index 0000000000..3d1c0dc093 --- /dev/null +++ b/programs/develop/libGUI/examples/bookmarks/bookmark.asm @@ -0,0 +1,800 @@ +; +; +; This is example using GUI component Bookmark from libGUI. +; +; + +include 'macros.inc' +use32 + db 'MENUET01' + dd 1 + dd start + dd i_end + dd 126*1024 + dd 126*1024 + dd 0 + dd path + +start: + ;init hepe of memory + mcall 68,11 + + ;set current dir as ./ + call GetPath + + ;load dll + mcall 68,19,path + + test eax,eax + jnz libGUI_loaded + + mcall 68,19,sys_libGUI_path + + test eax,eax + jnz libGUI_loaded + + mcall -1 + + libGUI_loaded: + + mov [myexport],eax + + ;load dll functions + + push fnDestroyControl + push [myexport] + call _ksys_cofflib_getproc + mov [destroy_control],eax + + push fnSendMessage + push [myexport] + call _ksys_cofflib_getproc + mov [send_message],eax + + push fnResizeComponent + push [myexport] + call _ksys_cofflib_getproc + mov [resize_component],eax + + push fnRemoveComponent + push [myexport] + call _ksys_cofflib_getproc + mov [remove_component],eax + + push fnCraeteButton + push [myexport] + call _ksys_cofflib_getproc + mov [craete_button],eax + + push fnCraeteScroller + push [myexport] + call _ksys_cofflib_getproc + mov [craete_scroller],eax + + push fnCraeteBookmark + push [myexport] + call _ksys_cofflib_getproc + mov [craete_bookmark],eax + + push fnCraeteImage + push [myexport] + call _ksys_cofflib_getproc + mov [craete_image],eax + + push fnCraeteText + push [myexport] + call _ksys_cofflib_getproc + mov [craete_text],eax + + push fnCraeteNumber + push [myexport] + call _ksys_cofflib_getproc + mov [craete_number],eax + + push fnCraeteCheckbox + push [myexport] + call _ksys_cofflib_getproc + mov [craete_check_box],eax + + push fnCraeteEditbox + push [myexport] + call _ksys_cofflib_getproc + mov [craete_edit_box],eax + + ;set events mask + mcall 40,1100111b + + ;get standart colors table + mcall 48,3,ColorsTable,40 + + ;********************************************* + ;****************Init Butttons**************** + ;********************************************* + + mov ecx,[ColorsTable+8] + and ecx,0xffffff + + mov [Button1.type],byte 10010001b + mov [Button1.x],120 + mov [Button1.y],120 + mov [Button1.width],word 70 + mov [Button1.height],word 20 + mov [Button1.color1],dword ecx + mov [Button1.color2],dword 0xffffff + mov [Button1.text],text1 + + + + mov [Button3.type],byte 10010001b + mov [Button3.x],165 + mov [Button3.y],320 + mov [Button3.width],word 70 + mov [Button3.height],word 20 + mov [Button3.color1],dword ecx + mov [Button3.color2],dword 0xffffff + mov [Button3.text],text3 + + + push Button3 + push Parend + call [craete_button] + mov [PointerToControlForButtonExit],eax + + mov ecx,[ColorsTable+8] + and ecx,0xffffff + + ;******************************************** + ;***************Init scrollers**************** + ;******************************************** + + ;init vertical scroller + mov ecx,[ColorsTable+8] + mov [VerticalScroller.type],byte 11110001b + mov [VerticalScroller.x],150 + mov [VerticalScroller.y],10 + mov [VerticalScroller.pos],0.2 + mov [VerticalScroller.length],200 + mov [VerticalScroller.size],0.3 + mov [VerticalScroller.color1],ecx + + ;******************************************** + ;******************Init Image**************** + ;******************************************** + + mov [Image.type],byte 10000000b + mov [Image.x],30 + mov [Image.y],10 + mov [Image.sizex],200 + mov [Image.sizey],200 + mov [Image.pointer],Picture + + ;******************************************** + ;******************Init Text***************** + ;******************************************** + + mov [Text.type],byte 10000000b + mov [Text.color],0xffffff + mov [Text.x],100 + mov [Text.y],100 + mov [Text.length],25 + mov [Text.pointer],text_for_text + + ;******************************************** + ;*****************Init Number**************** + ;******************************************** + + mov [Number.type],byte 10000010b + mov [Number.color],0xffffff + mov [Number.x],150 + mov [Number.y],100 + mov [Number.parameters],5*65536+4 + mov [Number.number],-1234.5678 + + ;******************************************** + ;***************Init CheckBox**************** + ;******************************************** + + mov ecx,[ColorsTable+8] + and ecx,0xffffff + + ;mov [CheckBox.ch_flags],word 10b + mov [CheckBox.ch_left],150 + mov [CheckBox.ch_top],330 + mov [CheckBox.ch_text_margin],4 + mov [CheckBox.ch_size],11 + mov [CheckBox.ch_color],0xffffff + mov [CheckBox.ch_border_color],ecx + mov [CheckBox.ch_text_color],0 + mov [CheckBox.ch_text_ptr],check_box_text + mov [CheckBox.ch_text_length],9 + + ;******************************************** + ;***************Init EditBox***************** + ;******************************************** + + mov ecx,[ColorsTable+8] + mov [EditBox.ed_flags],0b;1000000000000000b + mov [EditBox.ed_left],100 ;x + mov [EditBox.ed_top],100 ;y + mov [EditBox.ed_width],150 + mov [EditBox.ed_height],14 + mov [EditBox.ed_max],100 + mov [EditBox.ed_text],buffer_for_text + mov [EditBox.ed_color],dword 0xffffff + mov [EditBox.shift_color],dword 0xaabbcc + mov [EditBox.ed_focus_border_color],0 + mov [EditBox.ed_blur_border_color],ecx + mov [EditBox.ed_text_color],0 + + + + ;******************************************** + ;***************Init bookmark**************** + ;******************************************** + + + ;init bookmark + mov ecx,[ColorsTable+8] + mov [Bookmark.type],byte 10000001b + mov [Bookmark.x],10 + mov [Bookmark.y],10 + mov [Bookmark.sizex],350 + mov [Bookmark.sizey],270 + mov [Bookmark.color_1],dword ecx + mov [Bookmark.color2],dword 0xffffff + + mov [Bookmark.number_bookmarks],3 + mov [Bookmark.number_zak_in_1],2 + mov [Bookmark.number_zak_in_2],3 + mov [Bookmark.number_zak_in_3],1 + + mov [Bookmark.text_for_1],text4 + mov [Bookmark.number_contrl_1],1 + mov [Bookmark.type_control_1],1 + mov [Bookmark.info_1_control],dword Button1 + + mov [Bookmark.text_for_2],text5 + mov [Bookmark.number_contrl_2],1 + mov [Bookmark.type_control_2],6 + mov [Bookmark.info_2_control],dword Number + + mov [Bookmark.text_for_3],text6 + mov [Bookmark.number_contrl_3],1 + mov [Bookmark.type_control_3],8 + mov [Bookmark.info_3_control],dword EditBox + + mov [Bookmark.text_for_4],text7 + mov [Bookmark.number_contrl_4],1 + mov [Bookmark.type_control_4],4 + mov [Bookmark.info_4_control],dword Image + + mov [Bookmark.text_for_5],text8 + mov [Bookmark.number_contrl_5],1 + mov [Bookmark.type_control_5],2 + mov [Bookmark.info_5_control],dword VerticalScroller + + mov [Bookmark.text_for_6],text9 + mov [Bookmark.number_contrl_6],1 + mov [Bookmark.type_control_6],5 + mov [Bookmark.info_6_control],dword Text + + + push Bookmark + push Parend + call [craete_bookmark] + mov [PointerToControlForBookmark],eax + + call draw_window + + ;***************************************************** + ;**********Example of resize component**************** + ;***************************************************** + mov ebx,[PointerToControlForButtonExit] + push 30;270 + push 150;250 + push ebx + call [resize_component] + + ;***************************************************** + ;**********Example of remove component**************** + ;***************************************************** + mov ebx,[PointerToControlForButtonExit] + push 340;270 + push 120;250 + push ebx + call [remove_component] + + ;send message 1 for redrawing ALL controls + mov [Message],dword 1 + + push Message + push Parend + call [send_message] + + +still: + mcall 10 + + ;check for redraw window + cmp eax,1 + jne no_window + + call draw_window + + mov eax,[PointerToControlForBookmark] + mov ebx,[Window_SizeX] + mov ecx,[Window_SizeY] + sub ebx,50 + sub ecx,130 + ;or [eax+44],byte 1000000b + mov [eax+32],ebx + mov [eax+36],ecx + + mov [Message],dword 1 + push Message + push Parend + call [send_message] + + jmp still + no_window: + + ;check for keys events + cmp eax,2 + jne no_keys + + mcall 2 + shr eax,8 + + mov [Message],dword 2 + mov [Message+4],eax + + push Message + push Parend + call [send_message] + + mov eax,[Message+4] + + cmp al,27 + je exit + + jmp still + no_keys: + + ;check for pressed butons + cmp eax,3 + jne no_buttons + + mcall 17 + shr eax,8 + + jmp still + no_buttons: + + ;check for mouse events + cmp eax,6 + jne no_mouse + + mov [Message],dword 6 + + mcall 37,1 + mov ebx,eax + shr eax,16 ;x + and ebx,0xffff ;y + + mov [Message+4],eax + mov [Message+8],ebx + + mcall 37,2 + mov [Message+12],eax + + ;send system events to control + push Message + push Parend + call [send_message] + + mov eax,[PointerToControlForButtonExit] + + xor ebx,ebx + mov bl,byte[eax+45] + cmp bl,11b + jne no_crossing_pressing_button + + mov [button_pressed],1 + + no_crossing_pressing_button: + + xor ebx,ebx + mov bl,byte[eax+45] + cmp bl,1b + jne no_crossing_button + + cmp [button_pressed],1 + jne no_crossing_button + + jmp exit + + no_crossing_button: + + jmp still + no_mouse: + + jmp still + +exit: + + push [PointerToControlForButtonExit] + call [destroy_control] + + push [PointerToControlForBookmark] + call [destroy_control] + + mcall -1 + + + +;********************************************** +;*******************Draw window**************** +;********************************************** + +draw_window: + mcall 9,IPC_table,-1 + mcall 12,1 + + mov eax,[IPC_table+34] + mov ebx,[IPC_table+38] + mov ecx,[IPC_table+42] + mov edx,[IPC_table+46] + mov [Window_CordinatX],eax + mov [Window_CordinatY],ebx + mov [Window_SizeX],ecx + mov [Window_SizeY],edx + + cmp [Window_SizeX],400 + jae no_minimum_size_x + + mov [Window_SizeX],400 + mov ecx,[Window_SizeX] + + no_minimum_size_x: + + cmp [Window_SizeY],400 + jae no_minimum_size_y + + mov [Window_SizeY],400 + mov edx,[Window_SizeY] + + no_minimum_size_y: + + xor eax,eax + mov ebx,[Window_CordinatX] + mov ecx,[Window_CordinatY] + shl ebx,16 + shl ecx,16 + add ebx,[Window_SizeX] + add ecx,[Window_SizeY] + mov edx,0x03aabbcc + mov esi,0x805080d0 + mov edi,0x005080d0 + mcall + + ;call print_controls_information + + mcall 12,2 + ret + + +GetPath: + + mov ebx,255 + mov ecx,path + + next_symvol: + mov edx,ecx + add edx,ebx + + xor eax,eax + mov al,[edx] + cmp eax,'/' + je exit_path + + dec ebx + jnz next_symvol + + exit_path: + + inc edx + mov esi,dll_name + mov edi,edx + mov ecx,10 + rep movsb + + ret + + +include 'getproc.asm' + +;************************************************************ +;***************************DATA***************************** +;************************************************************ + +align 4 + +dll_name db 'libGUI.obj',0 +sys_libGUI_path db '/sys/lib/libGUI.obj',0 + +check_box_text db 'Check box',0 + +text1 db 'text',0 +text3 db 'Exit',0 + +text4 db 'Bookmark_1',0 +text5 db 'Bookmark_2',0 +text6 db 'Bookmark_3',0 +text7 db 'Bookmark_4',0 + +text8 db 'Bookmark_5',0 +text9 db 'Bookmark_6',0 + +text_for_text db 'Hello world from bookmark',0 + +fnDestroyControl db 'DestroyControl',0 +fnSendMessage db 'SendMessage',0 +fnResizeComponent db 'ResizeComponent',0 +fnRemoveComponent db 'RemoveComponent',0 +fnCraeteButton db 'CraeteButton',0 +fnCraeteScroller db 'CraeteScroller',0 +fnCraeteBookmark db 'CraeteBookmark',0 +fnCraeteImage db 'CraeteImage',0 +fnCraeteText db 'CraeteText',0 +fnCraeteNumber db 'CraeteNumber',0 +fnCraeteCheckbox db 'CraeteCheckbox',0 +fnCraeteEditbox db 'CraeteEditbox',0 +fnCraeteProgressbar db 'CraeteProgressbar',0 + +myexport dd 0 + +destroy_control dd 0 +send_message dd 0 +resize_component dd 0 +remove_component dd 0 +craete_button dd 0 +craete_scroller dd 0 +craete_bookmark dd 0 +craete_image dd 0 +craete_text dd 0 +craete_number dd 0 +craete_check_box dd 0 +craete_edit_box dd 0 +craete_progres_bar dd 0 + +PointerToControlForButton1 dd 0 +PointerToControlForButtonExit dd 0 + +PointerToControlForHorizontalScroller dd 0 +PointerToControlForVerticalScroller dd 0 + +PointerToControlForBookmark dd 0 + +PointerToControlForImage dd 0 + +PointerToControlForText dd 0 + +PointerToControlForCheckBox dd 0 + +PointerToControlForEditBox dd 0 + + +Window_CordinatX dd 0 +Window_CordinatY dd 0 + +Window_SizeX dd 0 +Window_SizeY dd 0 + +button_pressed dd 0 + +IPC_table rd 256 +path rb 256 + +Parend: dd 0,0,0,0,0,0,0,0,0,0,0,0 ;44 bytes +Message rd 4 + +ColorsTable rd 10 +buffer_for_text rb 100+2 + +struc BUTTON +{ + .type db 1 + .flag db 1 + .x dw 1 + .y dw 1 + .width dw 1 + .height dw 1 + .image dd 1 + .imageX dw 1 + .imageY dw 1 + .imageSizeX dw 1 + .imageSizeY dw 1 + .transparentColor dd 1 + .text dd 1 + .textX dw 1 + .textY dw 1 + .textcolor dd 1 + .color1 dd 1 + .color2 dd 1 + .mouseX dw 1 + .mouseY dw 1 +} + +struc SCROLLER +{ + .type rb 1 + .x rw 1 + .y rw 1 + .length rw 1 + .color1 rd 1 + .size rd 1 + .pos rd 1 + .buttons_flags rw 1 + .ChildButton1 rd 1 + .ChildButton2 rd 1 + .mouseX rw 1 + .mouseY rw 1 +} + +struc BOOKMARK +{ + .type rb 1 + .flag rb 1 + .x rd 1 + .y rd 1 + .sizex rd 1 + .sizey rd 1 + .color_1 rd 1 + .reserved rd 1 + .color2 rd 1 + + .number_bookmarks rd 1 + .number_zak_in_1 rd 1 + .number_zak_in_2 rd 1 + .number_zak_in_3 rd 1 + + .text_for_1 rd 1 + .number_contrl_1 rd 1 + .type_control_1 rd 1 + .info_1_control rd 1 + + .text_for_2 rd 1 + .number_contrl_2 rd 1 + .type_control_2 rd 1 + .info_2_control rd 1 + + .text_for_3 rd 1 + .number_contrl_3 rd 1 + .type_control_3 rd 1 + .info_3_control rd 1 + + .text_for_4 rd 1 + .number_contrl_4 rd 1 + .type_control_4 rd 1 + .info_4_control rd 1 + + .text_for_5 rd 1 + .number_contrl_5 rd 1 + .type_control_5 rd 1 + .info_5_control rd 1 + + .text_for_6 rd 1 + .number_contrl_6 rd 1 + .type_control_6 rd 1 + .info_6_control rd 1 + +} + +struc IMAGE +{ + .type rb 1 + .flag rb 1 + .color rd 1 + .x rd 1 + .y rd 1 + .sizex rd 1 + .sizey rd 1 + .pointer rd 1 +} + +struc TEXT +{ + .type rb 1 + .flag rb 1 + .color rd 1 + .x rd 1 + .y rd 1 + .length rd 1 + .pointer rd 1 +} + +struc NUMBER +{ + .type rb 1 + .flag rb 1 + .color rd 1 + .x rd 1 + .y rd 1 + .number rd 1 + .parameters rd 1 +} + +struc CHECKBOX +{ + .ch_flags rw 1 + .ch_left rw 1 + .ch_top rw 1 + .ch_text_margin rd 1 + .ch_size rd 1 + .ch_size_2 rw 1 + .ch_size_3 rw 1 + .ch_color rd 1 + .ch_border_color rd 1 + .ch_text_color rd 1 + .ch_text_ptr rd 1 + .ch_text_length rw 1 + .mouseX rd 1 + .mouseY rd 1 +} +struc EDITBOX +{ + .ed_width rd 1 ;? ? + .ed_left rd 1 ; ?? + .ed_top rd 1 ; ?? + .ed_color rd 1 ;??? ? + .shift_color rd 1 ;?????. ?? + .ed_focus_border_color rd 1 ;??? ? + .ed_blur_border_color rd 1 ;?? ? ? + .ed_text_color rd 1 ;???? + .ed_max rd 1 ;- ? ?? ?? ? + .ed_text rd 1 ;??? ?? + .ed_flags rw 1 ;? + .ed_size rd 1 ;- ? + .ed_pos rd 1 ;? ?? + .ed_offset rd 1 ;?? + .cl_curs_x rd 1 ;??? ???? ? + .cl_curs_y rd 1 ;??? ???? ? + .ed_shift_pos rd 1 ; ?? + .ed_shift_pos_old rd 1 ;?? ?? + .ed_height rd 1 + .mouseX rd 1 + .mouseY rd 1 +} + +struc PROGRESSBAR +{ + .type rb 1 + .flag rb 1 + .color1 rd 1 + .color2 rd 1 + .x rd 1 + .y rd 1 + .sizex rd 1 + .sizey rd 1 + .progres rd 1 + .color3 rd 1 +} + +Button1 BUTTON +Button3 BUTTON +VerticalScroller SCROLLER +Bookmark BOOKMARK +Image IMAGE +Text TEXT +Number NUMBER +CheckBox CHECKBOX +EditBox EDITBOX +EditBox2 EDITBOX +ProgressBar PROGRESSBAR + +antibug: rb 2000 + +Picture: +file 'image.raw' + +i_end: diff --git a/programs/develop/libGUI/examples/bookmarks/image.raw b/programs/develop/libGUI/examples/bookmarks/image.raw new file mode 100644 index 0000000000..82b040ca44 --- /dev/null +++ b/programs/develop/libGUI/examples/bookmarks/image.raw @@ -0,0 +1,85 @@ +џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўџџўџџўџџўџџўџџўџџўџџўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўџџ§џџ§џџ§ўўќџџ§џџ§џџћџџ§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўџџ§ўўќ§§ћќќњ§§ћўўќџџћџџ§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўўўќ§§ћќќњќќњ§§ћџџ§џџћџџ§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўџџ§§§ћќќњћћљќќњџџ§џџћџџ§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўџџ§§§ћћћљјјіћћљ§§ћџџћџџ§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўўўќ§љѕєюШОЌ№ѕэ§ќїќџђџ§§§ќўџџўџџџџџџўўўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўўўћќљђ№ыn@:Ј„~њќђћќљ§ќў§ќљўў§ўўўўўўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўўўћќјћљѕ{NPj + Њ•‰ћѕьїїїћћћќќћќќќўўўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўўўќ§љћћїЧЉ­_ dеКІ§јёљћ§њћћ§§§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўўўџџўўўћњћіњјћp8=k X$хкЭї§ђћќњ§§§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўў§ўўћњњійЯЪЃPH8^ €^WёњьњљїќќўўџјўџљџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўўўўўўўўўџџџўўўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўћћјјќіЙЎЈƒC@GИš’ѓљієїјљћїўўљўў§ўўўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўўўўўўўўўўўўўўўўўўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўњћј§њїэюэt\_T"лвФѕњѕњљћў§ћќќњ§§§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўўўўўўћ§ќќ§ќ§ўў§§§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўўўћќќјєљ§А†X/jmC7ёшоњљјќњїќ§љўў§§§§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўўў§џўљћћјћњћќќ§§§ўўўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўўўџџўўўћ§§њэќ§‰@F9O6hЃ€yїіьњћѓњћіќ§њџџўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўўў§џўхшшьяяћ§§ќќќўўўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўўўџџџќќњ§ќћќј§‰HNP,JZK Џœѕњьќ§јќўњќ§ћџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўўўќўў­ЕГЋАЎњњјќќќўўўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўў§њћќБІZ >, +O щтијјєїќљ§§ћ§§§џџџџџџџџџџџџџџџџџџџџџџџџџџџўўўўўўќќ§ЃЎ­‹‰ћљѓћћќ§§џџўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўўўѕ§љэщх\""MZ$]ogB@єъхћїњљћ§њњњўўўџџџџџџџџџџџџџџџџџџџџџџџџўўўўўўћњњЏББ‚ihќћїћћћўўўџўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџў§ўќљњЯГЇx 4O$V9–EГЁœћіїєњќћћћўўўџџџџџџџџџџџџџџџџџџџџџџџџўўўўўў§§ќбЬЭv@Bїієћћњўўўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўў§їџќМЉЉ` 5QI>g ~Eшпжіќїњњњўўўўўўџџџџџџџџџџџџџџџџџџџџџўўўўўў§§ќюыь`нйкћћјџџўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџў§ўћќџзеЬ_4J$v.ns• L“vnїќ№їїї§§§ўўўџџџџџџџџџџџџџџџџџџџџџўўўўўўў§ќъьыW +ЬЦЩњћїџџ§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ§§њяыъ\^+eE+;o.v kœBЭПЛїљєѕў§џќўўўўџџџџџџџџџџџџџџџџџџўўў§§§ћ§§рбЬ/ТЉЉѕјѓ§ћњўўўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџў§§љњіљ€€ZI>@ (yHG s wMMьџъѕѕяћ§јќќќўўўџџџџџџџџџџџџџџџўўў§§§§§§ъни1ЏŽјљѕўў§џўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџў§§јјіњддН$&tX 8 ‡ A†o‘d +ЫЕ­ћњїєјіќќќџџџџџџџџџџџџџџџџџџўўў§§§ќќќоаЮ6Њxyњјѕ§ўќў§ўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўўў§ўљјјїцшбHI=1uD +4<Š IД!K—l?<шху§јћ§§§џџџџџџџџџџџџџџџџџџўўў§§§ќќћЎž2”TVќљїњўќџўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџћ§јћќєНРЂVX%L7 +V $Zƒ hЋjЄŒіљьњњњўўўџџџџџџџџџџџџџџџўўў§§§§§ћД› 9w.0њієјўћџ§ўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџў§§ћћћїдиСIG<=X9F' gЃ{Ђk& чыојљєјќњўўџџџџџџџџџџџџџ§§§§§§њњї­˜›9lчцтќў§ўћ§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўџў§ќќњѓішUZFG!" b:;3Œ + +IЄs ŠŒjgюєъћћљ§ћ§ўўўўўўџџџўўўўўўћћћќ§ћžƒ„HdзЫЪћ§ќћў§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўў§ћќ§љћўєimUMR>=0) +sLO H +|]Єm|йбФѕћѓљљљќќќ§§§џџџџџџ§§§§§§јљњb>AJZЩАГћ§ќљ§ќџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўўќќ§їїљійне85`a 99 + P?„'Utˆ x“ ŠƒMFіў№јћїћћћ§§§џџџџџџўўў§§§јњћT34DUНЁќўќ§њћџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџў§њќѕћќ§зоА€†-X]"&p5~ +PІwІvrнЧОїјђ§§§ўўўўўўўўўџџџћћћіљіK438VЕ‰њ§љ§ќ§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўќќћћіњњќБКw`e78\_ "%%Ut VЏc h ‹CAѓ№чўќћќ§§§ўўўўўўўўќќќїїюD23&YЃksіўќњќћџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўџћљњњљїРЦЏPQ @D!^b !9:ІsR ŠЈm Œ[ ТИЎўњѕћ§§ћўќџџў§§§ћћћмЮС?"Jžemєќўќ§ќўўўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўџў§§ќћљюьѓQP2NS<;54SX9/ GA +“8 +V › ‡ +t: +q?Gљњяїљї§њњ§§ќ§§§љљљЃ…ƒ+.J…=F№№ђ§ќќўўўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўўўќќњќњѕHF CDHO--jn62t0AИf\ KмвЧљњѕџќќћќћџџџќќќoq7Jn#ъчцќћ§ўўўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ§ўџќў§ћ§њњћэёђђ?=%DIQRSV-+ „ HLyD | +I=L’^Zіњёќћљ§ў§ќќќ§§§ƒghK] %эчт§ќџўўўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўџџ§ў§§џќќќљтьЬ”›M\Z[Z5:D=˜L< [e @5lотиїћїќў§ўўўћћћ‰jk3Vm{шцмћћџўўўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўўўўўўќќќ§ћў­Бœ;>Y]WT;<PQ•J% QCP[Ÿugєћјљљїі§їѕўњgk6ophчхпќќ§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўўўўўўў§§геХ=>EH + +)'  +[au}FJea +ŽƒX…P +bP~!ыєьњњљјќј§ќї“hiBx piътпќќњџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ§§њљљјXV8MO=?+& $% __ Š‹ rrOVŽ]9 +.Cq NŸ†|ќљіњњћпЯЫQ%"V{ +WNщрпќќљџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџќћћіїёИВЇDD`g"89(#a`ААzq@Hx0UO\V1&№щп§ћ§ПЎЌ'^vQW%%юьшў§ћџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўўўџџџџџџўќўќ§њќіђql[9: enEE 6:**Z^ +­Ѕ‚„-0?L h[w ЫЏЄљљјЕЅЇhl^{&'ђьч§ќ§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ§џњћјѕєіммЏLK"%Va^a?=9: VWЏД[[_4j] +e `VѓќєЫЙДm\Xhыуоўќўўўўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџў§ўќќћњќјсч†АЕ-RV<:~ ^^hdkhŽ’?E +R= +~R [RwэчнШЎЅi TV Uцоиў§§ўўўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўћ§§љѕј№Ž”GB=@?//1. ++& +VT}€ †`\/3pyijZ(t™Њ…}nLF([JSZ фйгќќќўўўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџћќ§їіјё‹‘WWWLN641.14(/%'CF he FJDL Ž O!Š +ˆ +r;HF[€хпећќ§ўўўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџў§ўќќћћ§љЇ­76CBHKKL ;; +56?? DA +30A;%'\ari +L< žU ‘/3Lb˜спвћ§ўўўўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўџ§§ўїјјьюхsqR   AAkjˆŒˆ‰ sv8:4.hmRa ЌЅ‡+ŒIKUЌ"%сузљќћќў§џўџџўџќўџџўўџўўџ§џќџџўџўџў§џџўџўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ§§§ќќќэђихфлqpZ#"  + + +,+EFFD,)! fkNH Є•T ˆ_N>Ё%$шцсњњєћўћ§ќўўўќќќџќўњјўљј§ћћўџћ§ћќўљўџќў§ўџўўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўўў§§§§§ћќќќћјљпхБfn :;,, +60JG\] +dj bj UWb` ‚ЃŽЈIr"KKšьфуўњќљјіѓјѓїћыёяшйХЛхвШьѕщѕєюјћњњњљњћїџўўџўўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўўў§§їќ§љђѕтЎЕ_kg vqw{V[__ TTTX\bLL Y\ šЅ vwЋА Ћ“x@-3GšчспѕјѕјљђњїягОЏ}MMJ`/*…TSМž—щѓьіњјљћѕўўќџџўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ§ќ§ќ§љочЪ^ips}QQ./3222#x}\W ­И› ~u[,Bœ&%ыяцєќяѓънЃ†H 8MRBf‡RLчмзњќѕ§§јџџ§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўўўўўўўўўў§і§§§ёљщ“Ÿ˜! + 1424 +DCee +IKDB ih +ŽЃ˜”•xC>/-ѓњя№юм…aU* +BUbkS… +kП”“њћѕќќїўўћџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ§ўџћћќіћњљцмфЕЖpk9=,*52A=YZ__6=-,ee Ё ЎЎ –• +‘‚N&._(Гv?"Hl„Ір>:Й–ŸŒЎŠєњі§§ќџћњў§ћљџћџџџџџџџџџџџџџџџџџџџџџџџџџџџўўўўўўџџџўџџќџџўџџџџўџџџџџџўўўўўўўўўўўўўўўўџўќџџ§ўўџџџўўўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўўўћћќїњћѕёіхЅПj]cCBILW^SVNQ35$"-&š +ЛИЊЉƒ kW C 2(03 +>@yЄБ™G Е$,{ p-,њљяє§ї§ў§§ќ§ћџўџџџџџџџџџџџџџџџџџџџџџџџџџџџўўўўўўџџџџџўџџ§џўќџ§ћўўўўўўџџџўўјўџљџџљџўћџўќўў§џўўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўў§ќ§љќ§њзхд8c[l \[=;%&%#ttІЄЛИ ›š vvk; PG;?FDcŸ ˜%  #,ˆnЌ…|ьїыїћјќ§§§§џўўўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџў§џўћџ§ћќўўјўџѕћўѕњ§ѕћўіќџїќџќўўџўўџўќџў§ўўўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўўў§§ћњћќєљј?ZI !!*+14!"  GF +ЇЈДВ Ј“‘nX`\\EKLJ^u &jmWуйЭјј№њќњќћўўўўўўўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ§ўўћџўєћџцђњпюљкщікщѕкшћлщќмъќх№ќюі§јќџўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўўќњўќќђђЛОМ(.0 +),BB?B>?+)  +qsГЗТФЌБІЁ„r…> † +vˆioŽƒ g0KSCKFe:5юузњќєќќћўўўўўўџџџџџџџџџџџџџџџџџџџџџџџџџџџўўўіћ§р№ћацїЭшќЪхњЬчќЭш§ЫцњЫцњЫцњЪфњЯфњмыќюѓј§§§ўўўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўўўќќќќћњџљѕѓљѓX{^"OIY ?G%"    @@АЖЧЦНСœšЁЋ‡m~‰ž†ƒsw …| _hTW&H œyqєјёњќњўљќўўћњўџџџџџџџџџџџџ§§џџўўџџ§ќўўўёћџйыћачћЭчќЬчўЭчўЭчўЬчўЬшћЬшћЬшћЭш§Эц§Яцћечњхёўћўўўўќўў§ўўўћџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўўў§§§§ќњ§§љѓљєgum  35'( -*ŸЂ ЭЮ%бг-ЄЄ ДВЏЊЌp  +Е ВЗБЌ ­Ћ~iV=s Пš“њѕяњјћєћї§њљџџџџџџџџџџў§џџџў§ўўўўђј§дцјЯч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Эцўбцњфёљјўџџў§џў§ќџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ§џ§њ§љїљіллпqux 53 *0(' 1, +‹ŠЪЪ"ЫЭ#ЭЮ(ХП ЪЫЧЌХP!Ш+"м,8эA?р=8П ŠŒwlC + :4ЫТГіљяјіјїњѕ§§§ўўўџџџџ§џџ§§џўњѕќўкшіЯцћЫх§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§ЮцќЯхћЯцљфєў§ўўџўњџџўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџћў§ќџ§§§ќџћќцяц/J/ ) *+VV˜™ед0ЬЮ#йл/жи.пр7фу<ьнFєЂKїTIёMUєNHђDEе-0мA=т7:П$&ŠJ3:-“6.аЖŸјњѓѓіљњњњ§§§џџџџ§џџќћћўўкьњахќЭцўЭчўЮч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§ЯчќЭч§ЬчџЮцћёљџџў§џџ§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўўў§ўўћћћњјњѕњћdql 7777 +(+@?˜• +бЮ1фц=эяDчы?№ёKѓіOђўLјпOіLѕFQіQRѓOOєNMѓROь?DО ywOQЎ˜™ЎЁœo>Q/ D‘OFпзШїїєјјј§§§ўўўћўџџўќяїџЮцќЬх§Яц§ЮцќЮч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§ЭшќЫцћЮчўЭцўо№§њ§џџџўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўўўџўўџўўќў§ќ§ћ§§єііщmmh %$ IN +npЎЎвг$ююHђѓJјјOѕіKњќSќјWјљSѓВOѓD@с3Aд46м54Ь*-’KEбЛИћєјјћћњљљќљѓцгжeHSG”UNлбЛїјїњќљў§§њўўњќќкыќЬцќЮц§ацќЯхњЮч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§ЬчќЬчќЯхћЮцќЮцњэї§ўџўџџџџџџџџџџўўџџўџџ§џў§џџџўџџўџџџџџџўџџџўџџ§џџўџџўџў§џџџўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўўўўўўўўўџџџўџўўџ§ћ§њњћћћќљђішЬЭШ558 89bd~€ЊЊ мл2ђёIљјPћњRљјPќћSњњPѕњQрФ?Ч["Ћ– ‹ rSWщйлћњјћњі§ќјјј№њћѓњњќыхюz€UЄcWъыољієїњњљў§ѓј§Яш§ЮхјЭцќЭцќЭцќЮч§Юч§Юч§Юч§Юч§Юч§ЭцќЭцќЭцќЮч§Юч§Юч§Юч§Юч§Юч§Юх§Юц§оюћќџўџџџџџџџџџўўќџўќџўќџў§јћўэѕќщёјъ№ї№іќїћўќў§ўџўџџўў§ћџџџўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўўўўўўўџўўџў§ў§ћќњќ§ћ§џќќўњћ§іћ§іљњњжии +52 rn~~Š‹ЛЛъщ@ѕєLњљQќћSњљQљјPєѓIтф4ЇЈ”…Љ@z&˜ktсак§јџќќћ§ўњџџћўўћџўќќќќќќќњќќ№јіУ dЅueхшоєќјќ§§уыњЭхўЭхћЭцќЭцќЭцќЮч§Юч§Юч§Юч§Юч§Юч§ЬхћЭцќЭцќЮч§Юч§Юч§Юч§Юч§Юч§Юц§Юц§дцїіќўџџџџџџџџџџўў§џџіќўхёќищјахїЯш§ЬшўЫч§Ючњпяћёљ§§џџўўўџџџўўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўўў§§§§ўќќўћћ§њћ§њњћљњќљњ§їћ§їјњјјњљь№э +Q]Œ‹†ƒš› +ЪЫ$єєKјїOћњRћњRћњRљјPфу;ЉІ +ЁЂ‘™…S#бЈВэя№ѕњіјќћѕћіќўћџџ§§§ћ§§ў§ќџўўќ§§њјёїѓєѓЕ’—jЛ›ˆїї№њњћдтїЯхџЬхќЭцќЭцќЭцќЮч§Юч§Юч§Юч§Юч§Юч§ЭцќЭцќЭцќЮч§Юч§Юч§Юч§Юч§Юч§ЮцћЮчќЯфїэі§џџџџџџўўўџўўљўџт№ќацњЪхћЪц§ЬшўЬч§Ьч§Ыч§Ьхћишіђљўќџџўџџџџўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўўўќќќљ§јј§їј§їњ§љјњїњќљњћјќ§ќћќ§іњђxx *Mgoœ™ ФФ чщ?ћћSћњRћњRќћSћњRѓђJзе/ЇЄŒŠŠ‚ДЎ”ќјњѓјїќќѓњћєћўћќў§ўџџўџџўџџўўў§§§§џќјќћіљјќѕљК™}Ч ”ёёъШоєацќЫфњЭцќЭцќЭцќЮч§Юч§Юч§Юч§Юч§Юч§ЯшўЮч§ЭцќЮч§Юч§Юч§Юч§Юч§Юч§ЮцљЭчњЭхќпэќ§§§џџџџџџў§ўчёћЮхњЭшўЭшўЭч§ЯцњахљахљЮцћЯшџбцћкъљіќў§џџџџ§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўўўћћћіњііћѕїќіњ§љїљіљћјіїіќ§ўћќћофж' =azГБии-ѕїLњћSќћSћњRњљQћњRяюFОНžž ™Є›6цумєќѕўњџњћќќ§ў§ў§§ўў§џўўџџ§ў§ўўќџџџњќ§ќќљљјљљјћїєєЇ†(ШЏЄЦріЮфіЬцћЭцќЭцќЭцќЮч§Юч§Юч§Юч§Юч§Юч§бъџЯшўЭцќЮч§Юч§Юч§Юч§Юч§Юч§ЯчњЫцјЭчўйщћќќќџџџџџџњњќнщіЫчўЫц§ЭхњахїЯхњЭцќЮц§ЮцќЯхќЯц§вцњьѕњ§џџџўќџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўўўњўћўќўѕљяЂТ•VoK1 +8?a3œЙецЫђ§ьє§№†Ž… .J{СЭ&я№KўїVљќSљћRњќSњњTііLнп9““‘—“ОК‘њћіјљєќ§јўў§ўўўўўўџџџџџџџџџџџџџџџџџџџџџ§§§§§§§§§јјїњјќptt44ЙгЪЩфяЭфєЩчњЮш§ЯцћЮч§Юч§Юч§Ьц§вцѕєљћўў§сюјЮцќЮч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§ашќєњќўўћќўўђљ§бх§ЯцќЫх§ЯцўахћЪхћЭц§ЮцњЫчќЮч§Юч§Эч§зъќќўўџ§ќџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўўўњќјћќјСаЖ&P  CM:~ˆuтьж#)+qУ%чђOїўTњќSјњQјњQјјQђђGУХœœ œœЃ 7ээеќ§јќ§јўџњўў§ўўўўўўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ§ћћіїњ№туsAD”opПзнаућдтћЮуљЯш§Юч§Юч§Юч§Эч§иъљњ§ўўўўьі§ЯчћЮч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Ячќёљќўўћ§ўўэі§ахўацћЬх§ЯцўахћвчљйыљбхјЮчўЮч§Юч§Юч§дшњњ§џџў§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўўўў§ћјњљHYP 8  +XŒ ЃЅз4љћQ§ќTњќSљћRєєMзз-ДЖƒ‚Ђ ТСѕњі§§ћџџ§џџ§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџў§ўљ§ќёѓђФШеh>EЎБЌХнэЪрѕашњЬцќЮч§Юч§Юч§Юч§мюњќў§џўџіќџЮцљЭч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§ъѕќўўќўџўхёћЮхўацњЭц§Яц§ахћчєћѕќўйчљЯцўЮч§Юч§Юч§ахјїћўџўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўўўўўў§§§§§њљј§7=QO‚›•ZКэѓR§§XљћRјњQѓѓMЪЪ ЏБ —–ЃЂопОјћљќќќўўўўў§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ§§§јќљ№љњЫрјš‘žj4:МвЭЦцёШцњЮч§Юч§Юч§Юч§Яцћпяњќ§ћўўўљћўЮфїЭч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Эч§цѓ§§ўќўџ§рюћЮцџбцљЮцўЯх§бцћ№љќўџўнъњЮцўЮч§Юч§Эч§Яхљѕњўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ§§§ќќќќќќћќњљѕїїєћЖХЮ’›, + Gw˜ЂЅ%Г ”н9юіSњќSіјOфх>ТТЂЄ’’ЂЃOћћїћњіќќќўўўўўўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџњўќљќіѓїќбцїЯољ„o{oNGЧвкЫъќЮцљЮч§Юч§ЮчќЮфјфђќўўќќ§ўћћќЯхјЬч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Ьч§тђ§§ў§ўў§няќЭцўбцјЮц§Юх§бцћђљўўўўоюќЬшўЮч§Юч§Эч§Яцњѕњўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўўўџџџџџџќ§ўљќіў§ћѕњљђ§ыђ§ючяђБЗХcg~) 3l‰™ЅЇЇ.ЏІл;їќQѕіMйм/ЖЗЁЂ›žЧЪЄћќћў§њўўўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџќ§ќћћњѓјћЫрёЭуњОарaAIœš–ЭнјЮцјЪціЩщћЮч§Эхќшђћўџ§ўўўћў§ахїЭч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Эч§с№ќўў§ўў§ою§ЬчќашљЬцќЮцќЯчќ№љџў§ќнэњЧшўЫцўЫцўЬчўЭхњѓњџџўўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџќќќ§ўќњ§њїї№рхь™žЗCCj6$/ +8^˜ ЈЈІ™^ПщѓNюцJ­ЖŸЂ˜‘­Ђ^ъьтљјћўўќџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ§ўќ§§ќђљћЯхљЭујЭріГЕЪZ5:НЬЩЭрїбтјЯфњЭц§Ьцўщђњўџ§џўџћџ§ахїЭч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юц§ряћџў§ўўўоэќЫцќЮчњЬц§ЭцќЮч§ъіџ§ќћуэїЮчњвцљвцљвцљбхіѓњўџўќџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџћћћћќњїћѓухфVZs%  9y—ЂІЊЇЋЁ*Ў Із3ги<БЕЂІ˜7шнињњњќћўўўњџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ§ўќ§ў§ѓњќЯцљЭфјЬріЩмє‰uƒ†rdЧмьЪрїдрќЯхћЬцўщђњўџ§џўџћџ§ахїЭч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§ряћџў§ўўўпэћЭц§ЮцљЭч§ЭцќЮч§п№§ћўџёєљчђћчѓћчѓћчѓћхєћјўўўўљџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўўўџџџќќќјљїёєѓOQr! /:   $TœЃІЊЈЈІЃ+ЄvЉСИ Ќ˜7ьрзіћќњљ§ћћўўўћџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ§ўќ§ў§ѓњќЯшњЬхљЮфјЪхєФрѕb9?ЅЈЄПчяЯрћЭфјЬцўщђњўџ§џўџћџ§ахїЭч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§пюћџў§§ўўфёћЭцћЯхњЭч§ЭцќЭцќацљшѕўћўџ§ўџ§ўџ§ўџ§ўџћџџўџўўўњџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџќќќћњјвгм@%+ $3:'@mŒ—ЁЄЈЈЇІ ‚(lŸŸрЭИѕіѓјћњќќј§§ќџџ§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ§ўќ§ў§ѓњќЭцјЭчћЩрєЩхѓЩтіЁ ЎpQOСйкЯфќЪфјЬцўщђњўџ§џўџћџ§ахїЭч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§пюћџ§§§ўўшѕќЮцњахњЭч§ЭцќЭцќЫфљгцљэїўќ§џџўўџўўџўўџўўўўўўџўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўў§ћќќќљњШЧоL!  + ++Petˆ ЄЈІŸ•d NЇАˆћћіј§їќјјќќіўўњџў§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ§ўќ§ў§ђљќЬцљЬцњЯшћафћахєШпѓuR[œ‹‰ЫсєЫцќЬц§шђњўў§џўџћџ§ахїЭч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§нюћўў§§ўўюљўЮцњахћЭч§Эц§Яч§Яч§Ячќгціыє§њ§џџўџџў§ўўўў§џўўўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ§џќџњїњќ§іїфф№R =W +r Zy–›ЂЅЃŠ I–gэьыњњњћћћџџџўўў§§§ўўўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўў§ўў§яїўЭхћЬхћЬхћЭфћЮфћЩпѕЊЉЙuONОйоЮфњЬцќшёњўўўџўџћџ§ахїЭч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Эч§ляќўџ§ўўўіќџгшћЮфћЭцўЬх§Ях§ЮцќЮч§Юч§гшћчђ§љ§џўў§§џџ§ўџџ§ќџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџў§џ§ў§јћќќќђёѕђuwЖ +(  +0``c%dЃ— i m‹h№јхўћќ§§§ўўўџџџџџџўўўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўў§ўў§яїўЭхћЬхћЬхћЭфћЯхќЪрѕЮфїzcjžššЩрєЬцќч№љўўўџўџћџ§ахїЭч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Эч§люќўџ§ўўўўўќцєўЭхћЭхќЭхќЭхћЮц§Юч§Юч§Яч§бфјоьљі§џџ§ћџў§џўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўњњћљќљї§ѕѓј§pmЏ#!?C!* ZD$Fd}Š~u +`M€Eчьфљњјќљњ§§§џџџўўўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўў§ўў§яїўЭцќЭцќЭцќЮхќацћЭуїЧсјЋВНtUXЫсюШтїц№їўџ§џўџћџ§ахїЭч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Эч§кэќўџ§ўўўџўљѕќџкэўафљацќЮц§Эц§Юч§Юч§ЭцўЮч§Яхїтђ§ў§ќџќљ§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ§ќ§њќіЬефLQj;<V[4:U0U' <C F +$\!i„^чёрќіњќ§ќ§ќњ§§§ўўўўўўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўў§ўў§яїўЭцќЭцќЭцќЯч§ЮфјЬуєЮуѕТтѓ}eqЈЌДЪфїч№іќ§ћџўџћџ§ахїЭч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§кэћ§џ§ўўў§ўћџџќёљўишјЯујЮцўЭчўЮч§Юч§ЮчўЬцўЬчќЯчњьіўџ§ќќўўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўџџќњќњќѕ]f8 +Hb@(>)ResF3  lorЧбЪьыюѕјњ§ћњљўљўќљџџџџџџџџџџџџџџџўўўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўў§ўў§яїўЭцќЭцќЭцќЮхњбчњЬуєЭу№ФрљЈЌЛ{irШтѕшёї§§ћџўџћџ§ахїЭч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§йьћ§ў§ўўўћџўџўјќўўьјўдцљЭцўЬцўЮч§Юч§ЭхќЮчўЬцќЫчќжыќ§§§§ўўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџћ§љЮдз R71c0  *5Z„€qrvљњіћќјћћћ§§§§§§§§§ўўўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўў§ўў§яї§Юч§Юч§Юч§Юч§ЬхћЫфњЮфљЧсљЯсіmW^КУЫр№њќ§јў§§ћџ§ахіЮч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Эч§иыњўџ§џџў§џџџўћџ§њўўљёћўды§Ьч§Ых§Эх§Эц§Юч§Юч§Яц§Юцћёљћџў§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўў§ќ§њ‡Œ“B/*  H]f– ЊrЯагћќјќќљ§§§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўў§ўў§яї§Юч§Юч§Юч§Юч§ЭцќЬхћЭфћЫхќЫрєЉЁА‘•ряєќћњў§§ћџ§ахіЮч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Эч§иыњўџ§џџўџџџўўќџўќџўѕўџњђїћкщјахћЯц§ЭхќЮч§Юч§ЯцќЮцќюіњџ§§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ§ўћћћљllxA "7Tf~Œ Oegfіјљљњї§ўњџџўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўў§ўў§яї§Юч§Юч§Юч§Юч§Юч§ЭцќЭц§ЭфњЭфїПвщq^eсщщњјњ§ќ§ћў§ахіЮч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Эч§иыњўџ§џџў§§§њџџќџџћџўњ§ќќџўєћўнъјбцљЭчќЮч§Юч§ЮчќЬцќч№јўўўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ§ўћљљј}„ I; (.L‚‚‰R  ЭЯЭјљљќ§љўўћџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўў§ўў§яї§Юч§Юч§Юч§Юч§ЭцќЭцќЫуќбш§ЦрёЧчћ‡tƒСЛКћљќќћќњў§ахіЮч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Эч§иыњўџ§џџўёѕјпюјсэімэћп№§нюљђљ§ѓњўешјЮч§Юч§Юч§ЮчћЬчќуьњўўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџћ§ћћњљіѓ№ББЮ8??вваѓѓђ №№ёЭЭЯ@@?АЏБ‡†ЅUЅЉТњћѕќњёћћћќ§їўў§ўўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўў§ўў§яї§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§ЮцќЭчўщђњ§ў§џўџћџ§ахїЭч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Эч§иыњўџ§џџўџџџџџџџџџџџџџџџџџџџў§џўќџўќџџ§џџџџџџўўўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ§ўџњћќїїљѓђіяnpm !ЧШШіљђMPJ^]aѕєяљљїюю№љљњ№№ђЂЁЅђђэПСЩbвеућћ§ўќ§џџ§џџќўў§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўў§ўў§яї§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§ЮцќЭчўщђњ§ў§џўџћџ§ахїЭч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Эч§иыњўџ§џџўџџџџџџџџџўўўџџџўўўўќўџќџџќџџ§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ§§ўјњћѕіјёжмг*+*gciїљјЧЪР?A?ЉЇЎћћѓ§ћљћњ§ўўўћћ§њјљїєїіїѕ~}›јїѓ§ќ§ќ§ћ§§њ§§§ўўќџџўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўў§ўў§яї§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§ЮцќЭчўщђњ§ў§џўџћџ§ахїЭч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Эч§иыњўџ§џџўџџџџџџџџџўўўџџџџџџџџўўџ§ўџ§џџўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўџџ§ўџњћњїњјљѓ§ёq~s.17ТОРїїѕ…‹VX[ввбњњє§ќњќќќ§§ќћћњјјѕјїіћќќээєќќїўўќўџќўџ§џџџўџўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўўў§ўќяі§ЮцќЮч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§ЮцќЭчўщђњ§ў§џўџћџ§ахїЭч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§йьћ§ў§ўўўџџџџџџџџџџџџџџџџџџџџўўџ§ўџ§џџўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџў§ўњ§ўњ§ћќћћїФаОANMvy‚ћњіэ№цGQFpqvѕіёќ§ј§§ћўўќўўќќќњћћљ§§ћўўўўўџ§§§ўўўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўўџ§ўќ№і§ЮцќЮч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§ЮцќЭчўщђњ§ў§џўџћџ§ахїЭч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§йэћ§џ§ўўўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўћќјќќњљњњіћюnzj:BMклтњњѓЮеП0:2ИИОћћјўўћўў§ўў§ўўќўўќџџ§џџ§ўўўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџў§џ§ўќ№ї§ЯцќЮч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§ЮцќЭчўщђњ§ў§џўџћџ§ахїЭч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Эч§кэћ§џ§ўўўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўћћї§ўћј§ѕХбУ8B;Œіїљљњё†•x>HKііјћћј§§ќџџџџџ§џџ§џџ§џџ§ўўќўўўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџў§џ§џ§ёј§ЯцќЮч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§ЮцќЭчўщђњ§ў§џўџћџ§ахїЭч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Эч§люќўџ§ўўўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўћќјќ§єѓќыetmJO]орфњќљїљяQaLfpљљјќћљ§§§џџџџџўџџ§џџ§ўўќўўќџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџў§џ§џ§ёј§Яч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§ЮцќЭчўщђњ§ў§џўџћџ§ахїЭч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Эч§люќўџ§ўўўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўў§ќ§§љћ§ѓДРА7HH—›Џєє№љћѓЯйЪ ..НСбљјјўўњўў§џџџџўўџџўџџ§џџ§џџўџџџџџџўўўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўўў§ў§ђљ§ЯчќЮч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§ЮчќЭчўшёњ§ў§џўџћџўбхјЭч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§мюћўў§ўўўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўўў§ўќўћќ§њјћџљs‚€ix|ыэяћќ№јњєД˜FMhяч№ќњњћ§љўўћџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ§џ§ќў§ѓљќЯцћЮч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Яч§Эцўшёњ§ў§џўџќџџбцљЮч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§оюјў§§ўў§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўўў§ў§§љ§љљѕЎЛЉ\mlИПЧ§ќќћќїыѓчe{c–œЌ§њєўўњ§ўњўџћџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ§џ§§ў§єњќЯчќЮч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Яч§Эцўшёњ§ў§џўџћџџахјЮч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§пяњў§§ўў§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўўўќўќћћќѓљ№‚•‚u„„ъыёќјљљ§љЬиЩIZNлнуњљя§ўјўџћџџќџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ§џ§ќў§ѕњ§ачќЮч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Яч§Эцўшёњ§ў§џўџњўџахјЮч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юц§с№ћўў§ўў§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўўўћ§њљќђЙХЙZmiОЦЧњјїћћ§єќѓ†˜…u~ˆњњїќ§ј§ўњџџћџџќџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ§џ§ќў§ѕћўбш§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Яч§Эцўшёњ§ў§џўџњўџахјЮч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юц§уёќџў§§ў§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўўўћ§љђјх|Œ}{Œ•ѓієќћђіњ§яљыcxdЊЏНў§ѕљњ§ќўћџџњџџќџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ§џ§ќў§іћўбш§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Яч§Эцўшёњ§ў§џўџљ§џахјЮч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юц§уђќџў§§ў§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўўўџўў§§§§§њјћєІЖnzƒжен§њћќќљќћюФЭПk{wлусљљљ§§§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўџџў§ќјќўјќўњќўўўќјџўў§ўўўўўўњќўќќџџџўџњћќі§џї§џў§ўјў§ј§џ§ћњњ§ўѕќўќўќџ§ћўўџ§ўџџўўўўў§ўџќ§ќљќ§іћ§џ§јџџџџџџџџџџџџўўўќќќдъћЭцџЯцћЮцљЮч§Юч§Юч§Юч§Юч§Яч§афќс№§ћџ§њў§ёћџвцїЮч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Яц§шєџ§џњџўўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўўўўўјњњќљњљъѓрzˆƒŽ•јїїћћњќќљіљы‚‘‚ƒŒїјљћћћўўўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўќъєќньљьёћџўќ§џќџ§ќџў§џџћўџћўџ§ўўџђіћоэјуяїђїњзьјо№§єћўрыїрыіќ§§џў§ў§ўџўџџџ§ўўћўџ§іњќлэњмю§ћџўџџџџџџџџџџџџџџџўўўжыњЮцџЮцћЮчњЮч§Юч§Юч§Юч§Юч§Юч§Ях§т№ћўўњўўњёљўацњЭч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Яцќыі§ўџћџўўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўўў§ќћ§§ўѓљэ–Ї†rzŽюьёљњѓјћљћћјЫжХe|jИОНњєїўўўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўќр№ќЫчўуяќўџўќ§њџўљўў§ќџў§џ§џџ§§ўўыєўЮфќжщіяљќвчњиыќэіќбцўдхљќўџћўџџ§§ўў§ќџўќўќўџћёїњвчљешњћўўџџџџџџџџџџџџџџџџџџмэљацўЭцќЭчћЮч§Юч§Юч§Юч§Юч§Юч§Яшўлъї§ќњџ§љшёњЮчќЭч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§ацњђљќўўќўў§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўўў§њџњћїдоЪ\lW™œЉћїїћ§ѕќ§ќљќљ‰ ‹y}я№ё§јћўўўџџџўўўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўќояќШх§о№ќѕљ§ђњ§§ўќљ§џьіўъѓќєњўќџџщѕџЬхўжщњєћўшѕўъіўіјљЬхўац§№љўцѓ§љћўњќџ№њџђќџѕћќѕњ§цѕўчѓќў§§џџџџџџџџџџџџџџџџџџтёћбцќЮч§ЭчћЮч§Юч§Юч§Юч§Юч§ЭцќЬчћгцјђїўјўўрюќЮчўЭч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§гшћїћќўўў§џ§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўўўњїіђѕуkwhcj|юэщћљіњќњўњћш№ъo–{ЕЦЖўќўћњћ§§§ўўўўўўџџџџџџџџџџџџџџџџџџџџџџџџџџџўџџў§§у№ћгщћпђ§оыєвшњѓќўт№їафїЭфњжшњѕћ§ыѕќЫхћжцљёіўбућищњ№їњЯчќЫчћдъїЭцљуэѕюіќвцљешћнщїх№ћбцќжцї§§§џџџџџџџџџўўўџџџўўўъѕћвхљЯчўЬчќЮч§Юч§Юч§Юч§Юч§ЮчќЬчљЬчџвцўахјЭуњЮчџЮч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§жыќќўўџўџќџ§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўџ§ўџљћќјњћэЛЮБ[ikЋЊПќћі§§њњћљћљќЦдЯyœ„крзќћњћќќќќќ§§§ўўўџџџџџџџџџџџџџџџџџџџџџџџџџџџўџџўў§т№ћЯхњмяќеъњзыћєќџгщјЮхљмыњЭхњтёќыѕњЬцќзчћ№ї§ЮхўгшћэјћЯцњЬчњмыіЭч§йъјэі§ЮхћЮцћЮшћцёќЭх§бхјќўџџџџџџџџџџџџџџџџџџџѕљ§вхјЮшўЭцќЮч§Юч§Юч§Юч§Юч§ЮчќЭцћЭшўЭц§Юч§ЮчўЮчўЮч§Юч§Юч§Юч§Юч§Юч§ЯцћЫч§Ыч§тяњўџџџўџўџўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўўў§§џќ§§ћўњх№кv‰x‚Š”ћљћ§§ћћћљџќ§ѓі№Ђ”Šјљє§§ћќќќ§§§ўўўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўџџўџ§с№ќЮц§иыћашќоюќђїўЮцњвщ§щѓќЬц§йьњыѕћЭч§жшќяїќЮц§дщћюјћЭфњЭчћыѕ§Ячўжъњюі§ЮцќЮцќЫчћшёћЮхќбхјќџџџџџџџџџџџџџџџџџџџџќўџиъљЮч§ЭцќЮч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§ачћЫч§Эчќ№їќџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўўў§§§ќќўњ§ўёњэšЏ“ltvЯЮињћјќќњћћљњљєвмЬKbZЕМХљњѕ§§ќўўўўўўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўџџўџ§с№ќЮц§вчњЮцћцєўёі§ЮцњгъўьіўЬч§иъљыѕћЭч§жшќяїќЮц§дщћюјћЮцћЭчћяјџЮчўжъњюі§ЯчўЭцќдчљшёћЮхќбхјќџџџџџџџџџџџџџџџџџџџџўџџхёћЮхјЮч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§ЯчќЬцќгшњјќџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўўўќќќќўєѕќьПЮЖ]sbЛМФќљћњќє§§љќ§јєљф†“Š[i{ѕѕѕќ§јџџ§ўўўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўџџўџ§с№ќЮц§ЯчћЯчќьїўёїќЮцћвщўъє§ЬцќйыњыѕќЭч§жшќяїќЮц§дщћюјћЯчќЬцћюїўЮц§жъњюі§Яцќачќѕ§џюіўЮхќбхјќџџџџџџџџџџџџџџџџџџџџџџџіћўдхіЯшўЮч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Яхљу№њ§ўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ§§§ћћћќўіэїсasgz„Œђѓєљњѕћ§їўџљњћѕуэлM]\šŸДќћђќ§ј§§ќўўўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўџџўџ§с№ќЮц§Юч§Юч§ыѕ§№ѕћЮцћгъўыє§ЬцќйыњыѕќЭч§жшќяїќЮц§дщћюјћЮцћЭчћяјџЮчўжъњюі§ЯцќачћўўўюіўЮхќбхјќџџџџџџџџџџџџџџџџџџџџўўў§§ўсяћЮч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Эч§дщћђљ§ўўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўўўў§§ў§ќњљїѕјђ˜І–]kxаауќќљќџјњ§њ§ќњіњюŠš“crzсушќћђќ§њўў§џџџџџџџџџўўўџџџџџџџџџџџџџџџџџџџџџџџџџџџўџџўџ§с№ќЮц§ЯчќЬцќхёќ№іћЮчќгщќьѕќЭчќзъњъѕќЭч§жшќяїќЮц§дщћюјћЮчќЯчќяїўЯчўжщљэі§Яхћгщ§џўќяїўЮхќбхјќџџџџџџџџџџџџџџџџџџџџџџџџўўђњўвшћЮч§Юч§ЯчќЯцњЮцћЮч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§Юч§ЮцўЯцћЯцћЭчќЭцћс№§ћўџўў§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўўўўўўќќ§§ќњўќћќћєжпЮr‚|ІЌКјјљўўўўўўћўќћіќуэиPgd—Їіњј§ўјќќќўўўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўџџўџ§с№ќЮц§жщњЬч§пяўёїћЪфќдшјьєќЭш§жъћъѕќЭч§жшќяїќЮц§дщћюјћЭцќбфћяї§Яц§жшљьї§Юхћвш§ўўќ№ї§ЮхќбхјќџџџџџџџџџџџџџџџџџџџџўўўўўўўўўтюљацњЮч§ЮхћахљацњЮчќЮч§Юч§Юч§Юч§Юч§Юч§ЫцћЬхќЮфџЯхћЭхјЮшќгчїєћўўџџџўќџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўўў§§§ќќњїјѓіјљюір„’‰‘œЁѕѕѕ§ќ§ўўўќќќ§§ќћјѓžЌL^eмншќћљџўњўўўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўџџўџ§с№ќЮц§йьћЯшќиыќяіћЭхќдшљщі§ЭчќкыњъѕќЭч§жшќяїќЮц§дщћюјћЯчќафќэјўацўишљюї§Юхћвш§ўўќ№ї§Юхќбхјќџџџџџџџџџџџџџџџџџџџџџџџўўўџџџљ§џпьїЮфјЫшўЪчўЬцќЮфљЮч§Юч§Юч§Юч§Юч§Юч§Эч§ЬхќЯх§Ъц§Ьш§бхѕыїўћџџўџџџџ§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўўў§§§ћќћљќќ№њѓЈК–[khХЩг§ћє§ќ§ўўўќќќњјіїќэYka‰•ћљ§§ќјџ§ћџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўџџўџ§с№ќЮц§мяќдшћвшћяї§бцћвчћсєўЮцћтюњыѕќЭч§жшќяїќЮц§дщћюјћЯцћах§хєўЯцўишїэіћЯцћвш§ўўќ№ї§ЮхќбхјќџџџџџџџџџџџџџџџџџџџџџџџџџџўўўўўўѕњўйъњЬцћЫшџЮчўЯхњЮч§Юч§Юч§Юч§Юч§Юч§Эц§Яч§бчќЭчќЬхјхёњњўџ§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўўўќќќљњћѕќљЭоЧBYN‹”šљјјњљї§§§ўўў§§§љћїАСЎGVVддкћћљњћєўўќџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўџџўџ§с№ќЮц§рё§йъљЮчќ№љ§жчњЯхњЯцљацњьѕќыѕћЭч§жшќяїќЮц§дщћюјћЮхјЮфќешѕЯцќоэћяіћацћвш§ўўќ№ї§Юхќбхјќџџџџџџџџџџџџџџџџџџџџўўўўўўўўўџўў§ўўѕћўпэљгчјЭхљЬц§Юч§Юч§Юч§Юч§Юч§Юч§ацџац§бхїечѕшѕ§ќџўџў§џџўўўџќ§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўўўќќќљњљэіш~”rJ^zавм§њ№љћ§ћ§§ўўўўўўёїђc}i€’їђђњћєљќєћў§џџџџџџўўўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўџџўџ§с№ќЮц§пё§мыјЭш§ьіћуђџацћЭчћиэ§іќџыѕќЭч§жшќяїќЮц§дщћюјћбцњЯхўл№ќЮхќцѓџёїћацњвш§ўўќ№ї§ЮхќбхјќџџџџџџџџџџџџџџџџџџџџџџџўўўџџџџўџўўџўџџјќўшѓќдщћЫчўЮч§Юч§Юч§Юч§Юч§Юч§Яхўахќлюќэјќћўџџўћџўњџўќўўџ§ўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўў§ўўќўўўћџ§§§§§љєѕљфŽ™…XbzІЄУћћљћћљўўќћўљ§іџћћѓЋПЈQ_hУХЬљјљћќїўўњџџќџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўўўќќќ§§§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўўўџџџўўўѓіљс№§ньћньћлъњмыћоэќы№іјњ§ўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџ§ќ§њќўѕћљџњњљКЩЊN_Zu€•ллыќќњќќњ§§ћћњјќјћэѕф]pcfrіјћќќћ§ўљўџњџџќџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўўўўўўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўўўўўўџџџўўўќџќњ§ќћўќњќ§ћ§ўћўўћўџўџџўўџџўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўќ§ї§ќљљњђицж_xe]r~ЎЖХњњњџџ§ўўќњњјћјјљќєžБ”6FHЕМЩљћўў§ћџџ§џџ§џџ§џџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўџџљџўљџџњўўћўџћўџћќ§ў§§џў§ўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўџџџ§ќўѕјїђђњчЉƒe}~~˜шъ№ќќї§§ћўўќќќњќћјц№рKaGWaoъюђћќќў§ќџџўџџўџџўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўўўџџџџџџ§ўўћџўќџўќџўњўџњўџњўџўџџџџџџўўџџўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўўџўўќјњяјћъЂЕ”FcDVgmЗККўљљ§ўњўўќ§§ћќќњєћё•Ќ‘2E7ЂЄЙћ§ѓћћљќќќџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўўџўўџўўџўџџ§џџ§џ§§ўўўџџў§џџўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўўўўњїјђыѕс8L0>QTYdqццсќљјћћћўўћќћ§ћћљкюХ@ZF7AEэьђњќѓўўћўўўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўўџўўџўўџўџџўџџўџџџџџџџџџўџџўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџў§§ў§ќњћјЈБЁ$%>СЧвћќїљљїўўў§ќќћ§ќъђуVmK)-~€”ќњњќ§јџџќџџўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџўўўўќџѕієV[T.UTqѓѓїљњѕ§§ћќќќ§њ§єћёГЧЇ/&4?OРСЮ§ќћ§ўњџџўџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџџў§џў§§тут//9&">ЯЫкњљј§§љўўќ§§§ўћ§іћё +} + +macro print message +{ + dps message + newline +} + +macro pregs +{ + dps "EAX: " + dpd eax + dps " EBX: " + dpd ebx + newline + dps "ECX: " + dpd ecx + dps " EDX: " + dpd edx + newline +} + +macro debug_print_hex arg +{ + pushf + pushad + if ~arg eq eax + mov eax, arg + end if + call debug_outhex + popad + popf +} +dph fix debug_print_hex + +debug_outhex: + ; eax - number + mov edx, 8 + .new_char: + rol eax, 4 + movzx ecx, al + and cl, 0x0f + mov cl, [__hexdigits + ecx] + pushad + mcall 63, 1 + popad + dec edx + jnz .new_char +ret + +__hexdigits: + db '0123456789ABCDEF' \ No newline at end of file diff --git a/programs/develop/libGUI/src/draw.inc b/programs/develop/libGUI/src/draw.inc new file mode 100644 index 0000000000..744c90a995 --- /dev/null +++ b/programs/develop/libGUI/src/draw.inc @@ -0,0 +1,595 @@ + +DrawLine: + + mov eax,38 + mov ebx,[Line.x1] + mov ecx,[Line.y1] + mov edx,[Line.color] + shl ebx,16 + shl ecx,16 + add ebx,[Line.x2] + add ecx,[Line.y2] + mcall + + ret + +DrawPixel: + + xor eax,eax + inc al + mov ebx,[Pixel.x] + mov ecx,[Pixel.y] + mov edx,[Pixel.color] + mcall + + ret + +RectangleContour: + + mov eax,38 + mov ebx,[Rectangle.x] + mov ecx,[Rectangle.y] + mov edx,[Rectangle.color] + mov esi,ebx + mov edi,ecx + shl ebx,16 + shl ecx,16 + add ebx,esi + add ecx,edi + add ebx,[Rectangle.width] + mcall + + mov eax,38 + mov ebx,[Rectangle.x] + mov ecx,[Rectangle.y] + mov edx,[Rectangle.color] + add ecx,[Rectangle.height] + mov esi,ebx + mov edi,ecx + shl ebx,16 + shl ecx,16 + add ebx,esi + add ecx,edi + add ebx,[Rectangle.width] + mcall + + mov eax,38 + mov ebx,[Rectangle.x] + mov ecx,[Rectangle.y] + mov edx,[Rectangle.color] + mov esi,ebx + mov edi,ecx + shl ebx,16 + shl ecx,16 + add ebx,esi + add ecx,edi + add ecx,[Rectangle.height] + mcall + + mov eax,38 + mov ebx,[Rectangle.x] + mov ecx,[Rectangle.y] + mov edx,[Rectangle.color] + add ebx,[Rectangle.width] + mov esi,ebx + mov edi,ecx + shl ebx,16 + shl ecx,16 + add ebx,esi + add ecx,edi + add ecx,[Rectangle.height] + mcall + + ret + +;eax -first color +;ebx- second color +;OUT +;eax - averege color +calculate_average_color: + + and eax,0xffffff + and ebx,0xffffff + + mov [b_min],al + mov [b_max],bl + shr eax,8 + shr ebx,8 + mov [g_min],al + mov [g_max],bl + shr eax,8 + shr ebx,8 + mov [r_min],al + mov [r_max],bl + + xor eax,eax + xor ebx,ebx + mov al,[r_max] + mov bl,[r_min] + add eax,ebx + shr eax,1 + mov [r],al + + xor eax,eax + xor ebx,ebx + mov al,[g_max] + mov bl,[g_min] + add eax,ebx + shr eax,1 + mov [g],al + + xor eax,eax + xor ebx,ebx + mov al,[b_max] + mov bl,[b_min] + add eax,ebx + shr eax,1 + mov [b],al + + xor eax,eax + mov al,[r] + shl eax,8 + mov al,[g] + shl eax,8 + mov al,[b] + + ret + +;eax -color +;ebx- sub value +;OUT +;eax - sabved color +calculate_sabved_color: + + and eax,0xffffff + + mov [b],al + shr eax,8 + mov [g],al + shr eax,8 + mov [r],al + + sub [r],bl + sub [g],bl + sub [b],bl + + xor eax,eax + mov al,[r] + shl eax,8 + mov al,[g] + shl eax,8 + mov al,[b] + + ret + +DrawString: + + mov ebx,[Button.text] + call GetLengthString + mov esi,eax + + mov eax,4 + mov ebx,[Font.x] + shl ebx,16 + add ebx,[Font.y] + mov ecx,[Button.textcolor] + mov edx,[Button.text] + mcall + + ret + +;eax -first color +;ebx- second color +;ecx- x coordinat of rectangle +;edx- y coordinat of rectangle +;esi- rectangle size x +;edi- rectangle size y + +rectangle_gradient_right: + + mov [line_coordinat_x],ecx + mov [line_coordinat_y],edx + mov [line_size_x],esi + mov [line_size_y],edi + + mov ecx,esi + mov edx,dword pointer + call gradient + + mov ecx,[line_coordinat_y] + shl ecx,16 + add ecx,[line_coordinat_y] + add ecx,[line_size_y] + + mov eax,[line_size_x] + add [line_coordinat_x],eax + + mov esi,dword pointer + mov edi,[line_size_x] + + next_vertical_line_draw_right: + + mov eax,38 + mov ebx,[line_coordinat_x] + shl ebx,16 + add ebx,[line_coordinat_x] + mov edx,[esi] + and edx,0xffffff + mcall + + add esi,3 + sub [line_coordinat_x],1 + + dec edi + jnz next_vertical_line_draw_right + + ret + +;eax -first color +;ebx- second color +;ecx- x coordinat of rectangle +;edx- y coordinat of rectangle +;esi- rectangle size x +;edi- rectangle size y + +rectangle_gradient_left: + + mov [line_coordinat_x],ecx + mov [line_coordinat_y],edx + mov [line_size_x],esi + mov [line_size_y],edi + + mov ecx,esi + mov edx,dword pointer + call gradient + + mov ecx,[line_coordinat_y] + shl ecx,16 + add ecx,[line_coordinat_y] + add ecx,[line_size_y] + + mov esi,dword pointer + mov edi,[line_size_x] + + next_vertical_line_draw_left: + + mov eax,38 + mov ebx,[line_coordinat_x] + shl ebx,16 + add ebx,[line_coordinat_x] + mov edx,[esi] + and edx,0xffffff + mcall + + add esi,3 + add [line_coordinat_x],1 + + dec edi + jnz next_vertical_line_draw_left + + ret + +;eax -first color +;ebx- second color +;ecx- x coordinat of rectangle +;edx- y coordinat of rectangle +;esi- rectangle size x +;edi- rectangle size y + +rectangle_gradient_up: + + mov [line_coordinat_x],ecx + mov [line_coordinat_y],edx + mov [line_size_x],esi + mov [line_size_y],edi + + mov ecx,edi + mov edx,dword pointer + call gradient + + mov ebx,[line_coordinat_x] + shl ebx,16 + add ebx,[line_coordinat_x] + add ebx,[line_size_x] + + mov eax,[line_size_y] + add [line_coordinat_y],eax + + mov esi,dword pointer + mov edi,[line_size_y] + + next_horizontal_line_draw_up: + + mov eax,38 + mov ecx,[line_coordinat_y] + shl ecx,16 + add ecx,[line_coordinat_y] + mov edx,[esi] + and edx,0xffffff + mcall + + add esi,3 + sub [line_coordinat_y],1 + + dec edi + jnz next_horizontal_line_draw_up + + ret + +;eax -first color +;ebx- second color +;ecx- x coordinat of rectangle +;edx- y coordinat of rectangle +;esi- rectangle size x +;edi- rectangle size y + +rectangle_gradient_down: + + mov [line_coordinat_x],ecx + mov [line_coordinat_y],edx + mov [line_size_x],esi + mov [line_size_y],edi + + mov ecx,edi + mov edx,dword pointer + call gradient + + mov ebx,[line_coordinat_x] + shl ebx,16 + add ebx,[line_coordinat_x] + add ebx,[line_size_x] + + mov esi,dword pointer + mov edi,[line_size_y] + + next_horizontal_line_draw_down: + + mov eax,38 + mov ecx,[line_coordinat_y] + shl ecx,16 + add ecx,[line_coordinat_y] + mov edx,[esi] + and edx,0xffffff + mcall + + add esi,3 + add [line_coordinat_y],1 + + dec edi + jnz next_horizontal_line_draw_down + + ret + +;eax -first color +;ebx- second color +;ecx- length of line +;edx- pointer to memory for colors of gradient + +gradient: + + mov [length],ecx + + and eax,0xffffff + and eax,0xffffff + + mov [b_min],al + mov [b_max],bl + shr eax,8 + shr ebx,8 + mov [g_min],al + mov [g_max],bl + shr eax,8 + shr ebx,8 + mov [r_min],al + mov [r_max],bl + + mov eax,[length] + dec eax + mov [v],eax + fild [v] + + xor eax,eax + mov al,[r_max] + sub al,[r_min] + mov [v],eax + fild [v] + fdiv st0,st1 + fstp [step_r] + + xor eax,eax + mov al,[g_max] + sub al,[g_min] + mov [v],eax + fild [v] + fdiv st0,st1 + fstp [step_g] + + xor eax,eax + mov al,[b_max] + sub al,[b_min] + mov [v],eax + fild [v] + fdiv st0,st1 + fstp [step_b] + + fstp [v] + + xor eax,eax + mov al,[r_min] + mov [r],al + mov [v],eax + fild [v] + fstp [r_f] + + xor eax,eax + mov al,[g_min] + mov [g],al + mov [v],eax + fild [v] + fstp [g_f] + + xor eax,eax + mov al,[b_min] + mov [b],al + mov [v],eax + fild [v] + fstp [b_f] + + next_gradient_color_save: + + xor ebx,ebx + xor eax,eax + mov al,[r] + mov bl,al + shl eax,8 + mov al,[g] + shl eax,8 + mov al,[b] + + mov [edx],ax + mov [edx+2],bl + + fld [step_r] + fld [r_f] + fadd st0,st1 + fst [r_f] + fistp [v] + xor eax,eax + mov eax,[v] + mov [r],al + fstp [v] + + fld [step_g] + fld [g_f] + fadd st0,st1 + fst [g_f] + fistp [v] + xor eax,eax + mov eax,[v] + mov [g],al + fstp [v] + + fld [step_b] + fld [b_f] + fadd st0,st1 + fst [b_f] + fistp [v] + xor eax,eax + mov eax,[v] + mov [b],al + fstp [v] + + add edx,3 + + dec ecx + jnz next_gradient_color_save + + ret + +;IN +;NON +;OUT +;variable [skin_height] + +get_skin_height: + + pushad + + mov eax,48 + mov ebx,4 + int 0x40 + + mov [skin_height],eax + popad + + ret +;eax - x +;ebx - y +;ecx - size x +;edx - size y +;esi - pointer to memory for rectangle +SaveFonForRectangle: + + mov [Rectangle.x],eax + mov [Rectangle.y],ebx + mov [Rectangle.width],ecx + mov [Rectangle.height],edx + mov [PointerToMem],esi + + ;get bytes per string + mov eax,61 + mov ebx,2 + mcall + mov [BitsPerPixel],eax + + mov eax,61 + mov ebx,3 + mcall + mov [BytesPerString],eax + + + ;get window coordinats + mov eax,9 + mov ebx,dword IPC_table + or ecx,-1 + mcall + + mov eax,dword[IPC_table+34] + mov ebx,dword[IPC_table+38] + ;mov ecx,dword[IPC_table+42] + ;mov edx,dword[IPC_table+46] + ;mov [WindowCoordinatX],eax + ;mov [WindowCoordinatY],ebx + ;mov [WindowSizeX],ecx + ;mov [WindowSizeY],edx + + add eax,[Rectangle.x] + add ebx,[Rectangle.y] + + imul ebx,[BytesPerString] + mov esi,[Rectangle.width] + + cmp [BitsPerPixel],24 + jne no_24 + + lea eax,[eax+eax*2] + lea esi,[esi+esi*2] + mov edi,3 + jmp exit_bits_per_pixel + no_24: + + shl eax,2 + shl esi,2 + mov edi,4 + exit_bits_per_pixel: + + add eax,ebx + + mov ebx,[BytesPerString] + sub ebx,esi + mov [offset],ebx + + mov esi,[PointerToMem] + mov edx,[Rectangle.height] + next_string_pixels_save: + + mov ecx,[Rectangle.width] + next_pixel_save: + + mov ebx,[gs:eax] + and ebx,0xffffff + mov [esi],bx + shr ebx,16 + mov [esi+2],bl + + add esi,3 + add eax,edi + dec ecx + jnz next_pixel_save + + add eax,[offset] + dec edx + jnz next_string_pixels_save + + exit_: + ret diff --git a/programs/develop/libGUI/src/edit_box.inc b/programs/develop/libGUI/src/edit_box.inc new file mode 100644 index 0000000000..9908d947ab --- /dev/null +++ b/programs/develop/libGUI/src/edit_box.inc @@ -0,0 +1,249 @@ + +eb_control_data_size = 82 + +;**************************************************** +;******************craete EditBox********************* +;**************************************************** +;IN +;pointer to parend +;pointer to EditBox's structure +;OUT +;pointer to initialized control +align 4 + +craete_edit_box: + + mov ebx,[esp+4] + mov eax,[esp+8] + + mov [PointerToStructureForEditBox],eax + + mov eax,control_header_size+eb_control_data_size + call craete_control + + ;set all EditBox's parameters in control + mov [eax],dword edit_box + + mov ecx,eb_control_data_size + mov esi,[PointerToStructureForEditBox] + mov edi,eax + add edi,control_header_size + rep movsb + + call get_skin_height + + mov ebx,[PointerToStructureForEditBox] + mov ecx,[ebx+4] ;x + mov edx,[ebx+8] ;y + mov esi,[ebx] ;size x + mov edi,[ebx+70] ;size y + add ecx,border_width + add edx,[skin_height] + ;copy information to control + mov [eax+24],ecx + mov [eax+28],edx + mov [eax+32],esi + mov [eax+36],edi + + ret 8 + +;**************************************************** +;******************Draw EditBox********************** +;**************************************************** +;include 'editbox_mac.inc' +;IN +;pointer to control of EditBox +;message +;OUT +;not returned value +align 4 + +include 'editbox_mac.inc' + +edit_box: + ;;;;;;;;;;;; + ;Structure from libGui  сЎцЈ цЈя струЊтур + ;;;;;;;;;;;; + + ;get message + mov eax,[esp+8] + + ;get pointer to control of button + mov esi,[esp+4] + mov [PointerForEditBox],esi + + ;copy control to local control + add esi,control_header_size + mov edi,dword EditBox + mov ecx,eb_control_data_size + rep movsb + + ;;;;;;;;;;;; + ;Structure from libGui  сЎцЈ цЈя струЊтур + ;;;;;;;;;;;; + srt_ed_libgui + + push eax + ;load coordinats and size from control + mov eax,[PointerForEditBox] + mov ebx,[eax+24] ;x + mov ecx,[eax+28] ;y + mov edx,[eax+32] ;size x + mov esi,[eax+36] ;size y + ;set current coordinats and sizes in EeditBox + mov [EditBox.ed_left],ebx + mov [EditBox.ed_top],ecx + mov [EditBox.ed_width],edx + mov [EditBox.ed_height],esi + pop eax + + ;events of redraw all EditBox + + cmp [eax],dword 1 + jne .no_redraw_all_edit_box + + + call .draw_border + .draw_bg_cursor_text: + + call .check_offset + + call .draw_bg + + call .draw_shift + .draw_cursor_text: + + test word[EditBox.ed_flags],ed_focus + je @f + call .draw_cursor + @@: + call .draw_text + + jmp .editbox_exit;exit_edit_box + .no_redraw_all_edit_box: + + + ;events of keys for EditBox + + cmp [eax],dword 2 + jne .no_keys_edit_box + + mov ebx,[eax+4] + shl ebx,8 + mov eax,ebx + + test word [EditBox.ed_flags],ed_focus + je .editbox_exit;exit_edit_box;@b + + call .check_shift + + ;---------------------------------------------------------- + ;--- ЏрЎЂЅряЅЌ, чтЎ ­ І тЎ -------------------------------- + ;---------------------------------------------------------- + + use_key_process backspase,delete,left,right,home,end,insert + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;‡ ЃЋушЊ  ­  ЎЁр ЁЎтЊу ЊЋ ЂЈш ЂЂЅрх Ј Ђ­ЈЇ т.Ѕ. ЏрЈ + ;ЎЁ­ руІЅ­ЈЈ этЈх ЊЎЄЎЂ ЏрЎЈсхЎЄЈт ЂыхЎЄ ЈЇ ЎЁр ЁЎтчЈЊ  + ;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + srt_ed_libgui + use_key_no_process up,down,esc + + ;--- ­ І т  ЄруЃ я ЊЋ ЂЈш  --- + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;рЎЂЅрЊ  уст ­ЎЂЋЅ­ ЋЈ фЋ Ѓ ЏрЈ ЊЎтЎрЎЌ ­уІ­Ў ЂыЂЎЄЈть + ;тЎЋьЊЎ цЈфры Ђ ­уІ­ЎЌ ЁЎЊсЅ ЅсЋЈ т ЊЎЉ ­ЅЎЁхЎЄЈЌЎстЈ ­Ѕт + ;­уІ­Ў Ї ЊЎЌЅ­тЈрЎЂ ть Ќ ЊрЎс + ;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + use_key_figures_only + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;ЏрЎЂЅрЊ  ­  shift ЁыЋ ЋЈ ­ І т + ;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + are_key_shift_press + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ; ЏрЎЂЅряЅЌ, ­ хЎЄЈтся ЋЈ ЊурсЎр Ђ ЊЎ­цЅ + Є Ћь­ЅЉш я ЎЁр ЁЎтЊ  + ;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + are_key_cur_end + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;ŽЁр ЁЎтЊ  ЊЋ ЂЈш insert,delete.backspase,home,end,left,right + ;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + use_work_key + + + .no_keys_edit_box: + + ;events of mouse for EditBox + + cmp [eax],dword 6 + jne .editbox_exit + + mov esi,[eax+4] + mov edi,[eax+8] + mov ecx,[eax+12] + mov [EditBox.mouseX],esi + mov [EditBox.mouseY],edi + mov [ButtonsOfMouse],ecx + + mov eax,ecx + + test eax,1 + jnz .mouse_left_button + and word [EditBox.ed_flags],ed_mouse_on_off + jmp .editbox_exit + + .mouse_left_button: + + mov eax,[EditBox.mouseX] + shl eax,16 + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;”у­ЊцЈя ЎЁр ЁЎтЊЈ ЌышЊЈ ЏЎЋучЅ­ЈЅ ЊЎЎрЄЈ­ т Ј ЏрЎЂЅрЊ  Јх + ЂыЄЅЋЅ­Јя + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + use_work_mouse ;scr_h,scr_w + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;ŽЁщЈЅ фу­ЊцЈЈ ЎЁр ЁЎтЊЈ + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + use_general_func + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;”у­ЊцЈЈ ЄЋя р ЁЎты с key + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + use_key_func + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;”у­ЊцЈЈ ЄЋя р ЁЎты с mouse + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + use_mouse_func ;scr_w + + ;;;;;;;;;;;;;;;;;;;;;;;;;; + ;ŽЁщЈЉ ЂыхЎЄ ЈЇ editbox ЄЋя ЂсЅх фу­ЊцЈЉ Ј ЏЎст ЎЁр ЁЎтчЈЊЎЂ + ;;;;;;;;;;;;;;;;;;;;;;;;;; + + .editbox_exit: + + exit_edit_box: + + ;save resulatat of work in control + mov esi,dword EditBox + mov edi,[PointerForEditBox] + add edi,control_header_size + mov ecx,eb_control_data_size + rep movsb + + ret 8 + diff --git a/programs/develop/libGUI/src/editbox_mac.inc b/programs/develop/libGUI/src/editbox_mac.inc new file mode 100644 index 0000000000..201dbb19bc --- /dev/null +++ b/programs/develop/libGUI/src/editbox_mac.inc @@ -0,0 +1,1143 @@ +;Œ ЊрЎс ЄЋя ЂыЂЎЄ  Ўс­ЎЂ­ых фу­ЊцЈЉ ЊЎтЎрыЅ ЈсЏЋьЇуются ЁЎЊсЎЌ +macro use_general_func +{ +;debug_func +;---------------------------------------------------------- +;--- ЏрЎцЅЄур  ЏрЎрЈсЎЂЊЈ ЂыЄЅЋЅ­ЎЉ ч стЈ ----------------- +;---------------------------------------------------------- +.draw_shift: + test word [EditBox.ed_flags],ed_shift_bac ;уст ­ЎЂЊ  фЋ Ѓ , ЂыЄЅЋЅ­­ЎЉ ЎЁЋ стЈ + jz @f + mov ebp,[EditBox.shift_color] + mov ebx,dword ed_shift_pos + call .sh_cl_ +@@: ret +;---------------------------------------------------------- +;--- ЏрЎцЅЄур  ЏрЎрЈсЎЂЊЈ тЅЊст  -------------------------- +;---------------------------------------------------------- +.draw_text: +;--- ЂычЈсЋяЅЌ, сЊЎЋьЊЎ ЏЎЌЅщ Ѕтся сЈЌЂЎЋЎЂ --- +;--- чтЎЁы ЌусЎр ­Ѕ рЈсЎЂ ть --- + call .get_n + mov esi,[EditBox.ed_size] + mov ebx,ed_offset + sub esi,ebx + cmp eax,esi + jae @F + mov esi,eax ;чтЎЁы ­Ѕ ЂыхЎЄЈть Ї  ЏрЅЄЅЋы эЊр ­  +;--- рЈсуЅЌ тЅЊст --- +@@: mov eax,4 + mov ebx,[EditBox.ed_left] + mov edx,ed_offset + add ebx,2 + shl ebx,16 + add ebx,[EditBox.ed_top] + mov ecx,[EditBox.ed_text_color] + add ebx,4 + add edx,[EditBox.ed_text] + mcall +ret +;---------------------------------------------------------- +;--- ЏрЎцЅЄур  ЏрЎрЈсЎЂЊЈ фЎ­  ---------------------------- +;ЂхЎЄ­ыЅ Є ­­ыЅ +;eax +;edx - color +;---------------------------------------------------------- +;ЂхЎЄ тЎЋьЊЎ цЂЅт edx +.draw_bg: + mov ebx,[EditBox.ed_left] + add ebx,1 + mov edx,[EditBox.ed_color] + shl ebx,16 + add ebx,[EditBox.ed_width] + sub ebx,1 +.draw_bg_eax: + mov ecx,[EditBox.ed_top] + mov eax,13 + add ecx,1 + shl ecx,16 + add ecx,ed_height + dec ecx + mcall +ret + +;---------------------------------------------------------- +;--- ЏрЎцЅЄур  ЏЎЋучЅ­Јя ЊЎЋЈчЅстЂ  сЈЌЂЎЋЎЂ Ђ тЅЊущЅЉ щЈрЈ­Ѕ ЊЎЌЏЎ­Ѕ­т  +;---------------------------------------------------------- +.get_n: + mov eax,[EditBox.ed_width] ;ЏЎЋучЅЌ шЈрЈ­у ЊЎЌЏЎ­Ѕ­т  + xor edx,edx ;рЅЇуЋьт т р сЏЎЋЎЃ Ѕтся Ђ Џ рЅ edx:eax Ђ eax - Ўст тЎЊ + sub eax,4 ;ЂычтЈЌ 4 + mov ebx,6 ;Ї ЃруЇЌЈ ЄЅЋЈтЅЋь + div ebx ;р ЇЌЄЅЋЈЌ ­  6 +ret +;---------------------------------------------------------- +;--- ЏрЎцЅЄур  рЈсЎЂ ­Јя ЊурсЎр  -------------------------- +;---------------------------------------------------------- +;ЂхЎЄ­ыЅ ebp- цЂЅт +.clear_cursor: + mov edx,ebp + mov ebx,cl_curs_x + mov ecx,cl_curs_y + jmp .draw_curs +.draw_cursor: + mov edx,[EditBox.ed_text_color] + mov ebx,ed_pos + mov ecx,ed_offset + sub ebx,ecx + + lea ebx,[ebx*2+ebx] + shl ebx,1 + ;imul ebx,6 + add ebx,[EditBox.ed_left] + mov ecx,[EditBox.ed_top] + inc ebx + add ecx,2 + mov ebp,ebx + shl ebx,16 + mov bx,bp + mov ebp,ecx + + shl ecx,16 + mov cx,bp + add ecx,ed_height-4 + + mov cl_curs_x,ebx + mov cl_curs_y,ecx +.draw_curs: + mcall 38 +ret +;---------------------------------------------------------- +;--- ЏрЎцЅЄур  рЈсЎЂ ­Јя р ЌЊЈ ---------------------------- +;---------------------------------------------------------- +.draw_border: +;--- цЂЅт р ЌЊЈ --- + test word [EditBox.ed_flags],ed_focus + mov edx,[EditBox.ed_focus_border_color] + jne @f + mov edx,[EditBox.ed_blur_border_color] +@@: +;--- сЂЅрху --- + mov eax,38 + mov ebx,[EditBox.ed_left] + mov ecx,ebx + shl ebx,16 + mov bx,cx + add ebx,[EditBox.ed_width] + mov ecx,[EditBox.ed_top] + mov esi,ecx + shl ecx,16 + mov cx,si + mcall +;--- с­ЈЇу --- + mov esi,ecx + add ecx,ed_height + mov ebp,ecx + shl ecx,16 + mov cx,bp + mcall +;--- сЋЅЂ  --- + mov cx,si + mov ebp,ebx + sub ebx,[EditBox.ed_width] + mcall +;--- сЏр Ђ  --- + mov ebx,ebp + shl ebx,16 + mov bx,bp + mcall +ret +;---------------------------------------------------------- +;--- ЏрЎЂЅрЊ , Ї шЅЋ ЋЈ ЊурсЎр Ї  Ѓр ­Јцы Ј, ЅсЋЈ ­ ЄЎ, --- +;--- ЈЇЌЅ­яЅЌ сЌЅщЅ­ЈЅ ------------------------------------ +;--- ЅсЋЈ сЌЅщЅ­ЈЅ ЁыЋЎ уст ­ЎЂЊ  фЋ Ѓ  ed_offset_cl Ј­ чЅ +; ЅсЋЈ ­ЈчЅЃЎ ­Ѕ ЈЇЌЅ­ЈЋЎсь тЎ Ђыст ЂЋЅ­ЈЅ ed_offset_fl +; Ђ ЎЁщЅЉ ЁЈтЎЂЎЉ Ќ ррЈцЅ сЎстЎя­Јя ЊЎЌЏЎ­Ѕ­тЎЂ word [EditBox.ed_flags] +;---------------------------------------------------------- +.check_offset: +pusha + mov ecx,ed_pos + mov ebx,ed_offset + cmp ebx,ecx + ja .sub_8 + + push ebx + call .get_n ;ЏЎЋучЈЌ ЊЎЋ-ЂЎ сЈЌЂЎЋЎЂ Ђ Џ рЅ рЅЃЈстрЎЂ edx:eax + pop ebx + mov edx,ebx + add edx,eax ;ed_offset+width editbox + inc edx ;­ЅЎЁхЎЄЈЌЎ ЄЋя ­ЎЌ Ћь­ЎЃЎ ЏЎЋЎІЅ­Јя ЊурсЎр  Ђ Њр Љ­ЅЉ ЋЅЂЎЉ ЏЎЇЈцЈЈ + cmp edx,ecx + ja @f + + mov edx,[EditBox.ed_size] + cmp edx,ecx + je .add_end + + sub edx,ecx + cmp edx,8 + jbe .add_8 + add ebx,8 + jmp .chk_d + +.sub_8: cmp ecx,0 + je .sub_min + cmp ebx,8 + jbe .sub_min + sub ebx,8 ;ebx=ed_offset + jmp .chk_d +.sub_min: + xor ebx,ebx + jmp .chk_d + +.add_end:sub edx,eax + mov ebx,edx + jmp .chk_d +.add_8: add ebx,edx +.chk_d: mov ed_offset,ebx + call .draw_bg + and word [EditBox.ed_flags],ed_offset_cl +edit_ex +@@: + or word [EditBox.ed_flags],ed_offset_fl +edit_ex +} + +macro use_key_func +{ +;ŽЁр ЁЎтЊ  Shift ЄЋя с­ятЈя ЂыЄЅЋЅ­Јя ­ЅЈЇЂЅст­ЎЉ ЎЁЋ стЈ +.shift: ;;;;;;;SHIFT + test word [EditBox.ed_flags],ed_shift + je .f_exit + +@@: mov ebp,[EditBox.shift_color] + or word [EditBox.ed_flags],ed_shift_bac ;уст ­ЎЂЊ  фЋ Ѓ , ЂыЄЅЋЅ­­ЎЉ ЎЁЋ стЈ + mov ebx,dword ed_shift_pos + call .sh_cl_ + jmp .draw_cursor_text +;;;;;;;;;;;;;;;;;;;;; +.f_exit:call .check_offset + and word [EditBox.ed_flags],ed_shift_cl + call .enable_null + jmp .draw_cursor_text +.sh_cl_: +;;;;;;SHIFT end +;ЎЁр ЁЎтЊ  ЎчЈстЊЈ, ЏрЈ ЋЅЂЎЌ - Џр ЂЎЌ ЄЂЈІЅ­ЈЈ ЂыЄЅЋЅ­Јя +;ЄЋя ЎЁр ЁЎтЊЈ с­ятЈя ЂыЄЅЋЅ­Јя +;ЂхЎЄ­ыЅ Џ р ЌЅтры ebp=color ebx=ed_shift_pos + mov eax,dword ed_pos + cmp eax,ebx + + jae .sh_n + push eax ;ЌЅ­ьшЅЅ Ђ eax + push ebx ;ЁЎЋьшЅЅ + jmp .sh_n1 + ;ЅсЋЈ Ј­ чЅ +.sh_n: push ebx + push eax +.sh_n1: + call .check_offset + call .get_n + mov edx,eax ;size of ed_box + mov ecx,ed_offset + add eax,ecx ;eax = w_off= ed_offset+width + mov edx,eax ;save + pop ebx ;ЁЎЋьшЅЅ + pop eax ;ЌЅ­ьшЅЅ + + cmp eax,ecx ;ср Ђ­Ѕ­ЈЅ с ЌЅ­ьшЅЃЎ с offset. + jae .f_f ;ЅсЋЈ ЁЎЋьшЅ + xor eax,eax + cmp edx,ebx ;cр Ђ­ЈЌ р ЇЌЅр w_off с ЁЎЋьшЈЌ + jb @f + sub ebx,ecx + jmp .nxt_f +@@: mov ebx,edx + sub ebx,ecx + jmp .nxt_f +.f_f: + sub eax,ecx + cmp edx,ebx ;cр Ђ­ЈЌ р ЇЌЅр w_off с ЁЎЋьшЈЌ + jle @f + sub ebx,ecx + sub ebx,eax + jmp .nxt_f +@@: + mov ebx,edx + sub ebx,ecx + sub ebx,eax +.nxt_f: + mov edx,ebx + lea ebx,[eax*2+eax] + shl ebx,1 + add ebx,[EditBox.ed_left] + inc ebx + shl ebx,16 + lea ecx,[edx*2+edx] + shl ecx,1 + mov bx,cx + inc ebx + mov edx,ebp;[EditBox.shift_color] + + call .draw_bg_eax +@@: call .enable_null + ret +;;;;;;;;;;;;;;;;;;;;; +;“ст ­ЎЂЊ - с­ятЈЅ ЂыЄЅЋЅ­Јя Ђ ЎЄЈ­ сЈЌЂЎЋ +;;;;;;;;;;;;;;;;;;;;; +.drw_sim: + mov eax,dword ed_pos + call .draw_rectangle ;­ рЈсЎЂ ть ЏряЌЎуЃЎЋь­ЈЊ с Ї Є ­­ыЌ цЂЅтЎЌ + jmp @b +;;;;;;;;;;;;;;;;;;;;; +;”уЊцЈя уст ­ЎЂЊЈ ЂыЄЅЋЅ­Јя ЏрЈ ЄЂЈІЅ­Јя ЂЋЅЂЎ Ј ЂЏр ЂЎ Ј ­ І тЈЈ shift +;‹ЎЃЈЊ : +;;;;;;;;;; +.draw_wigwag: +;фу­ЊцЈя уст ­ЎЂЊЈ ЏЅрЅЌЅ­­ых + mov ebp,[EditBox.shift_color] + call .clear_cursor + + or word [EditBox.ed_flags],ed_shift_bac ;уст ­ЎЂЊ  фЋ Ѓ , ЂыЄЅЋЅ­­ЎЉ ЎЁЋ стЈ + mov ebp,[EditBox.shift_color] + mov eax,dword ed_pos + test word [EditBox.ed_flags],ed_left_fl + jz .low + jmp @f +;;;;;;;;;; +;”уЊцЈя уЄ ЋЅ­Јя ЂыЄЅЋЅ­Јя ЏрЈ ЄЂЈІЅ­Јя ЂЋЅЂЎ Ј ЂЏр ЂЎ Ј ­ І тЈЈ shift +;‹ЎЃЈЊ : +;;;;;;;;;; +.draw_wigwag_cl: +;фу­ЊцЈя уст ­ЎЂЊЈ ЏЅрЅЌЅ­­ых + mov ebp,[EditBox.ed_color] + call .clear_cursor + + mov ebp,[EditBox.ed_color] + mov eax,dword ed_pos + test word [EditBox.ed_flags],ed_left_fl + jz .low +@@: call .draw_rectangle ;­ рЈсЎЂ ть ЏряЌЎуЃЎЋь­ЈЊ Ї Њр шЈЂ ЅЌЎЉ ЎЁЋ стЈ + ret +.low: dec eax + jmp @b +;ЂхЎЄ­ЎЉ Џ р ЌЅтр ebx - ed_pos +.sh_first_sh: + test word [EditBox.ed_flags],ed_shift + je @f + mov dword ed_shift_pos_old,ebx + test word [EditBox.ed_flags],ed_shift_on + jne @f + mov dword ed_shift_pos,ebx + or word [EditBox.ed_flags],ed_shift_on +@@: ret +;ŽЁр ЁЎтЊ  Њр Љ­Јх ЏЎЋЎІЅ­ЈЉ Ђ editbox ЏрЈ ­ І тЎЌ shift +;ЏрЎЈЇЂЎЄЈт с­ятЈЅ ЂыЄЅЋЅ­ЈЅ, ЅсЋЈ ­Ѕт shift +;Ј­ чЅ ЂЎЎЁщЅ ЂыхЎЄЈт +.sh_st_of: + test word [EditBox.ed_flags],ed_shift + jne @f + test word [EditBox.ed_flags],ed_shift_bac + je @f + mov ebp,[EditBox.ed_color] + mov ebx,dword ed_shift_pos + call .sh_cl_ ;ЎчЈстЊ  ЂыЄЅЋЅ­ЎЃЎ фр ЃЌЅ­т  + and word [EditBox.ed_flags],ed_shift_cl ; ЎчЈстЊ  Ўт тЎЃЎ чтЎ уЁр ЋЈ ЂыЄЅЋЅ­ЈЅ + jmp .draw_cursor_text +@@: + and word [EditBox.ed_flags],ed_shift_off +edit_ex +;ЏрЎЂЅрЊ  сЎстЎя­Јя shift ЁыЋ ЋЈ Ў­ ­ І т р ­ьшЅ? +.sh_enable: + test word [EditBox.ed_flags],ed_shift + jne .sh_ext_en ;­ рЈсЎЂ ть Ї Њр шЅ­ыЉ ЏряЌЎуЃЎЋь­ЈЊ + + test word [EditBox.ed_flags],ed_shift_bac + je @f + call .check_offset + + mov ebp,[EditBox.ed_color] + mov ebx,dword ed_shift_pos + call .sh_cl_ ;ЎчЈстЊ  ЂыЄЅЋЅ­ЎЃЎ фр ЃЌЅ­т  + call .draw_wigwag_cl + and word [EditBox.ed_flags],ed_shift_cl ; 1Ђ р ­Ѕ ­уІ­Ў + ret + +@@: mov ebp,[EditBox.ed_color] + call .clear_cursor + call .check_offset + ret +.sh_ext_en: + call .check_offset + test word [EditBox.ed_flags],ed_offset_fl + je @f +;ЈсЎЂ ­ЈЅ Ї Њр шЅ­ых ЏряЌЎуЃЎЋь­ЈЊЎЂ Ј ЎчЈстЊ  Јх + mov eax,dword ed_shift_pos + mov ebx,dword ed_pos + mov ecx,dword ed_shift_pos_old +;ЏрЎЂЅрЊ  Ј рЈсЎЂ ­ЈЅ Ї Њр шЅ­ых ЎЁЋ стЅЉ + cmp eax,ecx + je .1_shem + jb .smaller + cmp ecx,ebx + ja .1_shem + call .draw_wigwag_cl ;clear + jmp .sh_e_end +.smaller: + cmp ecx,ebx + jb .1_shem + call .draw_wigwag_cl ;clear + jmp .sh_e_end +;alike = +.1_shem: call .draw_wigwag +.sh_e_end: and word [EditBox.ed_flags],ed_shift_off + ret +@@: mov ebp,[EditBox.shift_color] + mov ebx,dword ed_shift_pos + call .sh_cl_ + jmp .sh_e_end +;фу­ЊцЈя ЄЋя ЎЁр ЁЎтЊЈ shift ЏрЈ ­ І тЈЈ home and end +.sh_home_end: + mov ebp,[EditBox.ed_color] + call .clear_cursor + test word [EditBox.ed_flags],ed_shift_bac + je @f + mov ebp,[EditBox.ed_color] + mov ebx,dword ed_shift_pos_old + call .sh_cl_ + +@@: test word [EditBox.ed_flags],ed_shift + je .sh_exit_ ;ЂыЉтЈ + mov ebp,[EditBox.shift_color] + mov ebx,dword ed_shift_pos + call .sh_cl_ + or word [EditBox.ed_flags],ed_shift_bac ;уст ­ЎЂЊ  фЋ Ѓ , ЂыЄЅЋЅ­­ЎЉ ЎЁЋ стЈ + jmp .sh_e_end +.sh_exit_: call .check_offset + ret +;фу­ЊцЈя Ђ­ЅсЅ­Јя 0 ЏЎ  ЄрЅсу [EditBox.ed_size]+1 +.enable_null: + pusha + mov eax,[EditBox.ed_size] + mov ebx,[EditBox.ed_text] + test eax,eax + add eax,ebx + jne @f + inc eax +@@: xor ebx,ebx + mov [eax],bl +edit_ex +;- уЄ ЋЅ­ЈЅ сЈЌЂЎЋ  +;‚хЎЄ­ыЅ Є ­­ыЅ edx=[EditBox.ed_size];ecx=ed_pos +.del_char: + mov esi,[EditBox.ed_text] + test word [EditBox.ed_flags],ed_shift_on + je @f + mov eax,dword ed_shift_pos + mov ebx,esi + cmp eax,ecx + jae .dh_n + + mov ed_pos,eax ;чтЎ Ёы ­Ѕ ЁыЋЎ уЁЅЃ ­Јя ЊурсЎр  + mov ebp,ecx + sub ebp,eax + add ebx,eax ;eax ЌЅ­ьшЅ + sub edx,ecx + add esi,ecx + + mov dword ed_shift_pos,ebp + jmp .del_ch_sh + ;ЅсЋЈ Ј­ чЅ +.dh_n: + mov ebp,eax + sub ebp,ecx + add ebx,ecx + sub edx,eax + add esi,eax + mov dword ed_shift_pos,ebp + jmp .del_ch_sh + +@@: add esi,ecx ;уЊ Ї тЅЋь + сЌЅщЅ­ЈЅ Њ рЅ Ћь­ЎЌу ЁуффЅру + mov ebx,esi + inc esi + cld + + sub edx,ecx +.del_ch_sh: + + push edi + mov edi,ebx +@@: + lodsb + stosb + dec edx + jns @b + + pop edi + ret +;ЂычЈсЋЈть Ї Њр шЈЂ ЅЌую ЎЁЋ сть +;сЎЃЋ шЅ­ЈЅ Ђ ebp - ЏЅрЅЄ Ѕтся [EditBox.ed_size] +.clear_bg: + call .get_n ;ЏЎЋучЈть р ЇЌЅр Ђ сЈЌЂЎЋ х шЈрЈ­ы ЊЎЌЏЎ­Ѕ­т  + push eax + mov ebx,ed_offset + add eax,ebx ;eax = w_off= ed_offset+width + mov ebx,ebp ;[EditBox.ed_size] + + cmp eax,ebx + jb @f + mov eax,ed_pos + sub ebx,eax + mov ecx,ed_offset + sub eax,ecx + jmp .nxt +@@: mov ebx,ed_pos + push ebx + sub eax,ebx + mov ebx,eax ;It is don't optimal + + pop eax ;ed_pos + mov ecx,ed_offset + sub eax,ecx +.nxt: + mov ebp,eax ;ЏрЎЂЅрЊ  ­  ЂыхЎЄ Ї Њр шЈЂ ЅЌЎЉ ЎЁЋ стЈ Ї  ЏрЅЄЅЋы ЄЋЈ­ы + add ebp,ebx + pop edx + cmp ebp,edx + je @f + inc ebx + +@@: mov edx,ebx + lea ebx,[eax*2+eax] + shl ebx,1 + add ebx,[EditBox.ed_left] + inc ebx + shl ebx,16 + lea ecx,[edx*2+edx] + shl ecx,1 + mov bx,cx + mov edx,[EditBox.ed_color] + call .draw_bg_eax + ret +;;;;;;;;;;;;;;;;;;; +;;; ŽЁр ЁЎтЊ  ЏрЈЌЈтЈЂЎЂ +;;;;;;;;;;;;;;;;;;;; +; рЈсЎЂ ть ЏряЌЎуЃЎЋь­ЈЊ, цЂЅт ЏЅрЅЄ Ѕтся Ђ ebp +;ЂхЎЄ­ыЅ Џ р ЌЅтры: +;eax=dword ed_pos +;ebp=-цЂЅт [EditBox.ed_color] or [EditBox.shift_color] +.draw_rectangle: + mov ecx,dword ed_offset + sub eax,ecx + lea ebx,[eax*2+eax] + shl ebx,1 + inc ebx + add ebx,[EditBox.ed_left] + shl ebx,16 + add ebx,6 + mov edx,ebp + call .draw_bg_eax + ret +;;;;;;;;;;;;;;;;;; +;;рЎЂЅрЊ  ­ І т ЋЈ shift +;;;;;;;;;;;;;;;;;; +.check_shift: +pusha ;сЎхр ­ЈЌ ЂсЅ рЅЃЈстры + mcall 66,3,1 + test al,0x03 + je @f + or word [EditBox.ed_flags],ed_shift ;уст ­ЎЂЈЌ фЋ Ѓ +@@:edit_ex +} +;Ќ ЊрЎс ЊЋ ЂЈш ­  ЊЎтЎрыЅ ЏрЎЈсхЎЄЈт рЅ ЊцЈя +macro use_key_process backspase,delete,left,right,home,end,insert +{ +if backspase eq +else + cmp ah,8 + jz .backspace +end if +if delete eq +else + cmp ah,0xb6 + jz .delete +end if +if left eq +else + cmp ah,176 + jz .left +end if +if right eq +else + cmp ah,179 + jz .right +end if +if home eq +else + cmp ah,180 + jz .home +end if +if home eq +else + cmp ah,181 + jz .end +end if +if insert eq +else + cmp ah,185 ;insert + jz .insert +end if +} +macro use_key_no_process up,down,esc +{ +if up eq +else + cmp ah,177 + jz .editbox_exit +end if +if down eq +else + cmp ah,178 + jz .editbox_exit +end if +if esc eq +else + cmp ah,27 ;ESC - ЊЋ ЂЈш  )) + jz .editbox_exit +end if +} + +macro use_key_figures_only +{ + test word [EditBox.ed_flags],ed_figure_only ; тЎЋьЊЎ цЈфры ? + jz @f + cmp ah,'0' + jb .editbox_exit + cmp ah,'9' + ja .editbox_exit +@@: +} +macro are_key_shift_press +{ + test word [EditBox.ed_flags],ed_shift_on + je @f + ;‚хЎЄ­ыЅ Є ­­ыЅ edx=[EditBox.ed_size];ecx=ed_pos + push eax + mov edx,[EditBox.ed_size] + mov ecx, ed_pos + pusha +;;;;;;;;;;;;;;;;;;;;; + mov ebp,[EditBox.ed_color] + mov ebx,dword ed_shift_pos + call .sh_cl_ +;;;;;;;;;;;;;;;;;;;;; + popa + call .del_char +;;;; + mov eax,dword ed_shift_pos + mov ebx,[EditBox.ed_size] + sub ebx,eax + mov [EditBox.ed_size],ebx + pop eax +@@: +} +macro are_key_cur_end +{ + mov ecx,[EditBox.ed_size] + mov edx, [EditBox.ed_max] + test word [EditBox.ed_flags],ed_insert + jne @f + cmp ecx,edx + jae .editbox_exit +@@: mov ebx, ed_pos + cmp ebx,edx + jl @f ; ЅсЋЈ ЌЅ­ьшЅ ЈЋЈ р Ђ­Ў + jmp .editbox_exit + +@@: ; сЄЂЈЃ ЅЌ сЈЌЂЎЋы ЏЎсЋЅ ЊурсЎр  ЂЏр ЂЎ + mov ecx,[EditBox.ed_size] + push edi eax + mov ebp,edi + mov esi,[EditBox.ed_text] ; “Њ Ї тЅЋь ­  ЁуфЅр + ;уЄЅЌ р ЁЎт ть сЎ стрЎЊЎЉ + add esi,ecx ;add [EditBox.ed_size] ЄЎЁ ЂЈЌ max size + mov edi,esi + + cmp ecx,ebx ;…сЋЈ у ­ с ЏЎЇЈцЈя ЊурсЎр  = тЅЊущЅЌу р ЇЌЅру ­ ЏЅч т ­­ых сЈЌЂЎЋЎЂ т.Ѕ. ЊурсЎр стЎЈт Ђ ЊЎ­цЅ + je .In_k + + test word [ebp+40],ed_insert ;IF insert is enable т.Њ. edi ЈЇЌЅ­Ѕ­  ЄрЅсуЅЌ чЅрЅЇ ebp + jne .ins_v +;clear +pusha + mov edi,ebp + mov ebp,[EditBox.ed_size] + call .clear_bg +popa + sub ecx,ebx ; ЉЄЅЌ ЊЎЋ-ЂЎ сЈЌЂЎЋЎЂ ЄЋя ЏЅрЅЄЂЈІЅ­Јя. + inc edi ;‘ЌЅстЈЌ ­ шЈ сЈЌЂЎЋы Ђ Џр ЂЎ + std + inc ecx + @@: + ;-------- + lodsb + stosb + ;-------- + loop @b +.In_k: cld + pop eax + mov al,ah + stosb + pop edi +; Ђст ЂЋяЅЌ ЊЎЄ ЊЋ ЂЈшЈ туЄ , ЃЄЅ ЊурсЎр + ; уЂЅЋЈчЈЂ ЅЌ Ї­ чЅ­ЈЅ р ЇЌЅр  Ј ЏЎЇЈцЈЈ + inc dword [EditBox.ed_size] + inc dword ed_pos + call .draw_all2 + jmp .shift +} +macro use_work_key +{ +.insert: test word [EditBox.ed_flags],ed_insert ;not word ed_insert + je @f + and word [EditBox.ed_flags],ed_insert_cl + jmp .editbox_exit +@@: + or word [EditBox.ed_flags],ed_insert + jmp .editbox_exit +.ins_v: + dec dword [ebp+42];[EditBox.ed_size] ;processing is insert + sub esi,ecx + add esi,ebx + mov edi,esi +;clear +pusha + mov edi,ebp + mov ebp,ed_pos + call .clear_bg +popa + jmp .In_k +;;;;;;;;;;;;;;;;;;;;;;;;;;;; +.delete: + mov edx,[EditBox.ed_size] + mov ecx,ed_pos + cmp edx,ecx + jg .bac_del + test word [EditBox.ed_flags],ed_shift_on + jne .del_bac +edit_ex +.bac_del: + call .del_char + jmp .draw_all +;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;--- ­ І т  ЊЋ ЂЈш  backspace --- +.backspace: + ; ЏрЎЂЅряЅЌ, ЊурсЎр у ЋЅЂЎЃЎ Њр я ? + mov ecx,ed_pos + test ecx,ecx + jnz .del_bac + test word [EditBox.ed_flags],ed_shift_on + jne .bac_del + +edit_ex +.del_bac: + mov edx,[EditBox.ed_size] + cmp edx,ecx ;if ed_pos=[EditBox.ed_size] + je @f + dec ecx + call .del_char +@@: test word [EditBox.ed_flags],ed_shift_on + jne .bac_del + dec dword ed_pos +.draw_all: + push .shift;.draw_cursor_text;eax + + test word [EditBox.ed_flags],ed_shift_on + je @f + mov eax,dword ed_shift_pos + mov ebx,[EditBox.ed_size] + sub ebx,eax + mov [EditBox.ed_size],ebx + + mov ebp,[EditBox.ed_color] + call .clear_cursor + call .check_offset + call .draw_bg + ret +@@: dec dword [EditBox.ed_size] + +.draw_all2: + and word [EditBox.ed_flags],ed_shift_cl + mov ebp,[EditBox.ed_color] + call .clear_cursor + call .check_offset + mov ebp,[EditBox.ed_size] + call .clear_bg + ret +;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;--- ­ І т  ЊЋ ЂЈш  left --- +.left: mov ebx,ed_pos + test ebx,ebx + jz .sh_st_of + or word [EditBox.ed_flags],ed_left_fl + call .sh_first_sh + dec dword ed_pos + call .sh_enable + jmp .draw_cursor_text +;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;--- ­ І т  ЊЋ ЂЈш  right --- +.right: mov ebx,ed_pos + cmp ebx,[EditBox.ed_size] + je .sh_st_of + and word [EditBox.ed_flags],ed_right_fl + call .sh_first_sh + inc dword ed_pos + call .sh_enable + jmp .draw_cursor_text +;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +.home: + mov ebx,ed_pos + test ebx,ebx + jz .sh_st_of + call .sh_first_sh + xor eax,eax + mov ed_pos,eax + call .sh_home_end + jmp .draw_cursor_text +;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +.end: + mov ebx,ed_pos + cmp ebx,dword [EditBox.ed_size] + je .sh_st_of + call .sh_first_sh + mov eax,[EditBox.ed_size] + mov ed_pos,eax + call .sh_home_end + jmp .draw_cursor_text +} + +macro use_mouse_func scr_w +{ +;---------------------------------------------------------- +;--- ŽЁр ЁЎтЊ  .mouse_wigwag +;---------------------------------------------------------- +.mouse_wigwag: + shr eax,16 + or word [EditBox.ed_flags],ed_shift_bac+ed_shift_on+ed_shift +;;;;;;;;;;;;;;;;;; +;;ЏрЎцЅЄур  ЎЁр ЁЎтЊЈ ЏЎЋЎІЅ­Јя ЂыЄЅЋЅ­­ЎЃЎ тЅЊст , ЊЎЃЄ  ЏрЎЈсхЎЄЈт ЂыхЎЄ Ї  ЏрЅЄЅЋы editbox +;;;;;;;;;;;;;;;;;; + ;mov ebx,[IPC_table.box.left] + mov ebx,[EditBox.ed_left] +;if scr_w eq +;else +; add ebx,dword scr_w +;end if + cmp eax,ebx + jb .mleft + + add ebx,[EditBox.ed_width] + cmp eax,ebx + ja .mright + + sub ebx,[EditBox.ed_width] + + xor edx,edx + sub eax,ebx ; ЂычтЈЌ ЈЇ ЊЎЎрЄЈ­ т ЌышЊЈ ЏЎ ЎсЈ х ЊЎЎрЄЈ­ ты ЄЎ editbox ЏЎ ЎсЈ х + mov ebx,6 + div ebx +;;;;;;;;;;;;;;;;;; +;;ЏрЎцЅЄур  ЎЁр ЁЎтЊЈ ЏЎЋЎІЅ­Јя ЂыЄЅЋЅ­­ЎЃЎ тЅЊст , Ђ ЏрЅЄЅЋ х ЎЁЋ стЈ editbox +;;;;;;;;;;;;;;;;;; +;ЎЋучЈЋЈ ЊЎЎрЄЈ­ ты Ђ eax ЌышЊЈ, т.Ѕ. ЊуЄ  Ў­  ЏЅрЅЌЅстЈЋ сь +;ЈсЎЂ ­ЈЅ Ї Њр шЅ­ых ЏряЌЎуЃЎЋь­ЈЊЎЂ Ј ЎчЈстЊ  Јх + add eax,ed_offset ;ЄЎЁ ЂЈЌ сЌЅщЅ­ЈЅ + cmp eax,dword [EditBox.ed_size] ;ЅсЋЈ ЂышЋЈ Ї  ЏрЅЄЅЋы, тЎ ­ЈчЅЃЎ ­Ѕ ЄЅЋ ть + ja .mwigvag +.mdraw: + mov dword ed_pos,eax ;сЎхр ­ЈЌ ­ЎЂЎЅ Ї­ чЅ­ЈЅ +;ЈсЎЂ ­ЈЅ Ї Њр шЅ­ых ЏряЌЎуЃЎЋь­ЈЊЎЂ Ј ЎчЈстЊ  Јх + mov ecx,dword ed_shift_pos + mov ebx,dword ed_shift_pos_old + mov dword ed_shift_pos_old,eax ;Ђ­ЅсЅЌ ­ЎЂЎЅ Ї­ чЅ­ЈЅ ст рЎЉ ЏЎЇЈцЈЈ ЊурсЎр  +;ЏрЎЂЅрЊ  Ј рЈсЎЂ ­ЈЅ Ї Њр шЅ­ых ЎЁЋ стЅЉ + cmp ecx,ebx ;Ђыяс­яЅЌ ЊуЄ  ЁыЋЎ ЄЂЈІЅ­ЈЅ ­  ЎЄЈ­ ш Ѓ ­ Ї Є + je .m1_shem ;ЄЂЈІЅ­Јя ­Ѕ ЁыЋЎ р ­ЅЅ + jb .msmaller ;ЄЂЈІЅ­ЈЅ ЁыЋЎ -> + cmp ebx,eax ;ЄЂЈІЅ­ЈЅ ЁыЋЎ ЄЎ этЎЃЎ <- Ј тут Ќы ЏрЎЂЅряЅЌ сЅЉч с ЊуЄ  ЄЂЈІЅ­ЈЅ ЏрЎЈсхЎЄЈт + ja .m1_shem ;ЅсЋЈ ЁыЋЎ ЄЂЈІЅ­ЈЅ <- тЎ ­уІ­Ў Ї Њр сЈть ЎЁЋ сть + je .mwigvag ;ЅсЋЈ ЈЇЌЅ­Ѕ­Јя ­Ѕ ЁыЋЎ, тЎ ­ЈчЅЃЎ ­Ѕ ЄЅЋ ть + mov ebp,[EditBox.ed_color] ;тут ­уІ­Ў ЎчЈстЈть ЎЁЋ сть c ed_pos ed_shift_pos_old +;ЂхЎЄ­ыЅ Џ р ЌЅтры ebp=color ebx=ed_shift_pos + call .sh_cl_ + jmp .mwigvag +.msmaller: + cmp ebx,eax + jb .m1_shem + mov ebp,[EditBox.ed_color] +;ЂхЎЄ­ыЅ Џ р ЌЅтры ebp=color ebx=ed_shift_pos + call .sh_cl_ + jmp .mwigvag +;alike = +.m1_shem: + mov ebp,[EditBox.shift_color] +;ЂхЎЄ­ыЅ Џ р ЌЅтры ebp=color ebx=ed_shift_pos + mov ebx,ecx + call .sh_cl_ + jmp .mwigvag +.mwigvag: + and word [EditBox.ed_flags],ed_shift_mcl + jmp .draw_cursor_text +; popa +; ret +.mleft: + mov eax,ed_pos + cmp eax,0 + jbe .mwigvag + dec eax + call .check_offset + push eax + mov ebx,ed_shift_pos + mov ebp,[EditBox.shift_color] + call .sh_cl_ + pop eax + jmp .mdraw +.mright: + mov eax,ed_pos + mov ebx,[EditBox.ed_size] + cmp eax,ebx + jae .mwigvag + inc eax + call .check_offset + mov ebx,ed_shift_pos + mov ebp,[EditBox.shift_color] + push eax + call .sh_cl_ + pop eax + jmp .mdraw +} + +macro use_work_mouse scr_h,scr_w +;---------------------------------------------------------- +;--- € ­Ѕ уЄЅрІЈЂ ЅЌ ЋЈ Ќы ЊЋ ЂЈшу ЌышЊЈ, ЏЅрЅЌЅщ я ЊурсЎр, ЂЎ ЂсЅ р Ї­ыЅ стЎрЎ­ы? +;---------------------------------------------------------- +{ + test word [EditBox.ed_flags],ed_mouse_on + jne .mouse_wigwag +;---------------------------------------------------------- +;--- ЏрЎЂЅряЅЌ, ЏЎЏ Є Ѕт ЋЈ ЊурсЎр Ђ edit box ------------- +;---------------------------------------------------------- + ;mov ebx,[IPC_table.box.top] + + mov eax,[EditBox.ed_left] + mov ebx,[EditBox.ed_top] + mov ecx,[EditBox.ed_width] + mov edx,[EditBox.ed_height] + mov esi,[EditBox.mouseX] + mov edi,[EditBox.mouseY] + + call CheckCrossingBox + + cmp eax,0xffffff + jne ._blur + +;if scr_h eq +;else +; add ebx,scr_h +;end if + ;cmp ax,bx + ;jl ._blur;.mouse_end_no_focus + + ;add ebx,ed_height + ;cmp ax,bx + ;jg ._blur;.mouse_end_no_focus + + ;shr eax,16 + + ;mov ebx,[IPC_table.box.left] + ;add ebx,[EditBox.ed_left] +;if scr_w eq +;else +; add ebx,scr_w +;end if + ;cmp ax,bx + ;jl ._blur;.mouse_end_no_focus + + ;add ebx,[EditBox.ed_width] + ;cmp ax,bx + ;jg ._blur;.mouse_end_no_focus + + ;mov eax,[EditBox.mouseX] + +;--- ЈЇЌЅ­яЅЌ ЏЎЇЈцЈю ЊурсЎр  --- + ;push eax + mov ebp,[EditBox.ed_color] + call .clear_cursor + ;pop eax + mov eax,[EditBox.mouseX] +._mvpos: + ;mov ebx,dword [IPC_table.box.left] + xor edx,edx + sub eax,[EditBox.ed_left] + ;sub eax,ebx +;if scr_w eq +;else +; add ebx,scr_w +; sub eax,2 +;end if + mov ebx,6 + div bx + add eax,ed_offset + cmp eax,[EditBox.ed_size] + jna ._mshift + mov eax,[EditBox.ed_size] +._mshift: +;;;;;;; +;;‘ЅЊцЈя ЎЁр ЁЎтЊЈ shift Ј ЂыЄЅЋЅ­Јя ЏЎ shift +;;;;;;; + test word [EditBox.ed_flags],ed_shift_bac + je @f + mov ebp,dword [EditBox.ed_color] + mov ebx,dword ed_shift_pos + push eax + call .sh_cl_ + and word [EditBox.ed_flags],ed_shift_bac_cl + pop eax +@@: + test word [EditBox.ed_flags],ed_mouse_on + jne @f + + mov dword ed_shift_pos,eax + or word [EditBox.ed_flags],ed_mouse_on + mov dword ed_pos,eax + ;mov dword [mouse_flag],edi ;уст ­ЎЂЈЌ ЈЄЅ­тЈфЈЊ тЎр + bts word [EditBox.ed_flags],1 ;уст ­ЎЂЊ  фЎЊус  + jmp .m_sh +@@: + cmp eax,dword ed_shift_pos ;ЅсЋЈ ЏЎЇЈцЈЈ ­Ѕ ЈЇЌЅ­ЈЋЈсь + je .editbox_exit + mov ed_pos,eax + mov ebp,dword [EditBox.shift_color] + mov ebx,dword ed_shift_pos + call .sh_cl_ + or word [EditBox.ed_flags],ed_mous_adn_b ;уст ­ЎЂЈЌ ЁЈт чтЎ Ќы ЂыЄЅЋЈЋЈ +shift_on + +.m_sh: call .draw_text + call .draw_cursor +;---------------------------------------------------------- +;--- ЏрЎцЅЄур  уст ­ЎЂЊЈ фЎЊус  --------------------------- +;---------------------------------------------------------- + jmp .drc +._blur: + test word [EditBox.ed_flags],ed_always_focus + jne .editbox_exit + btr word [EditBox.ed_flags],1 ; ЅсЋЈ ­Ѕ Ђ фЎЊусЅ, ЂыхЎЄЈЌ + jnc .editbox_exit + + mov ebp,[EditBox.ed_color] + call .clear_cursor +.drc: call .draw_border + jmp .editbox_exit +} + + +; Œ ЊрЎс ЂыхЎЄ  +macro edit_ex +{ +popa +ret +} +macro debug +{ + ;----------- ЎтЋ ЄЊ  + pushad +; mov dword [ed_buffer.2],0 +; mov eax,edi + mov eax,dword [ed_buffer.2] + mov edi,ed_buffer.3 + call .str + ;рЈсЎЂ ­ЈЅ фЎ­  + mov eax,13 + mov ebx,178*65536+70 + mov ecx,28*65536+10 + xor edx,edx + int 0x40 + ;ЂыЂЎЄ Ї­ чЅ­Јя ­  эЊр ­ + mov eax,4 + mov ebx,180*65536+30 + mov ecx,0x10DDBBCC + mov edx,ed_buffer.3 + mov esi,8 + int 0x40 + popad + ;----------- ЎтЋ ЄЊ  +} +macro debug_func +{ +.str: + mov ecx,0x0a ;Ї Є Ѕтся сЈстЅЌ  счЈсЋЅ­Јя ЈЇЌЅ­яются рЅЃЈстры ebx,eax,ecx,edx ЂхЎЄ­ыЅ Џ р ЌЅтры eax - чЈсЋЎ + ;ЏрЅрЅЂЎЄ чЈсЋ  Ђ ASCII стрЎЊу ЂЇЎЄ­ыЅ Є ­­ыЅ ecx=сЈстЅЌ  счЈсЋЅ­я edi  ЄрЅс ЊуЄ  Ї ЏЈсыЂ ть, ЁуЄЅЌ стрЎЊу, ЏрЈчЅЌ ЊЎ­Ѕц ЏЅрЅЌЅ­­ЎЉ + cmp eax,ecx ;ср Ђ­Јть ЅсЋЈ Ђ eax ЌЅ­ьшЅ чЅЌ Ђ ecx тЎ ЏЅрЅЉтЈ ­  @@-1 т.Ѕ. ­  pop eax + jb @f + xor edx,edx ;ЎчЈстЈть edx + div ecx ;р ЇЄЅЋЈть - Ўст тЎЊ Ђ edx + push edx ;ЏЎЋЎІЈть Ђ стЅЊ + ;dec edi ;сЌЅщЅ­ЈЅ ­ЅЎЁхЎЄЈЌЎЅ ЄЋя Ї ЏЈсЈ с ЊЎ­ц  стрЎЊЈ + call .str;ЏЅрЅЉтЈ ­  с Ќу сЅЁя т.Ѕ. ЂыЇЂ ть с Ќу сЅЁя Ј т Њ ЄЎ тЎЃЎ ЌЎЌЅ­т  ЏЎЊ  Ђ eax ­Ѕ ст ­Ѕт ЌЅ­ьшЅ чЅЌ Ђ ecx + pop eax + @@: ;cmp al,10 ;ЏрЎЂЅрЈть ­Ѕ ЌЅ­ьшЅ ЋЈ Ї­ чЅ­ЈЅ Ђ al чЅЌ 10 (ЄЋя сЈстЅЌы счЈсЋЅ­я 10 Є ­­ я ЊЎЌ ­Є  - ЋЈш­ я)) + ;sbb al,$69 ;- чЅст­Ў Є ­­ я Ј­струЊцЈя ЌЅ­я Ї ст ЂЋяЅт Ї ЄуЌ ться т.Ѕ. я ­Ѕ Ї­ ю Њ Њ этЎ р ЁЎт Ѕт + ;das ;ЏЎсЋЅ Є ­­ЎЉ ЊЎЌ ­Єы Њ Њ Ёы ЏрЎЈсхЎЄЈт уЌЅ­ьшЅ­ЈЅ al ­  66h (Ђ Њ­ЈЃЅ ­ ЏЈс ­Ў ЄруЃЎЅ) + or al,0x30 ;Є ­­ я ЊЎЌ ­Є  ЊЎрЎчЅ чЅЌ ЄЂЅ ЂышЅ + stosb ;Ї ЏЈс ть эЋЅЌЅ­т ЈЇ рЅЃЈстр  al Ђ ячЅЊу Џ ЌятЈ es:edi + + ret ;ЂЅр­уться чЅ­ь Ј­тЅрЅс­ыЉ хЎЄ т.Њ. ЏЎЊ  Ђ стЅЊЅ хр ­Јться ЊЎЋ-ЂЎ ЂыЇЎЂЎЂ тЎ стЎЋьЊЎ р Ї Ќы Ј ЁуЄЅЌ ЂыЇыЂ ться +} + +;;;;;;;;;;;;;;; +;For LibGui +;;;;;;;;;;;;;;; +macro srt_ed_libgui +{ +;[EditBox.ed_width] equ [EditBox.ed_width] ;шЈрЈ­  ЊЎЌЏЎ­Ѕ­т  +;[EditBox.ed_left] equ [EditBox.ed_left] ;ЏЎЋЎІЅ­ЈЅ ЏЎ ЎсЈ х +;[EditBox.ed_top] equ [EditBox.ed_top] ;ЏЎЋЎІЅ­ЈЅ ЏЎ ЎсЈ у +;[EditBox.ed_color] equ [EditBox.ed_color] ;цЂЅт фЎ­  ЊЎЌЏЎ­Ѕ­т  +;[EditBox.shift_color] equ [EditBox.shift_color] ;=0x6a9480 +;[EditBox.ed_focus_border_color] equ [EditBox.ed_focus_border_color] ;цЂЅт р ЌЊЈ ЊЎЌЏЎ­Ѕ­т  +;[EditBox.ed_blur_border_color] equ [EditBox.ed_blur_border_color] ;цЂЅт ­Ѕ  ЊтЈЂ­ЎЃЎ ЊЎЌЏЎ­Ѕ­т  +;[EditBox.ed_text_color] equ [EditBox.ed_text_color] ;цЂЅт тЅЊст  +;[EditBox.ed_max] equ [EditBox.ed_max] ;ЊЎЋ-ЂЎ сЈЌЂЎЋЎЂ ЊЎтЎрыЅ ЌЎІ­Ў Ќ ЊсЈЌ Ћь­Ў ЂЂЅстЈ +;[EditBox.ed_text] equ [EditBox.ed_text] ;уЊ Ї тЅЋь ­  ЁуфЅр +;[EditBox.ed_flags] equ [EditBox.ed_flags] ;фЋ ЃЈ +;[EditBox.ed_size] equ [EditBox.ed_size] ;ЊЎЋ-ЂЎ сЈЌЂЎЋЎЂ +ed_pos equ [EditBox.ed_pos] ;ЏЎЇЈцЈя ЊурсЎр  +ed_offset equ [EditBox.ed_offset] ;сЌЅщЅ­ЈЅ +cl_curs_x equ [EditBox.cl_curs_x] ;ЏрЅЄыЄущЅЅ ЊЎЎрЄЈ­ т  ЊурсЎр  ЏЎ х +cl_curs_y equ [EditBox.cl_curs_y] ;ЏрЅЄыЄущЅЅ ЊЎЎрЄЈ­ т  ЊурсЎр  ЏЎ у +ed_shift_pos equ [EditBox.ed_shift_pos] ;ЏЎЋЎІЅ­ЈЅ ЊурсЎр  +ed_shift_pos_old equ [EditBox.ed_shift_pos_old] ;ст рЎЅ ЏЎЋЎІЅ­ЈЅ ЊурсЎр  +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;Bit mask from editbox +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +ed_figure_only= 1000000000000000b ;ЎЄ­Ј сЈЌЂЎЋы +ed_always_focus= 100000000000000b +ed_focus= 10b ;фЎЊус ЏрЈЋЎІЅ­Јя +ed_shift_on= 1000b ;ЅсЋЈ ­Ѕ уст ­ЎЂЋЅ­ -Ї­ чЈт ЂЏЅрЂыЅ ­ І т shift,ЅсЋЈ ЁыЋ уст ­ЎЂЋЅ­, Ї­ чЈт Ќы уІЅ чтЎ - тЎ ЄЅЋ ЋЈ уЄЅрІЈЂ я shift +ed_shift_on_off=1111111111110111b +ed_shift= 100b ;ЂЊЋюч Ѕтся ЏрЈ ­ І тЈЈ ­  shift т.Ѕ. ЅсЋЈ ­ ІЈЌ ю +ed_shift_off= 1111111111111011b +ed_shift_bac= 10000b ;ЁЈт ЄЋя ЎчЈстЊЈ ЂыЄЅЋЅ­ЎЃЎ shift т.Ѕ. ЏрЈ уст ­ЎЂЊЅ ЃЎЂЎрЈт чтЎ Ѕсть ЂыЄЅЋЅ­ЈЅ +ed_shift_bac_cl=1111111111101111b ;ЎчЈстЊ  ЏрЈ уЄ ЋЅ­ЈЈ ЂыЄЅЋЅ­Јя +ed_shift_cl= 1111111111100011b +ed_shift_mcl= 1111111111111011b +ed_left_fl= 100000b +ed_right_fl= 1111111111011111b +ed_offset_fl= 1000000b +ed_offset_cl= 1111111110111111b +ed_insert= 10000000b +ed_insert_cl= 1111111101111111b +ed_mouse_on = 100000000b +ed_mous_adn_b= 100011000b +ed_mouse_on_off=1111111011111111b +ed_height=14 ; ЂысЎт  +} \ No newline at end of file diff --git a/programs/develop/libGUI/src/image.inc b/programs/develop/libGUI/src/image.inc new file mode 100644 index 0000000000..7c440e84ce --- /dev/null +++ b/programs/develop/libGUI/src/image.inc @@ -0,0 +1,140 @@ + +im_control_data_size = 26 +im_redraw_all = 10000000b +im_redraw_all_off = 01111111b +im_special_redraw_on = 1b +im_special_redraw_off = 11111110b + +;**************************************************** +;*******************craete Image********************** +;**************************************************** +;IN +;pointer to parend +;pointer to Image's structure +;OUT +;pointer to initialized Image's structure +align 4 + +craete_image: + + mov ebx,[esp+4] + mov eax,[esp+8] + + mov [PointerToStructureForImage],eax + + mov eax,control_header_size+im_control_data_size + call craete_control + + ;set all image's parameters in control + mov [eax],dword image + + mov ecx,im_control_data_size + mov esi,[PointerToStructureForImage] + mov edi,eax + add edi,control_header_size + rep movsb + + call get_skin_height + + mov ebx,[PointerToStructureForImage] + mov ecx,[ebx+6] ;x + mov edx,[ebx+10] ;y + mov esi,[ebx+14] ;size x + mov edi,[ebx+18] ;size y + add ecx,border_width + add edx,[skin_height] + ;copy information to control + mov [eax+24],ecx + mov [eax+28],edx + mov [eax+32],esi + mov [eax+36],edi + + ret 8 + +;**************************************************** +;********************Draw Image********************** +;**************************************************** +;IN +;pointer to control of button +;message +;OUT +;not returned value +align 4 + +image: + + ;get message + mov eax,[esp+8] + + ;get pointer to control of image + mov esi,[esp+4] + mov [PointerForImage],esi + ;copy control to local control + add esi,control_header_size + mov edi,dword Image + mov ecx,im_control_data_size + rep movsb + + + cmp [eax],dword 1 + jne no_redraw_all_image + + or [Image.type],im_redraw_all + no_redraw_all_image: + + cmp [eax],dword 3 + jne no_special_message_image + + xor eax,eax + mov al,[Image.type] + and al,im_special_redraw_on + test al,al + jz no_activate_redraw_image + + and [Image.type],im_special_redraw_off + or [Image.type],im_redraw_all + no_activate_redraw_image: + + no_special_message_image: + + ;load coordinats and size from control + mov eax,[PointerForImage] + mov ebx,[eax+24] ;x + mov ecx,[eax+28] ;y + mov edx,[eax+32] ;size x + mov esi,[eax+36] ;size y + ;set current coordinats and sizes in zakladka + mov [Image.x],ebx + mov [Image.y],ecx + mov [Image.sizex],edx + mov [Image.sizey],esi + + xor eax,eax + mov al,[Image.type] + and al,im_redraw_all + test al,al + jz no_redraw_image_ + + and [Image.type],im_redraw_all_off + + mov esi,dword Image + mov edi,[PointerForImage] + add edi,control_header_size + mov ecx,2 + rep movsb + + mov eax,7 + mov ebx,[Image.pointer] + mov ecx,[Image.sizex] + shl ecx,16 + add ecx,[Image.sizey] + mov edx,[Image.x] + shl edx,16 + add edx,[Image.y] + mcall + + no_redraw_image_: + + exit_image: + + ret 8 diff --git a/programs/develop/libGUI/src/libGUI.asm b/programs/develop/libGUI/src/libGUI.asm new file mode 100644 index 0000000000..4e4c9cb8f4 --- /dev/null +++ b/programs/develop/libGUI/src/libGUI.asm @@ -0,0 +1,537 @@ +;********************************************************************** +; library of Graphics Universal Interface for Kolibri operation system +; +; version 071001 +; 2007 year +; +;autors: +; +;andrew_programmer polynki@mail.ru +; +;menegement of controls : destroy_control, send_message +;GUI components : button,scroller,Bookmark,text,image,number,progres bar +; +; and Maxxxx32 +; +;GUI components : CheckBox,EditBox +; +;********************************************************************** + +format MS COFF + +public EXPORTS + +control_header_size = 44 + +border_width = 5 + +section '.flat' code readable align 16 + + include 'macros.inc' + include 'debug.inc' + + ;GUI components + + include 'button.inc' + + include 'scroller.inc' + + include 'bookmark.inc' + + include 'image.inc' + + include 'text.inc' + + include 'number.inc' + + include 'check_box.inc' + + include 'edit_box.inc' + + include 'progress_bar.inc' + + ;engen of libGUI(menegment of controls) + + include 'menegment_of_controls.inc' + + ;functions which proved work of GUI components + + include 'draw.inc' + + include 'string.inc' + + include 'check_crossing_box.inc' + + include 'memory.inc' + + ;function for get version of library + include 'version.inc' + + ;function for resize GUI component + include 'resize_component.inc' + + ;function for remove GUI component + include 'remove_component.inc' + +align 16 +EXPORTS: + dd szDestroyControl,destroy_control + dd szSendMessage,send_message + dd szVersion,get_version + dd szResizeComponent,resize_component + dd szRemoveComponent,remove_component + dd szcraeteButton,craete_button + dd szcraeteScroller,craete_scroller + dd szcraeteBookmark,craete_Bookmark + dd szcraeteImage,craete_image + dd szcraeteText,craete_text + dd szcraeteNumber,craete_number + dd szcraeteCheckBox,craete_check_box + dd szcraeteEditBox,craete_edit_box + dd szcraeteProgressBar,craete_progress_bar + dd 0,0 + +szDestroyControl db 'DestroyControl',0 +szSendMessage db 'SendMessage',0 +szVersion db 'Version',0 +szResizeComponent db 'ResizeComponent',0 +szRemoveComponent db 'RemoveComponent',0 +szcraeteButton db 'CraeteButton',0 +szcraeteScroller db 'CraeteScroller',0 +szcraeteBookmark db 'CraeteBookmark',0 +szcraeteImage db 'CraeteImage',0 +szcraeteText db 'CraeteText',0 +szcraeteNumber db 'CraeteNumber',0 +szcraeteCheckBox db 'CraeteCheckbox',0 +szcraeteEditBox db 'CraeteEditbox',0 +szcraeteProgressBar db 'CraeteProgressbar',0 + +section '.data' data readable writable align 16 +;************************************************ +;******************DLL DATA********************** +;************************************************ + +point db '.',0 +signum db '-',0 + +BitsPerPixel rd 1 +BytesPerString rd 1 +WindowCoordinatX rd 1 +WindowCoordinatY rd 1 +WindowSizeX rd 1 +WindowSizeY rd 1 + +PointerToMem rd 1 +offset rd 1 + +v rd 1 +v2 rd 1 +v3 rd 1 + +r_min rb 1 +r_max rb 1 +g_min rb 1 +g_max rb 1 +b_min rb 1 +b_max rb 1 +r rb 1 +g rb 1 +b rb 1 +r_f rd 1 +g_f rd 1 +b_f rd 1 +step_r rd 1 +step_g rd 1 +step_b rd 1 +length rd 1 +length2 rd 1 +Color rd 1 +AveregeColor rd 1 + +line_coordinat_x rd 1 +line_coordinat_y rd 1 +line_size_x rd 1 +line_size_y rd 1 +line_size_y_f rd 1 + +x rd 1 +y rd 1 +xo rd 1 +yo rd 1 +x_ctl rd 1 +y_ctl rd 1 + +;ReturnAddresButton rd 1 +;ReturnAddresScroller rd 1 +;ReturnAddresBookmark rd 1 +;ReturnAddresImage rd 1 +;ReturnAddresText rd 1 +;ReturnAddresNumber rd 1 +;ReturnAddresCheckBox rd 1 +;ReturnAddresEditBox rd 1 +;ReturnAddresProgressBar rd 1 + +Button_Flag rb 1 + +Scrollersize rd 1 +ControlID rd 1 +Message rd 4 +Parend rd 1 +Control rd 1 +ReturnControl rd 1 +PointerToControl rd 1 +ActiveControl rd 1 +ActiveControlForKeys rd 1 +ButtonsOfMouse rd 1 + +PointerToStructureForBookmark rd 1 +ParendForBookmark rd 1 +PointerToStructureForButton rd 1 +ParendForButton rd 1 +PointerToStructureForScroller rd 1 +ParendForScroller rd 1 +PointerToStructureForImage rd 1 +PointerToStructureForText rd 1 +PointerToStructureForNumber rd 1 +PointerToStructureForCheckBox rd 1 +PointerToStructureForEditBox rd 1 +PointerToStructureForProgressBar rd 1 + +PointerForButton rd 1 +PointerForScroller rd 1 +PointerForBookmark rd 1 +PointerForImage rd 1 +PointerForText rd 1 +PointerForNumber rd 1 +PointerForCheckBox rd 1 +PointerForEditBox rd 1 +PointerForProgressBar rd 1 + +ChisloZakladok rd 1 + +integer_part rd 1 +float_part rd 1 +tochnost1 rd 1 +tochnost2 rd 1 +signum_float_number rb 1 + +skin_height rd 1 + +;********************************* +;**********GUI structures********* +;********************************* + +;struc CONTROL +;{ +; .ctrl_proc rd 0 ;0 +; .ctrl_fd rd 0 ;4 +; .ctrl_bk rd 0 ;8 +; .child_fd rd 0 ;12 +; .child_bk rd 0 ;16 +; .parend rd 0 ;20 +; .x rd 0 ;24 +; .y rd 0 ;28 +; .sizex rd 0 ;32 +; .sizey rd 0 ;36 +; .ID rd 0 ;40 +;} + +struc BUTTON +{ + .ctrl_proc rd 1 + .ctrl_fd rd 1 + .ctrl_bk rd 1 + .child_fd rd 1 + .child_bk rd 1 + .parend rd 1 + .ctrl_x rd 1 + .ctrl_y rd 1 + .ctrl_sizex rd 1 + .ctrl_sizey rd 1 + .ctrl_ID rd 1 + + .type rb 1 + .flag rb 1 + .x rw 1 + .y rw 1 + .width rw 1 + .height rw 1 + .image rd 1 + .imageX rw 1 + .imageY rw 1 + .imageSizeX rw 1 + .imageSizeY rw 1 + .transparentColor rd 1 + .text rd 1 + .textX rw 1 + .textY rw 1 + .textcolor rd 1 + .color1 rd 1 + .color2 rd 1 + .mouseX rw 1 + .mouseY rw 1 +} + +struc SCROLLER +{ + .ctrl_proc rd 1 + .ctrl_fd rd 1 + .ctrl_bk rd 1 + .child_fd rd 1 + .child_bk rd 1 + .parend rd 1 + .ctrl_x rd 1 + .ctrl_y rd 1 + .ctrl_sizex rd 1 + .ctrl_sizey rd 1 + .ctrl_ID rd 1 + + .type rb 1 + .x rw 1 + .y rw 1 + .length rw 1 + .color1 rd 1 + .size rd 1 + .pos rd 1 + .buttons_flags rw 1 + .ChildButton1 rd 1 + .ChildButton2 rd 1 + .mouseX rw 1 + .mouseY rw 1 +} + +;******************************** +;*********Child Buttons********** +;******************************** +struc CHILDBUTTON +{ + .type rb 1 + .flag rb 1 + .x rw 1 + .y rw 1 + .width rw 1 + .height rw 1 + .image rd 1 + .imageX rw 1 + .imageY rw 1 + .imageSizeX rw 1 + .imageSizeY rw 1 + .transparentColor rd 1 + .text rd 1 + .textX rw 1 + .textY rw 1 + .textcolor rd 1 + .color1 rd 1 + .color2 rd 1 + .mouseX rw 1 + .mouseY rw 1 +} + +struc BOOKMARK +{ + .type rb 1 + .flag rb 1 + .x rd 1 + .y rd 1 + .sizex rd 1 + .sizey rd 1 + .color1 rd 1 + .reserved rd 1 + .color2 rd 1 + + .FullBookmarkSizeX rd 1 + .BookmarkSizeX rd 1 + .PointerToTextForBookmark rd 1 + .BookmarkX rd 1 + .BookmarkY rd 1 + .ChildButtonsForBookmark rd 1 + .CounterChildButtons rd 1 + .ChisloZakladok rd 1 + .ChisloStrokeZakladok rd 1 + .MessageForChildButton rd 5 + .ChildControlForBookmark rd 1 + .NumberBookmarksInActiveString rd 1 + .NumberBookmarksInEndString rd 1 + .PointerToActiveBookmarks rd 1 + .PointerToEndBookmarks rd 1 + .BookmarkFlag rb 1 + .y_end_stroke rd 1 + + .CounterChildControls rd 1 + .ActiveChildControl rd 1 + .AddresOfActiveChildControl rd 1 + .MouseX rd 1 + .MouseY rd 1 + + .DefectSizeX rd 1 + .ControlAddres rd 1 + + .counter1 rd 1 + .counter2 rd 1 + + .NumberActiveControl rd 1 + + .WorkPlace_x rd 1 + .WorkPlace_y rd 1 + .WorkPlace_sizex rd 1 + .WorkPlace_sizey rd 1 + .WorkPlace_windowx rd 1 + .WorkPlace_windowsizex rd 1 + +} + +struc IMAGE +{ + .type rb 1 + .flag rb 1 + .color rd 1 + .x rd 1 + .y rd 1 + .sizex rd 1 + .sizey rd 1 + .pointer rd 1 +} + +struc TEXT +{ + .type rb 1 + .flag rb 1 + .color rd 1 + .x rd 1 + .y rd 1 + .length rd 1 + .pointer rd 1 +} + +struc NUMBER +{ + .type rb 1 + .flag rb 1 + .color rd 1 + .x rd 1 + .y rd 1 + .number rd 1 + .parameters rd 1 +} + +struc CHECKBOX +{ + .ch_flags rw 1 + .ch_left rw 1 + .ch_top rw 1 + .ch_text_margin rd 1 + .ch_size rd 1 + .ch_size_2 rw 1 + .ch_size_3 rw 1 + .ch_color rd 1 + .ch_border_color rd 1 + .ch_text_color rd 1 + .ch_text_ptr rd 1 + .ch_text_length rw 1 + .mouseX rd 1 + .mouseY rd 1 +} + +struc EDITBOX +{ + .ed_width rd 1 + .ed_left rd 1 + .ed_top rd 1 + .ed_color rd 1 + .shift_color rd 1 + .ed_focus_border_color rd 1 + .ed_blur_border_color rd 1 + .ed_text_color rd 1 + .ed_max rd 1 + .ed_text rd 1 + .ed_flags rw 1 + .ed_size rd 1 + .ed_pos rd 1 + .ed_offset rd 1 + .cl_curs_x rd 1 + .cl_curs_y rd 1 + .ed_shift_pos rd 1 + .ed_shift_pos_old rd 1 + .ed_height rd 1 + .mouseX rd 1 + .mouseY rd 1 +} + +struc PROGRESSBAR +{ + .type rb 1 + .flag rb 1 + .color1 rd 1 + .color2 rd 1 + .x rd 1 + .y rd 1 + .sizex rd 1 + .sizey rd 1 + .progress rd 1 + .color3 rd 1 +} + +;******************************** +;*Graphics primitives structures* +;******************************** +struc LINE +{ + .x1 rd 1 + .y1 rd 1 + .x2 rd 1 + .y2 rd 1 + .color rd 1 +} + +struc PIXEL +{ + .x rd 1 + .y rd 1 + .color rd 1 +} + +struc FONT1 +{ + .sizeX rd 6 + .sizeY rd 9 + .x rd 1 + .y rd 1 +} + +struc RECTANGLE +{ + .x rd 1 + .y rd 1 + .width rd 1 + .height rd 1 + .color rd 1 +} + +struc SCROLLBAR +{ + .x rd 1 + .y rd 1 +} + +Line LINE +Pixel PIXEL +Font FONT1 +Rectangle RECTANGLE +ScrollBar SCROLLBAR +ChildButton CHILDBUTTON + +Button BUTTON +Scroller SCROLLER +Bookmark BOOKMARK +Image IMAGE +Text TEXT +Number NUMBER +CheckBox CHECKBOX +EditBox EDITBOX +ProgressBar PROGRESSBAR + +pointer rd 50 +pointer2 rd 13 +IPC_table process_information; rb 1024 +colors_table1 rd 15 +colors_table2 rd 15 diff --git a/programs/develop/libGUI/src/macros.inc b/programs/develop/libGUI/src/macros.inc new file mode 100644 index 0000000000..14185dbfce --- /dev/null +++ b/programs/develop/libGUI/src/macros.inc @@ -0,0 +1,269 @@ +; new application structure +macro meos_app_start + { + use32 + org 0x0 + + db 'MENUET01' + dd 0x01 + dd __start + dd __end + dd __memory + dd __stack + + if used __params & ~defined __params + dd __params + else + dd 0x0 + end if + + dd 0x0 + } +MEOS_APP_START fix meos_app_start + +macro code + { + __start: + } +CODE fix code + +macro data + { + __data: + } +DATA fix data + +macro udata + { + if used __params & ~defined __params + __params: + db 0 + __end: + rb 255 + else + __end: + end if + __udata: + } +UDATA fix udata + +macro meos_app_end + { + align 32 + rb 2048 + __stack: + __memory: + } +MEOS_APP_END fix meos_app_end + + +; macro for defining multiline text data +struc mstr [sstring] + { + forward + local ssize + virtual at 0 + db sstring + ssize = $ + end virtual + dd ssize + db sstring + common + dd -1 + } + + +; strings +macro sz name,[data] { ; from MFAR [mike.dld] + common + if used name + label name + end if + forward + if used name + db data + end if + common + if used name + .size = $-name + end if +} + +macro lsz name,[lng,data] { ; from MFAR [mike.dld] + common + if used name + label name + end if + forward + if (used name)&(lang eq lng) + db data + end if + common + if used name + .size = $-name + end if +} + + + +; easy system call macro +macro mpack dest, hsrc, lsrc +{ + if (hsrc eqtype 0) & (lsrc eqtype 0) + mov dest, (hsrc) shl 16 + lsrc + else + if (hsrc eqtype 0) & (~lsrc eqtype 0) + mov dest, (hsrc) shl 16 + add dest, lsrc + else + mov dest, hsrc + shl dest, 16 + add dest, lsrc + end if + end if +} + +macro __mov reg,a,b { ; mike.dld + if (~a eq)&(~b eq) + mpack reg,a,b + else if (~a eq)&(b eq) + mov reg,a + end if +} + +macro mcall a,b,c,d,e,f { ; mike.dld + __mov eax,a + __mov ebx,b + __mov ecx,c + __mov edx,d + __mov esi,e + __mov edi,f + int 0x40 +} + + + +; optimize the code for size +__regs fix + +macro add arg1,arg2 + { + if (arg2 eqtype 0) + if (arg2) = 1 + inc arg1 + else + add arg1,arg2 + end if + else + add arg1,arg2 + end if + } + +macro sub arg1,arg2 + { + if (arg2 eqtype 0) + if (arg2) = 1 + dec arg1 + else + sub arg1,arg2 + end if + else + sub arg1,arg2 + end if + } + +macro mov arg1,arg2 + { + if (arg1 in __regs) & ((arg2 eqtype 0) | (arg2 eqtype '0')) + if (arg2) = 0 + xor arg1,arg1 + else if (arg2) = 1 + xor arg1,arg1 + inc arg1 + else if (arg2) = -1 + or arg1,-1 + else if (arg2) > -128 & (arg2) < 128 + push arg2 + pop arg1 + else + mov arg1,arg2 + end if + else + mov arg1,arg2 + end if + } + + +macro struct name + { + virtual at 0 + name name + sizeof.#name = $ - name + end virtual + } + +; structures used in MeOS +struc process_information + { + .cpu_usage dd ? ; +0 + .window_stack_position dw ? ; +4 + .window_stack_value dw ? ; +6 + .not_used1 dw ? ; +8 + .process_name rb 12 ; +10 + .memory_start dd ? ; +22 + .used_memory dd ? ; +26 + .PID dd ? ; +30 + .x_start dd ? ; +34 + .y_start dd ? ; +38 + .x_size dd ? ; +42 + .y_size dd ? ; +46 + .slot_state dw ? ; +50 + dw ? ; +52 - reserved + .client_left dd ? ; +54 + .client_top dd ? ; +58 + .client_width dd ? ; +62 + .client_height dd ? ; +66 + .wnd_state db ? ; +70 + rb (1024-71) + } +struct process_information + +struc system_colors + { + .frame dd ? + .grab dd ? + .grab_button dd ? + .grab_button_text dd ? + .grab_text dd ? + .work dd ? + .work_button dd ? + .work_button_text dd ? + .work_text dd ? + .work_graph dd ? + } +struct system_colors + + +; constants + +; events +EV_IDLE = 0 +EV_TIMER = 0 +EV_REDRAW = 1 +EV_KEY = 2 +EV_BUTTON = 3 +EV_EXIT = 4 +EV_BACKGROUND = 5 +EV_MOUSE = 6 +EV_IPC = 7 +EV_STACK = 8 + +; event mask bits for function 40 +EVM_REDRAW = 1b +EVM_KEY = 10b +EVM_BUTTON = 100b +EVM_EXIT = 1000b +EVM_BACKGROUND = 10000b +EVM_MOUSE = 100000b +EVM_IPC = 1000000b +EVM_STACK = 10000000b \ No newline at end of file diff --git a/programs/develop/libGUI/src/memory.inc b/programs/develop/libGUI/src/memory.inc new file mode 100644 index 0000000000..fcbf74ff7a --- /dev/null +++ b/programs/develop/libGUI/src/memory.inc @@ -0,0 +1,32 @@ +;eax - size +;OUT +;eax - pointer +malloc: + + push ebx + push ecx + + mov ecx,eax + mov eax,68 + mov ebx,12 + mcall + + pop ecx + pop ebx + + ret + +;eax - pointer +free: + push ebx + push ecx + + mov ecx,eax + mov eax,68 + mov ebx,13 + mcall + + pop ecx + pop ebx + + ret \ No newline at end of file diff --git a/programs/develop/libGUI/src/menegment_of_controls.inc b/programs/develop/libGUI/src/menegment_of_controls.inc new file mode 100644 index 0000000000..fda1bba801 --- /dev/null +++ b/programs/develop/libGUI/src/menegment_of_controls.inc @@ -0,0 +1,503 @@ +;**************************************************************** +;***************Elements of menegment for Controls*************** +;**************************************************************** + +;********************************************************** +;********************craete control************************* +;********************************************************** + +;IN +;eax - ctructure's size +;ebx - Parend(pointer to structure for parend) +;OUT +;eax - pointer to new control + +craete_control: + + test eax,eax + jnz no_null_size + + mov eax,1 + no_null_size: + + call malloc + mov [ReturnControl],eax + + push ebx ;parend + push eax ;control + call AddObject + + mov eax,[ReturnControl] + + ;information about craete control output to debug board + call new_line + mov [s_p],s_craete + call print_string + debug_print_dec [ReturnControl] + mov [s_p],s_parend + call print_string + debug_print_dec dword[eax+20] + mov [s_p],s_last + call print_string + debug_print_dec dword[eax+4] + ;-------------------------------- + + ret + +AddObject: + + mov ecx,[esp+4] ;control + mov edx,[esp+8] ;parend + + mov eax,[edx+12] ;eax=parend->child_fd + test eax,eax + jnz else_parend_add_object + + add [ControlID],1 + mov esi,[ControlID] + + mov [edx+12],ecx ;Parend->child_fd=control + mov [edx+16],ecx ;Parend->child_bk=control + + mov [ecx+20],edx ;control->parend=Parend + mov [ecx+4],edx ;control->ctrl_fd=Parend + mov [ecx+40],esi ;control->ctrl_ID=ID + + jmp exit_if_parend_add_object + else_parend_add_object: + + add [ControlID],1 + mov esi,[ControlID] + + mov edi,[edx+16] ;last_control=Parend->child_bk + mov [edx+16],ecx ;Parend->child_bk=control + + mov [edi+8],ecx ;last_control->ctrl_bk=control + mov [ecx+4],edi ;control->ctrl_fd=last_control; + mov [ecx+20],edx ;control->parend=Parend; + mov [ecx+40],esi ;control->ctrl_ID=ID + + exit_if_parend_add_object: + + ret 8 + + +;************************************************************ +;***********************Destroy control********************** +;************************************************************ + +;Delete Control. +;IN +;pointer to control for delete +;OUT +;not returned value +align 4 + +destroy_control: + + mov eax,[esp+4] + + mov ebx,[eax+20] ;get parend for control + + ;checking pointer of control to 0 + test eax,eax + jz exit_destroy_control + + ;checking parend to main parend(parend of window) + ;if parend equ main parend than exit + test ebx,ebx + jz exit_destroy_control + + mov ecx,[ebx+12] ;Parend->child_fd + test ecx,ecx + jz exit_destroy_control + + mov ecx,[ebx+12] ;Parend->child_fd + mov edx,[ebx+16] ;Parend->child_bk + + cmp ecx,edx + jne no_if_parend_child_fd_child_bk + + cmp ecx,eax + jne no_if_parend_child_fd_control + + mov [ebx+12],dword 0 ;Parend->child_fd=0 + mov [ebx+16],dword 0 ;Parend->child_bk=0 + + ;send message to control for deleting + push eax + + mov [Message],dword -1 + mov ebx,[eax] ;load .... for control + push Message + push eax + call ebx + + pop eax + + push eax + call free + pop eax + + call new_line + mov [s_p],s_destroy + call print_string + debug_print_dec eax + mov [s_p],s_1 + call print_string + + jmp exit_destroy_control + no_if_parend_child_fd_control: + + no_if_parend_child_fd_child_bk: + ;---------------------------------------------- + mov esi,ecx ;seek_control=Parend->child_fd + + while_seek_control: + cmp esi,0 + je exit_destroy_control + ;******************************************************************* + cmp esi,eax + jne no_if_seek_control_control + ;*************************************************************** + mov edi,[esi+8] + test edi,edi + jz no_if_seek_control_ctrl_bk + ;*********************************************************** + mov ecx,[esi+4] + mov edx,[esi+8] + mov [edx+4],ecx + + cmp ecx,ebx + je no_if_last_control_parend + ;******************************************************* + mov [ecx+8],edx + jmp else_seek_control_ctrl_bk + ;******************************************************* + no_if_last_control_parend: + + mov [ebx+12],edx + + jmp else_seek_control_ctrl_bk + ;********************************************************* + no_if_seek_control_ctrl_bk: + ;********************************************************** + + mov ecx,[esi+4] ;last_control=seek_control->ctrl_fd + mov [ecx+8],dword 0 ;last_control->ctrl_bk=0 + mov [ebx+16],ecx ;Parend->child_bk=last_control + + else_seek_control_ctrl_bk: + ;********************************************************** + + ;send message to control for deleting + push eax + + mov [Message],dword -1 + mov ebx,[eax] ;load .... for control + push Message + push eax + call ebx + + pop eax + + push eax + call free + pop eax + + call new_line + mov [s_p],s_destroy + call print_string + debug_print_dec eax + mov [s_p],s_2 + call print_string + + jmp exit_destroy_control + + no_if_seek_control_control: + ;**************************************************************** + + mov edi,[esi+8] ;exchange_control=seek_control->ctrl_bk + mov esi,edi ;seek_control=exchange_control + + jmp while_seek_control + ;******************************************************************* + exit_destroy_control: + + ret 4 + +;*********************************************************** +;*****************Send message to Control******************* +;*********************************************************** + +;IN +;pointer to message +;pointer to parend(structure) +;OUT +;not returned value +align 4 + +send_message: + + ;get pointer to parend + mov eax,[esp+4] + mov [Parend],eax + + ;get message + mov esi,[esp+8] + mov edi,dword Message + mov ecx,4 + rep movsd + + ;load event type + mov eax,[Message] + + + ;check for event type and get parameters for Control + dec eax + jnz no_window_redraw + + mov ebx,[Parend] + mov esi,[ebx+12] ;get pointer to first child control of parend + mov ebx,esi + + send_message_for_redraw_to_next_control: + + ;if esi=0 than exit + test esi,esi + jz exit_check_event_type + + push ebx + push esi + + mov eax,ebx + mov ebx,[eax] ;load .... for control + push Message + push eax + call ebx + + pop esi + pop ebx + + mov esi,[ebx+8] + mov ebx,esi + + jmp send_message_for_redraw_to_next_control + + no_window_redraw: + + dec eax + jnz no_keys + + + ;if have active control than send message + ;checking for active control + mov ebx,[ActiveControlForKeys] + test ebx,ebx + jz exit_check_event_type + + mov eax,[ActiveControlForKeys] + mov ebx,[eax] ;load proc for control + push Message + push eax + call ebx + + jmp exit_check_event_type + no_keys: + + dec eax + jnz no_special_system_message + + mov ebx,[Parend]; + mov esi,[ebx+12] + mov ebx,esi + + send_special_message_to_next_control: + + ;if esi=0 than exit + test esi,esi + jz exit_check_event_type + + push ebx + push esi + + mov eax,ebx + mov ebx,[eax] ;load .... for control + push Message + push eax + call ebx + + pop esi + pop ebx + + mov esi,[ebx+8] + mov ebx,esi + + jmp send_special_message_to_next_control + + no_special_system_message: + + ;************************************************* + ;****************Mouse send message*************** + ;************************************************* + + cmp eax,3 + jne no_mouse + + ;check childrens of parend for crossing + mov ebx,[Parend] + mov esi,[ebx+12] ;esi =first child control + mov ebx,esi ;ebx =first child control + + mov eax,[Message+12] + and eax,1b + test eax,eax + jz left_button_of_mouse_not_pressed + + mov eax,[ActiveControl] + test eax,eax + jz havent_active_control + + mov eax,[ActiveControl] + mov ebx,[eax] ;load proc for control + push Message + push eax + call ebx + + jmp exit_check_event_type + havent_active_control: + + jmp exit_if_left_button_of_mouse__pressed + left_button_of_mouse_not_pressed: + + mov eax,[ActiveControl] + test eax,eax + jz havent_active_control_ + + mov [ActiveControl],dword 0 + + havent_active_control_: + + exit_if_left_button_of_mouse__pressed: + + + next_conrol_check_for_crossing_with_mouse: + + test esi,esi + jz exit_next_conrol_check_for_crossing_with_mouse + + mov [PointerToControl],ebx + + + push ebx + push esi + + mov eax,[ebx+28] ;eax = y coordinat of control + mov [y_ctl],eax + mov eax,[ebx+24] ;eax = x coordinat of control + + mov ecx,[ebx+32] ;ecx = size x of control + mov edx,[ebx+36] ;edx = size y of control + mov esi,[Message+4] ;mouse x + mov edi,[Message+8] ;mouse y + mov ebx,[y_ctl] + + call CheckCrossingBox + + cmp eax,0xffffff + jne no_activate_control + + mov eax,[Message+12] + and eax,1b + test eax,eax + jz no_activate_control + + mov eax,[PointerToControl] + mov [ActiveControl],eax + mov [ActiveControlForKeys],eax + + no_activate_control: + + mov eax,[PointerToControl] + mov ebx,[eax] ;load proc for control + push Message + push eax + call ebx + + pop esi + pop ebx + + mov esi,[ebx+8] ;16 but not 8 + mov ebx,esi + + jmp next_conrol_check_for_crossing_with_mouse + + exit_next_conrol_check_for_crossing_with_mouse: + + no_mouse: + + exit_check_event_type: + + ret 8 + + +new_line: + + pushad + + mov eax,63 + mov ebx,1 + xor ecx,ecx + mov cl,13 + int 0x40 + + mov eax,63 + mov ebx,1 + xor ecx,ecx + mov cl,10 + int 0x40 + + popad + + ret + +print_string: + + pushad + + xor esi,esi + + next_symbol_print: + + mov edi,[s_p] + add edi,esi + + xor edx,edx + mov dl,byte[edi] + test dl,dl + jz exit_print_str + + mov eax,63 + mov ebx,1 + xor ecx,ecx + mov cl,byte[edi] + int 0x40 + + inc esi + jmp next_symbol_print + + exit_print_str: + + popad + + + ret + +s_p dd 0 +s_craete db 'craete ',0 +s_destroy db 'destroy ',0 +s_parend db ' parend ',0 +s_last db ' ctrl_fd ',0 +s_next db ' ctrl_bk ',0 +s_1 db ' 1',0 +s_2 db ' 2',0 \ No newline at end of file diff --git a/programs/develop/libGUI/src/number.inc b/programs/develop/libGUI/src/number.inc new file mode 100644 index 0000000000..a5254c93a2 --- /dev/null +++ b/programs/develop/libGUI/src/number.inc @@ -0,0 +1,383 @@ + + nm_control_data_size = 22 + nm_redraw_all = 10000000b + nm_redraw_off = 01111111b + nm_special_redraw_on = 100b + nm_special_redraw_off = 11111011b + nm_integer_type = 10b + nm_no_show_number = 1b + +;**************************************************** +;********************craete Number********************** +;**************************************************** +;IN +;pointer to parend +;pointer to Number's structure +;OUT +;pointer to initialized Number's structure +align 4 + +craete_number: + + mov ebx,[esp+4] + mov eax,[esp+8] + + mov [PointerToStructureForNumber],eax + + mov eax,control_header_size+nm_control_data_size + call craete_control + + ;set all image's parameters in control + mov [eax],dword number + + mov ecx,nm_control_data_size + mov esi,[PointerToStructureForNumber] + mov edi,eax + add edi,control_header_size + rep movsb + + call get_skin_height + + mov ebx,[PointerToStructureForNumber] + mov ecx,[ebx+6] ;x + mov edx,[ebx+10] ;y + add ecx,border_width + add edx,[skin_height] + ;copy information to control + mov [eax+24],ecx + mov [eax+28],edx + + ret 8 + +;**************************************************** +;********************Draw Number********************* +;**************************************************** +;IN +;pointer to control of number +;message +;OUT +;not returned value +align 4 + +number: + + ;get message + mov eax,[esp+8] + + ;get pointer to control of image + mov esi,[esp+4] + mov [PointerForNumber],esi + ;copy control to local control + add esi,control_header_size + mov edi,dword Number + mov ecx,nm_control_data_size + rep movsb + + + cmp [eax],dword 1 + jne no_redraw_all_number + + xor ebx,ebx + mov bl,[Number.type] + and bl,nm_no_show_number + test bl,bl + jnz no_redraw_all_number + + or [Number.type],nm_redraw_all + + no_redraw_all_number: + + cmp [eax],dword 3 + jne no_special_message_for_number + + xor ebx,ebx + mov bl,[Number.type] + and bl,nm_special_redraw_on + test bl,bl + jz no_special_message_for_number + + or [Number.type],nm_redraw_all + and [Number.type],nm_special_redraw_off + + no_special_message_for_number: + + cmp [eax],dword -1 + jne no_destroy_control_of_number + + jmp exit_number + no_destroy_control_of_number: + + ;load coordinats and size from control + mov eax,[PointerForNumber] + mov ebx,[eax+24] ;x + mov ecx,[eax+28] ;y + ;set current coordinats and sizes in zakladka + mov [Number.x],ebx + mov [Number.y],ecx + + xor eax,eax + mov al,[Number.type] + and al,nm_redraw_all + test al,al + jz no_redraw_number_ + + and [Number.type],nm_redraw_off + + mov esi,dword Number + mov edi,[PointerForNumber] + add edi,control_header_size + mov ecx,2 + rep movsb + + ;get standart colors table + mov eax,48 + mov ebx,3 + mov ecx,dword pointer2 + mov edx,40 + mcall + + xor eax,eax + mov al,[Number.type] + and al,nm_integer_type + test al,al + jnz no_integer_number + + mov eax,47 + mov ebx,[Number.parameters] + mov ecx,[Number.number] + mov edx,[Number.x] + shl edx,16 + add edx,[Number.y] + mov esi,[Number.color] + mov edi,[pointer2+8] + mcall + + jmp no_redraw_number_ + no_integer_number: + ;--------------------------------------- + + mov ebx,[Number.parameters] + mov ecx,ebx + shr ebx,16 ;format for integer + and ecx,0xffff ;format for float + + ;get integer part of float number + mov eax,1 + mov edi,ecx + pow_10__: + + ;eax=eax*10 + lea eax,[eax+eax*4] + shl eax,1 + + dec edi + jnz pow_10__ + mov edx,eax + + ;check for signum + mov [v2],0 + fld [Number.number] + fcom [v2] + fstsw ax + sahf + jae no_signum_float_number + + fabs + mov [signum_float_number],byte 1 + + no_signum_float_number: + fstp [Number.number] + + mov [v2],edx ;v2=10^ecx + fild [v2] + fld [Number.number] + fmul st0,st1 + fistp [v] + fstp st0 + + mov esi,edx + mov eax,[v] + cdq + idiv esi + mov [v],eax + + and [integer_part],0 + and [tochnost1],0 + + ;save v in v2 + mov eax,[v] + mov [v2],eax + + mov [Number.flag],0 + mov esi,ebx + get_next_razryd_of_number_integer: + + mov eax,1 + + mov edi,esi + pow_10_integer: + + ;eax=eax*10 + lea eax,[eax+eax*4] + shl eax,1 + + dec edi + jnz pow_10_integer + + mov edi,eax + mov eax,[v] + cdq + idiv edi + and eax,0xf + + test eax,eax + jz no_save_pos_for_integer + + cmp [Number.flag],0 + jne no_save_pos_for_integer + + mov [Number.flag],1b + mov [tochnost1],esi + add [tochnost1],1 + + no_save_pos_for_integer: + + imul eax,edi + sub [v],eax + add [integer_part],eax + + dec esi + jnz get_next_razryd_of_number_integer + mov eax,[v] + add [integer_part],eax + + cmp [tochnost1],0 + jnz all_ok_with_tochnost + + mov [tochnost1],1 + all_ok_with_tochnost: + + ;get float part of float number + mov eax,[v2] + mov [v],eax + + mov eax,1 + mov edi,ecx + pow_10_float__: + + ;eax=eax*10 + lea eax,[eax+eax*4] + shl eax,1 + + dec edi + jnz pow_10_float__ + + mov [v2],eax ;v2=10^ecx + + fild [v2] + fild [v] + fld [Number.number] + fsub st0,st1 + fmul st0,st2 + fistp [v] + fstp st0 + fstp st0 + + and [float_part],0 + + mov esi,ecx + get_next_razryd_of_number_float: + + mov eax,1 + + mov edi,esi + pow_10_float: + + ;eax=eax*10 + lea eax,[eax+eax*4] + shl eax,1 + + dec edi + jnz pow_10_float + + mov edi,eax + mov eax,[v] + cdq + idiv edi + and eax,0xf + imul eax,edi + sub [v],eax + add [float_part],eax + + dec esi + jnz get_next_razryd_of_number_float + mov eax,[v] + add [float_part],eax + + mov [tochnost2],ecx + cmp [signum_float_number],byte 1 + jne no_draw_signum_for_float_number + + ;draw signum + mov eax,4 + mov ebx,[Number.x] + mov ecx,[Number.color] + mov edx,dword signum + mov esi,1 + mov edi,[pointer2+8] + shl ebx,16 + add ebx,[Number.y] + mcall + + add [Number.x],6 + mov [signum_float_number],0 + no_draw_signum_for_float_number: + + ;draw integer part of float number + mov eax,47 + mov ebx,[tochnost1] + mov ecx,[integer_part] + mov edx,[Number.x] + mov esi,[Number.color] + mov edi,[pointer2+8] + shl edx,16 + shl ebx,16 + add edx,[Number.y] + mcall + + mov edx,[tochnost1] + add edx,1 + lea edx,[edx+edx*2] + shl edx,1 ;edx=edx*6 + add edx,[Number.x] + mov [x],edx + + ;draw float part of float number + mov eax,47 + mov ebx,[tochnost2] + mov ecx,[float_part] + mov esi,[Number.color] + mov edi,[pointer2+8] + shl edx,16 + shl ebx,16 + add edx,[Number.y] + mcall + + ;draw point betwen integer part of number and float part of number + mov eax,4 + mov ebx,[x] + mov ecx,[Number.color] + mov edx,dword point + mov esi,1 + mov edi,[pointer2+8] + sub ebx,6 + shl ebx,16 + add ebx,[Number.y] + mcall + + no_redraw_number_: + ;----------------------------------------- + + exit_number: + + ret 8 diff --git a/programs/develop/libGUI/src/progress_bar.inc b/programs/develop/libGUI/src/progress_bar.inc new file mode 100644 index 0000000000..d468016cf0 --- /dev/null +++ b/programs/develop/libGUI/src/progress_bar.inc @@ -0,0 +1,459 @@ + +pb_control_data_size = 34 +pb_redraw_all = 10000000b +pb_redraw_all_off = 01111111b +pb_special_progress_on = 1b +pb_special_progress_off = 11111110b + +;**************************************************** +;****************craete ProgressBar******************** +;**************************************************** +;IN +;pointer to parend +;pointer to ProgressBar's structure +;OUT +;pointer to initialized control +align 4 + +craete_progress_bar: + + mov ebx,[esp+4] + mov eax,[esp+8] + + mov [PointerToStructureForProgressBar],eax + + mov eax,control_header_size+pb_control_data_size + call craete_control + + ;set all EditBox's parameters in control + mov [eax],dword progress_bar + + mov ecx,pb_control_data_size + mov esi,[PointerToStructureForProgressBar] + mov edi,eax + add edi,control_header_size + rep movsb + + call get_skin_height + + mov ebx,[PointerToStructureForProgressBar] + mov ecx,[ebx+10] ;x + mov edx,[ebx+14] ;y + mov esi,[ebx+18] ;size x + mov edi,[ebx+22] ;size y + add ecx,border_width + add edx,[skin_height] + ;copy information to control + mov [eax+24],ecx + mov [eax+28],edx + mov [eax+32],esi + mov [eax+36],edi + + ret 8 + +;**************************************************** +;*****************Draw ProgressBar******************** +;**************************************************** +;IN +;pointer to control of ProgressBar +;message +;OUT +;not returned value +align 4 + +progress_bar: + + ;get message + mov eax,[esp+8] + + ;get pointer to control of button + mov esi,[esp+4] + mov [PointerForProgressBar],esi + + ;copy control to local control + add esi,control_header_size + mov edi,dword ProgressBar + mov ecx,pb_control_data_size + rep movsb + + + push eax + ;load coordinats and size from control + mov eax,[PointerForProgressBar] + mov ebx,[eax+24] ;x + mov ecx,[eax+28] ;y + mov edx,[eax+32] ;size x + mov esi,[eax+36] ;size y + ;set current coordinats and sizes in EeditBox + mov [ProgressBar.x],ebx + mov [ProgressBar.y],ecx + mov [ProgressBar.sizex],edx + mov [ProgressBar.sizey],esi + + pop eax + + + cmp [eax],dword -1 + jne no_destroy_progress_bar + + jmp exit_progress_bar + no_destroy_progress_bar: + + cmp [eax],dword 1 + jne no_redraw_all_progress_bar + + or [ProgressBar.type],pb_redraw_all + + no_redraw_all_progress_bar: + + cmp [eax],dword 3 + jne no_special_message_progress_bar + + or [ProgressBar.type],pb_special_progress_on + + no_special_message_progress_bar: + + xor eax,eax + mov al,[ProgressBar.type] + and al,pb_redraw_all + test al,al + jz no_draw_all_progress_bar + + and [ProgressBar.type],pb_redraw_all_off + + call draw_all_progress_bar + + jmp exit_progress_bar + + no_draw_all_progress_bar: + + xor eax,eax + mov al,[ProgressBar.type] + and al,pb_special_progress_on + test al,al + jz no_draw_progress_bar + + and [ProgressBar.type],pb_special_progress_off + + call draw_progress + + no_draw_progress_bar: + + exit_progress_bar: + + ret 8 + +draw_all_progress_bar: + + mov eax,[ProgressBar.color3] + mov ebx,dword 0xffffff + mov ecx,20 + mov edx,dword colors_table1 + call gradient + + mov eax,13 + mov ebx,[ProgressBar.x] + mov ecx,[ProgressBar.y] + mov edx,[ProgressBar.color1] + shl ebx,16 + shl ecx,16 + add ebx,[ProgressBar.sizex] + add ecx,[ProgressBar.sizey] + mcall + + mov eax,[ProgressBar.x] + mov ebx,[ProgressBar.y] + add eax,[ProgressBar.sizex] + add ebx,[ProgressBar.sizey] + mov [v],eax ;v=x+sizex + mov [v2],ebx ;v2=y+sizey + + ;dark lines + mov eax,[ProgressBar.color3] + and eax,0xffffff + mov [Line.color],eax + mov [Pixel.color],eax + + ;(x+1,y)-(x+sizex-1,y) + mov eax,[ProgressBar.x] + mov ebx,[ProgressBar.y] + mov ecx,[v] + add eax,1 + sub ecx,1 + mov [Line.x1],eax + mov [Line.x2],ecx + mov [Line.y1],ebx + mov [Line.y2],ebx + call DrawLine + + ;(x+sizex,y+1)-(x+sizex,y+sizey-1) + mov eax,[v] + mov ebx,[v2] + mov ecx,[ProgressBar.y] + add ecx,1 + sub ebx,1 + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ecx + mov [Line.y2],ebx + call DrawLine + + ;(x+1,y+sizey)-(x+sizex-1,y+sizey) + mov eax,[ProgressBar.x] + mov ebx,[v] + mov ecx,[v2] + add eax,1 + sub ebx,1 + mov [Line.x1],eax + mov [Line.x2],ebx + mov [Line.y1],ecx + mov [Line.y2],ecx + call DrawLine + + ;(x,y+1)-(x,y_sizey-1) + mov eax,[ProgressBar.x] + mov ebx,[ProgressBar.y] + mov ecx,[v2] + add ebx,1 + sub ecx,1 + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ecx + call DrawLine + + ;(x+1,y+1)-(x+1,y+2) + mov eax,[ProgressBar.x] + mov ebx,[ProgressBar.y] + mov ecx,ebx + add eax,1 + add ebx,1 + add ecx,2 + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ecx + call DrawLine + + ;(x+2,y+1) + mov eax,[ProgressBar.x] + mov ebx,[ProgressBar.y] + add eax,2 + add ebx,1 + mov [Pixel.x],eax + mov [Pixel.y],ebx + call DrawPixel + + ;(x+1,y+sizey-1)-(x+1,y+sizey-2) + mov eax,[ProgressBar.x] + mov ebx,[v2] + mov ecx,ebx + add eax,1 + sub ebx,1 + sub ecx,2 + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ecx + call DrawLine + + ;(x+2,y+sizey-1) + mov eax,[ProgressBar.x] + mov ebx,[v2] + add eax,2 + sub ebx,1 + mov [Pixel.x],eax + mov [Pixel.y],ebx + call DrawPixel + + ;(x+sizex-1,y+1)-(x+sizex-1,y+2) + mov eax,[v] + mov ebx,[ProgressBar.y] + mov ecx,ebx + sub eax,1 + add ebx,1 + add ecx,2 + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ecx + call DrawLine + + ;(x+sizex-2,y+1) + mov eax,[v] + mov ebx,[ProgressBar.y] + sub eax,2 + add ebx,1 + mov [Pixel.x],eax + mov [Pixel.y],ebx + call DrawPixel + + ;(x+sizex-1,y+sizey-2)-(x+sizex-1,y+sizey-1) + mov eax,[v] + mov ebx,[v2] + mov ecx,ebx + sub eax,1 + sub ebx,2 + sub ecx,1 + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ecx + call DrawLine + + ;(x+sizex-2,y+sizey-1) + mov eax,[v] + mov ebx,[v2] + sub eax,2 + sub ebx,1 + mov [Pixel.x],eax + mov [Pixel.y],ebx + call DrawPixel + + mov eax,[colors_table1+10*3] + and eax,0xffffff + mov [Line.color],eax + mov [Pixel.color],eax + + ;(x+3,y+1)-(x+sizex-3,y+1) + mov eax,[ProgressBar.x] + mov ebx,[v] + mov ecx,[ProgressBar.y] + add ecx,1 + add eax,3 + sub ebx,3 + mov [Line.x1],eax + mov [Line.x2],ebx + mov [Line.y1],ecx + mov [Line.y2],ecx + call DrawLine + + ;(x+2,y+2) + mov eax,[ProgressBar.x] + mov ebx,[ProgressBar.y] + add eax,2 + add ebx,2 + mov [Pixel.x],eax + mov [Pixel.y],ebx + call DrawPixel + + ;(x+sizex-1,y+3)-(x+sizex-1,y+sizey-3) + mov eax,[v] + mov ebx,[v2] + mov ecx,[ProgressBar.y] + sub eax,1 + sub ebx,3 + add ecx,3 + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ecx + mov [Line.y2],ebx + call DrawLine + + ;(x+sizex-2,y+2) + mov eax,[v] + mov ebx,[ProgressBar.y] + sub eax,2 + add ebx,2 + mov [Pixel.x],eax + mov [Pixel.y],ebx + call DrawPixel + + ;(x+3,y+sizey-1)-(x+sizex-3,y+sizey-1) + mov eax,[ProgressBar.x] + mov ebx,[v] + mov ecx,[v2] + sub ebx,3 + sub ecx,1 + add eax,3 + mov [Line.x1],eax + mov [Line.x2],ebx + mov [Line.y1],ecx + mov [Line.y2],ecx + call DrawLine + + ;(x+sizex-2,y+sizey-2) + mov eax,[v] + mov ebx,[v2] + sub eax,2 + sub ebx,2 + mov [Pixel.x],eax + mov [Pixel.y],ebx + call DrawPixel + + ;(x+1,y+3)-(x+1,y+sizey-3) + mov eax,[ProgressBar.x] + mov ebx,[ProgressBar.y] + mov ecx,[v2] + add eax,1 + add ebx,3 + sub ecx,3 + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ecx + call DrawLine + + ;(x+2,y+sizey-2) + mov eax,[ProgressBar.x] + mov ebx,[v2] + add eax,2 + sub ebx,2 + mov [Pixel.x],eax + mov [Pixel.y],ebx + call DrawPixel + + ret + +draw_progress: + + cmp [ProgressBar.progress],dword 0.02 + jae min_size_ok + + mov [ProgressBar.progress],dword 0.02 + min_size_ok: + + cmp [ProgressBar.progress],dword 1.0 + jle max_size_ok + + mov [ProgressBar.progress],dword 1.0 + max_size_ok: + + mov eax,[ProgressBar.sizex] + sub eax,6 + mov [v2],eax + + fld [ProgressBar.progress] + fild [v2] + fmul st0,st1 + fistp [v3] + fstp st0 + + mov eax,[ProgressBar.color2] + mov ebx,0xffffff + mov ecx,[ProgressBar.x] + mov edx,[ProgressBar.y] + mov esi,[v3] + mov edi,[ProgressBar.sizey] + sub edi,4 + shr edi,1 + add ecx,3 + add edx,1 + + call rectangle_gradient_up + + mov eax,[ProgressBar.color2] + mov ebx,0xffffff + mov ecx,[ProgressBar.x] + mov edx,[ProgressBar.y] + mov esi,[v3] + mov edi,[ProgressBar.sizey] + sub edi,4 + shr edi,1 + add ecx,3 + add edx,2 + add edx,edi + + call rectangle_gradient_down + + ret \ No newline at end of file diff --git a/programs/develop/libGUI/src/remove_component.inc b/programs/develop/libGUI/src/remove_component.inc new file mode 100644 index 0000000000..d25c195a51 --- /dev/null +++ b/programs/develop/libGUI/src/remove_component.inc @@ -0,0 +1,24 @@ +;**************************************************** +;***************Resize of GUI component************** +;**************************************************** +;IN +;ResizeComponent(dword Parend,dword Control,dword newx,dword newy) +;newy +;newx +;Control +;Parend +;OUT +;not + +align 4 + +remove_component: + + mov ebx,[esp+4] ;Control + mov ecx,[esp+8] ;new x + mov edx,[esp+12] ;new y + + mov [ebx+24],ecx + mov [ebx+28],edx + + ret 12 diff --git a/programs/develop/libGUI/src/resize_component.inc b/programs/develop/libGUI/src/resize_component.inc new file mode 100644 index 0000000000..58a2abc098 --- /dev/null +++ b/programs/develop/libGUI/src/resize_component.inc @@ -0,0 +1,24 @@ +;**************************************************** +;***************Resize of GUI component************** +;**************************************************** +;IN +;ResizeComponent(dword Parend,dword Control,dword newx,dword newy) +;newy +;newx +;Control +;Parend +;OUT +;not + +align 4 + +resize_component: + + mov ebx,[esp+4] ;Control + mov ecx,[esp+8] ;new size x + mov edx,[esp+12] ;new size y + + mov [ebx+32],ecx + mov [ebx+36],edx + + ret 12 diff --git a/programs/develop/libGUI/src/scroller.inc b/programs/develop/libGUI/src/scroller.inc new file mode 100644 index 0000000000..99cb366645 --- /dev/null +++ b/programs/develop/libGUI/src/scroller.inc @@ -0,0 +1,4195 @@ + +;scroller's flags +sc_check_vertical = 1b +sc_check_horizontal = 10b +sc_check_init_child_buttons = 100b +sc_check_3D_type = 10000b +sc_scroll_bar_move = 100000b +sc_active = 1000000b +sc_redraw = 10000000b +sc_redraw_off = 01111111b +sc_full_redraw = 11100000b +sc_scroll_bar_move_off = 11011111b +sc_move_active_off = 10011111b + +sc_first_child_button_pressed = 1b +sc_first_child_button_pressed_off = 11111110b +sc_second_child_button_pressed = 10000b +sc_second_child_button_pressed_off = 11101111b + +sc_control_data_size = 29 +sc_child_button_type = 10001000b + +;**************************************************** +;******************Crate Scroller********************* +;**************************************************** +;IN +;pointer to parend +;pointer to Scroller's structure +;OUT +;pointer to initialized Scroller's structure +align 4 + +craete_scroller: + + mov ebx,[esp+4] + mov eax,[esp+8] + + mov [PointerToStructureForScroller],eax + + mov eax,control_header_size+sc_control_data_size + call craete_control + + ;set all button's parameters in control + mov [eax],dword scroller + + mov ecx,sc_control_data_size + mov esi,[PointerToStructureForScroller] + mov edi,eax + add edi,control_header_size + rep movsb + + mov ebx,[PointerToStructureForScroller] + + xor ecx,ecx + mov cl,byte[ebx] + and cl,sc_check_vertical + jz type_horizontal_scroller + + ;if we here than scroller vertical + mov esi,16 ;scroller size x + xor edi,edi + mov di,[ebx+5] ;scroller size y + jmp exit_type_scroller + type_horizontal_scroller: + + xor esi,esi + mov si,[ebx+5] ;scroller size x + mov edi,16 ;scroller size y + exit_type_scroller: + + xor ecx,ecx + xor edx,edx + mov cx,[ebx+1] ;scroller x + mov dx,[ebx+3] ;scroller y + + call get_skin_height + add ecx,border_width + add edx,[skin_height] + ;copy information to control + mov [eax+24],ecx + mov [eax+28],edx + mov [eax+32],esi + mov [eax+36],edi + + ret 8 + +;**************************************************** +;*******************Draw Scroller********************* +;**************************************************** +;IN +;pointer to control of scroller +;message +;OUT +;not returned value +align 4 + +scroller: + + + ;get message + mov eax,[esp+8] + + ;copy message + mov esi,eax + mov edi,dword Message + mov ecx,4 + rep movsd + + ;get pointer to control of scroller + mov esi,[esp+4] + mov [PointerForScroller],esi + ;copy control to local control + mov edi,dword Scroller + mov ecx,control_header_size+sc_control_data_size + rep movsb + + + cmp [eax],dword 1 + jne no_redraw_all_scroller + + or [Scroller.type],sc_full_redraw + no_redraw_all_scroller: + + cmp [eax],dword 2 + jne no_keys_scroller + + jmp exit_scroller + no_keys_scroller: + + cmp [eax],dword 3 + jne no_pressed_button_scroller + + jmp exit_scroller + no_pressed_button_scroller: + + cmp [eax],dword 6 + jne no_mouse_scroller + + mov esi,[eax+4] + mov edi,[eax+8] + mov ecx,[eax+12] + mov [Scroller.mouseX],si + mov [Scroller.mouseY],di + mov [ButtonsOfMouse],ecx + no_mouse_scroller: + + + cmp [eax],dword -1 + jne no_delete_scroller + + mov eax,[Scroller.ChildButton1] + call free + + mov eax,[Scroller.ChildButton2] + call free + + ;push [Scroller.ChildButton1] + ;call destroy_control + + ;push [Scroller.ChildButton2] + ;call destroy_control + + jmp exit_scroller + no_delete_scroller: + + ;load coordinats and size from control + mov eax,[PointerForScroller] + mov ebx,[eax+24] ;x + mov ecx,[eax+28] ;y + mov edx,[eax+32] ;size x + mov esi,[eax+36] ;size y + ;set current coordinats and sizes in scroller + mov [Scroller.x],bx + mov [Scroller.y],cx + + xor eax,eax + mov al,[Scroller.type] + and al,sc_check_vertical + test al,al + jz set_for_horizontal + + mov [Scroller.length],si + + jmp exit_if_vertical + set_for_horizontal: + + mov [Scroller.length],dx + + exit_if_vertical: + + ;checking to craete child buttons + xor eax,eax + mov al,[Scroller.type] + and al,sc_check_init_child_buttons + jnz child_buttons_craeted + + or [Scroller.type],sc_check_init_child_buttons + + mov [ChildButton.type],byte sc_child_button_type + mov [ChildButton.width],16 + mov [ChildButton.height],16 + xor ebx,ebx + xor ecx,ecx + mov bx,[Scroller.x] + mov cx,[Scroller.y] + mov [ChildButton.x],bx + mov [ChildButton.y],cx + + push ChildButton + push [PointerForScroller] + + call craete_button + + mov [Scroller.ChildButton1],eax + + xor ebx,ebx + xor ecx,ecx + mov bx,[Scroller.x] + mov cx,[Scroller.y] + + xor eax,eax + mov al,[Scroller.type] + and al,sc_check_vertical + test al,al + jz init_buttons_for_horizontal_scroller + + + add cx,[Scroller.length] + sub ecx,16 + + + jmp exit_if_init_buttons_for_horizontal_scroller + init_buttons_for_horizontal_scroller: + + + add bx,[Scroller.length] + sub ebx,16 + + exit_if_init_buttons_for_horizontal_scroller: + + mov [ChildButton.x],bx + mov [ChildButton.y],cx + + push ChildButton + push [PointerForScroller] + + call craete_button + + mov [Scroller.ChildButton2],eax + + mov esi,dword Scroller + mov edi,[PointerForScroller] + add esi,control_header_size + add edi,control_header_size + mov ecx,sc_control_data_size + rep movsb + + child_buttons_craeted: + + ;checking for redraw all control + ;if it is true than change koordinats of child buttons + xor eax,eax + mov al,[Scroller.type] + and al,sc_redraw + test al,al + jz no_change_koordinats_of_child_buttons + + xor ebx,ebx + xor ecx,ecx + mov bx,[Scroller.x] + mov cx,[Scroller.y] + + ;first child button + mov eax,[Scroller.ChildButton1] + mov [eax+24],ebx ;x + mov [eax+28],ecx ;y + + xor eax,eax + mov al,[Scroller.type] + and al,sc_check_vertical + test al,al + jz change_koordinats_of_buttons_for_horizontal_scroller + + add cx,[Scroller.length] + sub ecx,16 + + jmp exit_if_change_koordinats_of_buttons_for_horizontal_scroller + change_koordinats_of_buttons_for_horizontal_scroller: + + add bx,[Scroller.length] + sub ebx,16 + + exit_if_change_koordinats_of_buttons_for_horizontal_scroller: + + ;second child button + mov eax,[Scroller.ChildButton2] + mov [eax+24],ebx ;x + mov [eax+28],ecx ;y + + no_change_koordinats_of_child_buttons: + + ;is a 3D scroller ? + xor eax,eax + mov al,[Scroller.type] + and al,sc_check_3D_type + test al,al + jz no_3D_scroller + + + mov eax,[Scroller.color1] + mov ebx,0xffffff + mov ecx,16 + mov edx,dword pointer + call gradient + + mov eax,[pointer+9] + and eax,0xffffff + mov [Color],eax + + mov eax,[pointer] + mov ebx,0xffffff + call calculate_average_color + mov [AveregeColor],eax + + ;is a vertical 3D scroller ? + xor eax,eax + mov al,[Scroller.type] + and al,sc_check_vertical + test al,al + jz no_vertical_scroller_3D + + xor eax,eax + xor ebx,ebx + xor ecx,ecx + xor edx,edx + xor esi,esi + xor edi,edi + mov ax,[Scroller.x] + mov bx,[Scroller.y] + mov cx,16 + mov dx,[Scroller.length] + mov si,[Scroller.mouseX] + mov di,[Scroller.mouseY] + add ebx,17 + sub edx,17+17 + call CheckCrossingBox + + cmp eax,0xffffff + jne no_crossing_vertical_scroller_3D + + or [Scroller.type],sc_active + mov esi,dword Scroller + mov edi,[PointerForScroller] + add esi,control_header_size + add edi,control_header_size + mov ecx,sc_control_data_size + rep movsb + + no_crossing_vertical_scroller_3D: + + ;is a vertical 3D scroller active ? + xor eax,eax + mov al,[Scroller.type] + and al,sc_active + test al,al + jz no_vertical_scroller_active + + ;calculate size of scroll bar + xor eax,eax + mov ax,[Scroller.length] + sub eax,16+16 + mov [v],eax + fld [Scroller.size] + fild [v] + fmul st0,st1 + fistp [Scrollersize] + fstp [v] + + cmp [Scrollersize],4 + jae no_minimum_size_vertical_3D_scroller + + mov [Scrollersize],4 + no_minimum_size_vertical_3D_scroller: + + ;if scroller is not active than use this is coordinats. + xor eax,eax + mov ax,[Scroller.length] + sub eax,17+17 + sub eax,[Scrollersize] + mov [yo],eax + fld [Scroller.pos] + fild [yo] + fmul st0,st1 + fistp [v] + fstp [v2] + + xor eax,eax + mov ax,[Scroller.y] + add ax,17 + add eax,[v] + mov [ScrollBar.y],eax + + ;check button of mouse + mov eax,[ButtonsOfMouse] + and eax,1b + test al,al + jz no_vertical_scroller_move + ;calculate in pixels length of scroll bar + + xor eax,eax + xor edx,edx + xor ecx,ecx + mov ax,[Scroller.y] + mov cx,[Scroller.length] + mov dx,[Scroller.mouseY] + mov ebx,edx + add ecx,eax + add eax,17 + sub ecx,17 + mov esi,ecx + + sub ebx,eax + jns no_minimum_scroller_y + + mov [Scroller.mouseY],ax + no_minimum_scroller_y: + + sub ecx,edx + jns no_maximum_scroller_y + + mov [Scroller.mouseY],si + no_maximum_scroller_y: + + + mov eax,[Scrollersize] + shr eax,1 + xor ebx,ebx + mov bx,[Scroller.mouseY] + sub bx,[Scroller.y] + sub ebx,17 + xor ecx,ecx + mov cx,[Scroller.y] + add cx,[Scroller.length] + sub cx,17 + sub cx,[Scroller.mouseY] + + cmp ebx,eax + jae no_correct_y + xor edx,edx + mov dx,[Scroller.y] + add dx,17 + add edx,eax + no_correct_y: + + cmp ecx,eax + jae no_correct_y_ + xor edx,edx + mov dx,[Scroller.y] + add dx,[Scroller.length] + sub dx,17 + sub edx,eax + no_correct_y_: + + mov [ScrollBar.y],edx + sub [ScrollBar.y],eax + sub dx,[Scroller.y] + sub edx,17 + sub edx,eax + mov [v],edx + + shl eax,1 + xor ebx,ebx + mov bx,[Scroller.length] + sub ebx,17+17 + sub ebx,[Scrollersize] + mov [v2],ebx + + fild [v2] + fild [v] + fdiv st0,st1 + fstp [Scroller.pos] + fistp [v2] + + ;put 5 bit(scroll bar move) + or [Scroller.type],sc_scroll_bar_move + + mov esi,dword Scroller + mov edi,[PointerForScroller] + add esi,control_header_size + add edi,control_header_size + mov ecx,sc_control_data_size + rep movsb + + jmp no_vertical_scroller_active + no_vertical_scroller_move: + + no_vertical_scroller_active: + + ;if bit 7 is a true than redraw all scroller. + + xor eax,eax + mov al,[Scroller.type] + and al,sc_redraw + test al,al + jz no_redraw_all_vertical_scroller + + and [Scroller.type],sc_redraw_off + mov esi,dword Scroller + mov edi,[PointerForScroller] + add esi,control_header_size + add edi,control_header_size + mov ecx,sc_control_data_size + rep movsb + + call DrawButtonsOfVertical3DScroller + + no_redraw_all_vertical_scroller: + + xor eax,eax + mov al,[Scroller.type] + and al,sc_scroll_bar_move + test al,al + jz no_move_vertical_scroller_bar_3D + + xor eax,eax + mov ax,[Scroller.x] + mov ebx,[ScrollBar.y] + mov ecx,[Scrollersize] + call DrawVertical3DScrollBar + + and [Scroller.type],sc_scroll_bar_move_off + mov esi,dword Scroller + mov edi,[PointerForScroller] + add esi,control_header_size + add edi,control_header_size + mov ecx,sc_control_data_size + rep movsb + + no_move_vertical_scroller_bar_3D: + + xor eax,eax + xor ebx,ebx + xor ecx,ecx + xor edx,edx + xor esi,esi + xor edi,edi + mov ax,[Scroller.x] + mov bx,[Scroller.y] + mov cx,16 + mov dx,[Scroller.length] + mov si,[Scroller.mouseX] + mov di,[Scroller.mouseY] + add ebx,17 + sub edx,17+17 + call CheckCrossingBox + + cmp eax,0xffffff + jne no_crossing_vertical_scroller_3D_ + + or [Scroller.type],sc_active + mov esi,dword Scroller + mov edi,[PointerForScroller] + add esi,control_header_size + add edi,control_header_size + mov ecx,sc_control_data_size + rep movsb + + jmp exit_crossing_vertical_scroller_3D + no_crossing_vertical_scroller_3D_: + + ;check button of mouse + mov eax,[ButtonsOfMouse] + + and eax,1b + test al,al + jnz mouse_button_pressed_vertical + + and [Scroller.type],sc_move_active_off + mov esi,dword Scroller + mov edi,[PointerForScroller] + add esi,control_header_size + add edi,control_header_size + mov ecx,sc_control_data_size + rep movsb + mouse_button_pressed_vertical: + + exit_crossing_vertical_scroller_3D: + + + xor eax,eax + mov al,[Scroller.type] + and al,sc_active + test al,al + jz no_change_vertical_scroller_3D + + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.mouseX] + + sub eax,ebx + jns no_signum_1 + neg eax + no_signum_1: + + cmp eax,110 + jle no_change_bits_vertical_scroller_3D + + and [Scroller.type],sc_move_active_off + no_change_bits_vertical_scroller_3D: + + mov esi,dword Scroller + mov edi,[PointerForScroller] + add esi,control_header_size + add edi,control_header_size + mov ecx,sc_control_data_size + rep movsb + + no_change_vertical_scroller_3D: + + no_vertical_scroller_3D: + + ;****************Horinzontal scroller************** + + ;is a horizontal 3D scroller ? + xor eax,eax + mov al,[Scroller.type] + and al,sc_check_horizontal + test al,al + jz no_horizontal_scroller_3D + + xor eax,eax + xor ebx,ebx + xor ecx,ecx + xor edx,edx + xor esi,esi + xor edi,edi + mov ax,[Scroller.x] + mov bx,[Scroller.y] + mov cx,[Scroller.length] + mov dx,16 + mov si,[Scroller.mouseX] + mov di,[Scroller.mouseY] + add eax,17 + sub ecx,17+17 + call CheckCrossingBox + + cmp eax,0xffffff + jne no_crossing_horizontal_scroller_3D + + or [Scroller.type],sc_active + mov esi,dword Scroller + mov edi,[PointerForScroller] + add esi,control_header_size + add edi,control_header_size + mov ecx,sc_control_data_size + rep movsb + + no_crossing_horizontal_scroller_3D: + + ;is a vertical 3D scroller active ? + xor eax,eax + mov al,[Scroller.type] + and al,sc_active + test al,al + jz no_horizontal_scroller_active + + ;calculate size of scroll bar + xor eax,eax + mov ax,[Scroller.length] + sub eax,16+16 + mov [v],eax + fld [Scroller.size] + fild [v] + fmul st0,st1 + fistp [Scrollersize] + fstp [v] + + cmp [Scrollersize],4 + jae no_minimum_size_horizontal_3D_scroller + + mov [Scrollersize],4 + no_minimum_size_horizontal_3D_scroller: + + ;if scroller is not active than use this is coordinats. + xor eax,eax + mov ax,[Scroller.length] + sub eax,17+17 + sub eax,[Scrollersize] + mov [xo],eax + fld [Scroller.pos] + fild [xo] + fmul st0,st1 + fistp [v] + fstp [v2] + + xor eax,eax + mov ax,[Scroller.x] + add ax,17 + add eax,[v] + mov [ScrollBar.x],eax + + ;check button of mouse + mov eax,[ButtonsOfMouse] + + and eax,1b + test al,al + jz no_horizontal_scroller_move + ;calculate in pixels length of scroll bar + + xor eax,eax + xor edx,edx + xor ecx,ecx + mov ax,[Scroller.x] + mov cx,[Scroller.length] + mov dx,[Scroller.mouseX] + mov ebx,edx + add ecx,eax + add eax,17 + sub ecx,17 + mov esi,ecx + + sub ebx,eax + jns no_minimum_scroller_x_ + + mov [Scroller.mouseX],ax + no_minimum_scroller_x_: + + sub ecx,edx + jns no_maximum_scroller_x_ + + mov [Scroller.mouseX],si + no_maximum_scroller_x_: + + + mov eax,[Scrollersize] + shr eax,1 + xor ebx,ebx + mov bx,[Scroller.mouseX] + sub bx,[Scroller.x] + sub ebx,17 + xor ecx,ecx + mov cx,[Scroller.x] + add cx,[Scroller.length] + sub cx,17 + sub cx,[Scroller.mouseX] + + cmp ebx,eax + jae no_correct_x_ + xor edx,edx + mov dx,[Scroller.x] + add dx,17 + add edx,eax + no_correct_x_: + + cmp ecx,eax + jae no_correct_x__ + xor edx,edx + mov dx,[Scroller.x] + add dx,[Scroller.length] + sub dx,17 + sub edx,eax + no_correct_x__: + + mov [ScrollBar.x],edx + sub [ScrollBar.x],eax + sub dx,[Scroller.x] + sub edx,17 + sub edx,eax + mov [v],edx + + xor ebx,ebx + mov bx,[Scroller.length] + sub ebx,17+17 + sub ebx,[Scrollersize] + mov [v2],ebx + + fild [v2] + fild [v] + fdiv st0,st1 + fstp [Scroller.pos] + fistp [v2] + + ;put 5 bit(scroll bar move) + or [Scroller.type],sc_scroll_bar_move + + mov esi,dword Scroller + mov edi,[PointerForScroller] + add esi,control_header_size + add edi,control_header_size + mov ecx,sc_control_data_size + rep movsb + + jmp no_horizontal_scroller_active + no_horizontal_scroller_move: + + no_horizontal_scroller_active: + + ;if bit 7 is a true than redraw all scroller. + + xor eax,eax + mov al,[Scroller.type] + and al,sc_redraw + test al,al + jz no_redraw_all_horizontal_scroller + + and [Scroller.type],sc_redraw_off + mov esi,dword Scroller + mov edi,[PointerForScroller] + add esi,control_header_size + add edi,control_header_size + mov ecx,sc_control_data_size + rep movsb + + call DrawButtonsOfHorizontal3DScroller + + no_redraw_all_horizontal_scroller: + + xor eax,eax + mov al,[Scroller.type] + and al,sc_scroll_bar_move + test al,al + jz no_move_horizontal_scroller_bar_3D + + xor ebx,ebx + mov bx,[Scroller.y] + mov eax,[ScrollBar.x] + mov ecx,[Scrollersize] + call DrawHorizontal3DScrollBar + + and [Scroller.type],sc_scroll_bar_move_off + mov esi,dword Scroller + mov edi,[PointerForScroller] + add esi,control_header_size + add edi,control_header_size + mov ecx,sc_control_data_size + rep movsb + + no_move_horizontal_scroller_bar_3D: + + xor eax,eax + xor ebx,ebx + xor ecx,ecx + xor edx,edx + xor esi,esi + xor edi,edi + mov ax,[Scroller.x] + mov bx,[Scroller.y] + mov dx,16 + mov cx,[Scroller.length] + mov si,[Scroller.mouseX] + mov di,[Scroller.mouseY] + add eax,17 + sub ecx,17+17 + call CheckCrossingBox + + cmp eax,0xffffff + jne no_crossing_horizontal_scroller_3D_ + + or [Scroller.type],sc_active + mov esi,dword Scroller + mov edi,[PointerForScroller] + add esi,control_header_size + add edi,control_header_size + mov ecx,sc_control_data_size + rep movsb + + jmp exit_crossing_horizontal_scroller_3D + no_crossing_horizontal_scroller_3D_: + + ;check button of mouse + mov eax,[ButtonsOfMouse] + + and eax,1b + test al,al + jnz mouse_button_pressed_horizontal + + and [Scroller.type],sc_move_active_off + mov esi,dword Scroller + mov edi,[PointerForScroller] + add esi,control_header_size + add edi,control_header_size + mov ecx,sc_control_data_size + rep movsb + mouse_button_pressed_horizontal: + + exit_crossing_horizontal_scroller_3D: + + + xor eax,eax + mov al,[Scroller.type] + and al,sc_active + test al,al + jz no_change_horizontal_scroller_3D + + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.y] + mov bx,[Scroller.mouseY] + + sub eax,ebx + jns no_signum_1_x + neg eax + no_signum_1_x: + + cmp eax,110 + jle no_change_bits_horizontal_scroller_3D + + and [Scroller.type],sc_move_active_off + no_change_bits_horizontal_scroller_3D: + + mov esi,dword Scroller + mov edi,[PointerForScroller] + add esi,control_header_size + add edi,control_header_size + mov ecx,sc_control_data_size + rep movsb + + no_change_horizontal_scroller_3D: + + no_horizontal_scroller_3D: + + no_3D_scroller: + + ;**************************************************** + ;********************2D scrollers********************* + ;**************************************************** + + xor eax,eax + mov al,[Scroller.type] + and al,sc_check_3D_type + test al,al + jnz no_2D_scroller + + mov eax,[Scroller.color1] + mov ebx,0xffffff + mov ecx,16 + mov edx,dword pointer + call gradient + + mov eax,[pointer+9] + and eax,0xffffff + mov [Color],eax + + mov eax,[pointer] + mov ebx,0xffffff + call calculate_average_color + mov [AveregeColor],eax + + ;is a vertical 2D scroller ? + xor eax,eax + mov al,[Scroller.type] + and al,sc_check_vertical + test al,al + jz no_vertical_scroller_2D + + xor eax,eax + xor ebx,ebx + xor ecx,ecx + xor edx,edx + xor esi,esi + xor edi,edi + mov ax,[Scroller.x] + mov bx,[Scroller.y] + mov cx,16 + mov dx,[Scroller.length] + mov si,[Scroller.mouseX] + mov di,[Scroller.mouseY] + add ebx,17 + sub edx,17+17 + call CheckCrossingBox + + cmp eax,0xffffff + jne no_crossing_vertical_scroller_2D + + or [Scroller.type],sc_active + mov esi,dword Scroller + mov edi,[PointerForScroller] + add esi,control_header_size + add edi,control_header_size + mov ecx,sc_control_data_size + rep movsb + + no_crossing_vertical_scroller_2D: + + ;is a vertical 2D scroller active ? + xor eax,eax + mov al,[Scroller.type] + and al,sc_active + test al,al + jz no_vertical_scroller_active_2D + + ;calculate size of scroll bar + xor eax,eax + mov ax,[Scroller.length] + sub eax,16+16 + mov [v],eax + fld [Scroller.size] + fild [v] + fmul st0,st1 + fistp [Scrollersize] + fstp [v] + + cmp [Scrollersize],4 + jae no_minimum_size_vertical_2D_scroller + + mov [Scrollersize],4 + no_minimum_size_vertical_2D_scroller: + + ;if scroller is not active than use this is coordinats. + xor eax,eax + mov ax,[Scroller.length] + sub eax,17+17 + sub eax,[Scrollersize] + mov [yo],eax + fld [Scroller.pos] + fild [yo] + fmul st0,st1 + fistp [v] + fstp [v2] + + xor eax,eax + mov ax,[Scroller.y] + add ax,16 + add eax,[v] + mov [ScrollBar.y],eax + + ;check button of mouse + mov eax,[ButtonsOfMouse] + + and eax,1b + test al,al + jz no_vertical_scroller_move_2D + ;calculate in pixels length of scroll bar + + xor eax,eax + xor edx,edx + xor ecx,ecx + mov ax,[Scroller.y] + mov cx,[Scroller.length] + mov dx,[Scroller.mouseY] + mov ebx,edx + add ecx,eax + add eax,17 + sub ecx,17 + mov esi,ecx + + sub ebx,eax + jns no_minimum_scroller_y_2D + + mov [Scroller.mouseY],ax + no_minimum_scroller_y_2D: + + sub ecx,edx + jns no_maximum_scroller_y_2D + + mov [Scroller.mouseY],si + no_maximum_scroller_y_2D: + + + mov eax,[Scrollersize] + shr eax,1 + xor ebx,ebx + mov bx,[Scroller.mouseY] + sub bx,[Scroller.y] + sub ebx,17 + xor ecx,ecx + mov cx,[Scroller.y] + add cx,[Scroller.length] + sub cx,17 + sub cx,[Scroller.mouseY] + + cmp ebx,eax + jae no_correct_y_2D_ + xor edx,edx + mov dx,[Scroller.y] + add dx,16 + add edx,eax + no_correct_y_2D_: + + cmp ecx,eax + jae no_correct_y_2D + xor edx,edx + mov dx,[Scroller.y] + add dx,[Scroller.length] + sub dx,16 + sub edx,eax + no_correct_y_2D: + + mov [ScrollBar.y],edx + sub [ScrollBar.y],eax + sub dx,[Scroller.y] + sub edx,16 + sub edx,eax + mov [v],edx + + shl eax,1 + xor ebx,ebx + mov bx,[Scroller.length] + sub ebx,16+16 + sub ebx,[Scrollersize] + mov [v2],ebx + + fild [v2] + fild [v] + fdiv st0,st1 + fstp [Scroller.pos] + fistp [v2] + + ;put 5 bit(scroll bar move) + or [Scroller.type],sc_scroll_bar_move + + mov esi,dword Scroller + mov edi,[PointerForScroller] + add esi,control_header_size + add edi,control_header_size + mov ecx,sc_control_data_size + rep movsb + + jmp no_vertical_scroller_active_2D + no_vertical_scroller_move_2D: + + no_vertical_scroller_active_2D: + + ;if bit 7 is a true than redraw all scroller. + + xor eax,eax + mov al,[Scroller.type] + and al,sc_redraw + test al,al + jz no_redraw_all_vertical_scroller_2D + + and [Scroller.type],sc_redraw_off + mov esi,dword Scroller + mov edi,[PointerForScroller] + add esi,control_header_size + add edi,control_header_size + mov ecx,sc_control_data_size + rep movsb + + call DrawButtonsOf2DVerticalScroller + + no_redraw_all_vertical_scroller_2D: + + xor eax,eax + mov al,[Scroller.type] + and al,sc_scroll_bar_move + test al,al + jz no_move_vertical_scroller_bar_2D + + xor eax,eax + mov ax,[Scroller.x] + mov ebx,[ScrollBar.y] + mov ecx,[Scrollersize] + call DrawVertical2DScrollBar + + and [Scroller.type],sc_scroll_bar_move_off + mov esi,dword Scroller + mov edi,[PointerForScroller] + add esi,control_header_size + add edi,control_header_size + mov ecx,sc_control_data_size + rep movsb + + no_move_vertical_scroller_bar_2D: + + xor eax,eax + xor ebx,ebx + xor ecx,ecx + xor edx,edx + xor esi,esi + xor edi,edi + mov ax,[Scroller.x] + mov bx,[Scroller.y] + mov cx,16 + mov dx,[Scroller.length] + mov si,[Scroller.mouseX] + mov di,[Scroller.mouseY] + add ebx,17 + sub edx,17+17 + call CheckCrossingBox + + cmp eax,0xffffff + jne no_crossing_vertical_scroller_2D_ + + or [Scroller.type],sc_active + mov esi,dword Scroller + mov edi,[PointerForScroller] + add esi,control_header_size + add edi,control_header_size + mov ecx,sc_control_data_size + rep movsb + + jmp exit_crossing_vertical_scroller_2D + no_crossing_vertical_scroller_2D_: + + ;check button of mouse + mov eax,[ButtonsOfMouse] + + and eax,1b + test al,al + jnz mouse_button_pressed_vertical_2D + + and [Scroller.type],sc_move_active_off + mov esi,dword Scroller + mov edi,[PointerForScroller] + add esi,control_header_size + add edi,control_header_size + mov ecx,sc_control_data_size + rep movsb + mouse_button_pressed_vertical_2D: + + exit_crossing_vertical_scroller_2D: + + + xor eax,eax + mov al,[Scroller.type] + and al,sc_active + test al,al + jz no_change_vertical_scroller_2D + + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.mouseX] + + sub eax,ebx + jns no_signum_1_y_2D + neg eax + no_signum_1_y_2D: + + cmp eax,110 + jle no_change_bits_vertical_scroller_2D + + and [Scroller.type],sc_move_active_off + no_change_bits_vertical_scroller_2D: + + mov esi,dword Scroller + mov edi,[PointerForScroller] + add esi,control_header_size + add edi,control_header_size + mov ecx,sc_control_data_size + rep movsb + + no_change_vertical_scroller_2D: + + no_vertical_scroller_2D: + + ;****************Horinzontal scroller************** + + ;is a horizontal 2D scroller ? + xor eax,eax + mov al,[Scroller.type] + and al,sc_check_horizontal + test al,al + jz no_horizontal_scroller_2D + + xor eax,eax + xor ebx,ebx + xor ecx,ecx + xor edx,edx + xor esi,esi + xor edi,edi + mov ax,[Scroller.x] + mov bx,[Scroller.y] + mov cx,[Scroller.length] + mov dx,16 + mov si,[Scroller.mouseX] + mov di,[Scroller.mouseY] + add eax,17 + sub ecx,17+17 + call CheckCrossingBox + + cmp eax,0xffffff + jne no_crossing_horizontal_scroller_2D + + or [Scroller.type],sc_active + mov esi,dword Scroller + mov edi,[PointerForScroller] + add esi,control_header_size + add edi,control_header_size + mov ecx,sc_control_data_size + rep movsb + + no_crossing_horizontal_scroller_2D: + + ;is a vertical 3D scroller active ? + xor eax,eax + mov al,[Scroller.type] + and al,sc_active + test al,al + jz no_horizontal_scroller_active_2D + + ;calculate size of scroll bar + xor eax,eax + mov ax,[Scroller.length] + sub eax,16+16 + mov [v],eax + fld [Scroller.size] + fild [v] + fmul st0,st1 + fistp [Scrollersize] + fstp [v] + + cmp [Scrollersize],4 + jae no_minimum_size_horizontal_2D_scroller + + mov [Scrollersize],4 + no_minimum_size_horizontal_2D_scroller: + + ;if scroller is not active than use this is coordinats. + xor eax,eax + mov ax,[Scroller.length] + sub eax,17+17 + sub eax,[Scrollersize] + mov [yo],eax + fld [Scroller.pos] + fild [yo] + fmul st0,st1 + fistp [v] + fstp [v2] + + xor eax,eax + mov ax,[Scroller.x] + add ax,16 + add eax,[v] + mov [ScrollBar.x],eax + + ;check button of mouse + mov eax,[ButtonsOfMouse] + + and eax,1b + test al,al + jz no_horizontal_scroller_move_2D + ;calculate in pixels length of scroll bar + + xor eax,eax + xor edx,edx + xor ecx,ecx + mov ax,[Scroller.x] + mov cx,[Scroller.length] + mov dx,[Scroller.mouseX] + mov ebx,edx + add ecx,eax + add eax,17 + sub ecx,17 + mov esi,ecx + + sub ebx,eax + jns no_minimum_scroller_x_2D + + mov [Scroller.mouseX],ax + no_minimum_scroller_x_2D: + + sub ecx,edx + jns no_maximum_scroller_x_2D + + mov [Scroller.mouseX],si + no_maximum_scroller_x_2D: + + + mov eax,[Scrollersize] + shr eax,1 + xor ebx,ebx + mov bx,[Scroller.mouseX] + sub bx,[Scroller.x] + sub ebx,17 + xor ecx,ecx + mov cx,[Scroller.x] + add cx,[Scroller.length] + sub cx,17 + sub cx,[Scroller.mouseX] + + cmp ebx,eax + jae no_correct_x_2D + xor edx,edx + mov dx,[Scroller.x] + add dx,16 + add edx,eax + no_correct_x_2D: + + cmp ecx,eax + jae no_correct_x__2D + xor edx,edx + mov dx,[Scroller.x] + add dx,[Scroller.length] + sub dx,16 + sub edx,eax + no_correct_x__2D: + + mov [ScrollBar.x],edx + sub [ScrollBar.x],eax + sub dx,[Scroller.x] + sub edx,16 + sub edx,eax + mov [v],edx + + xor ebx,ebx + mov bx,[Scroller.length] + sub ebx,16+16 + sub ebx,[Scrollersize] + mov [v2],ebx + + fild [v2] + fild [v] + fdiv st0,st1 + fstp [Scroller.pos] + fistp [v2] + + ;put 5 bit(scroll bar move) + or [Scroller.type],sc_scroll_bar_move + + mov esi,dword Scroller + mov edi,[PointerForScroller] + add esi,control_header_size + add edi,control_header_size + mov ecx,sc_control_data_size + rep movsb + + jmp no_horizontal_scroller_active_2D + no_horizontal_scroller_move_2D: + + no_horizontal_scroller_active_2D: + + ;if bit 7 is a true than redraw all scroller. + + xor eax,eax + mov al,[Scroller.type] + and al,sc_redraw + test al,al + jz no_redraw_all_horizontal_scroller_2D + + and [Scroller.type],sc_redraw_off + mov esi,dword Scroller + mov edi,[PointerForScroller] + add esi,control_header_size + add edi,control_header_size + mov ecx,sc_control_data_size + rep movsb + + call DrawButtonsOf2DHorizontalScroller + + no_redraw_all_horizontal_scroller_2D: + + xor eax,eax + mov al,[Scroller.type] + and al,sc_scroll_bar_move + test al,al + jz no_move_horizontal_scroller_bar_2D + + xor ebx,ebx + mov bx,[Scroller.y] + mov eax,[ScrollBar.x] + mov ecx,[Scrollersize] + call DrawHorizontal2DScrollBar + + and [Scroller.type],sc_scroll_bar_move_off + mov esi,dword Scroller + mov edi,[PointerForScroller] + add esi,control_header_size + add edi,control_header_size + mov ecx,sc_control_data_size + rep movsb + + no_move_horizontal_scroller_bar_2D: + + xor eax,eax + xor ebx,ebx + xor ecx,ecx + xor edx,edx + xor esi,esi + xor edi,edi + mov ax,[Scroller.x] + mov bx,[Scroller.y] + mov dx,16 + mov cx,[Scroller.length] + mov si,[Scroller.mouseX] + mov di,[Scroller.mouseY] + add eax,17 + sub ecx,17+17 + call CheckCrossingBox + + cmp eax,0xffffff + jne no_crossing_horizontal_scroller_2D_ + + or [Scroller.type],sc_active + mov esi,dword Scroller + mov edi,[PointerForScroller] + add esi,control_header_size + add edi,control_header_size + mov ecx,sc_control_data_size + rep movsb + + jmp exit_crossing_horizontal_scroller_2D + no_crossing_horizontal_scroller_2D_: + + ;check button of mouse + mov eax,[ButtonsOfMouse] + + and eax,1b + test al,al + jnz mouse_button_pressed_horizontal_2D + + and [Scroller.type],sc_move_active_off + mov esi,dword Scroller + mov edi,[PointerForScroller] + add esi,control_header_size + add edi,control_header_size + mov ecx,sc_control_data_size + rep movsb + mouse_button_pressed_horizontal_2D: + + exit_crossing_horizontal_scroller_2D: + + + xor eax,eax + mov al,[Scroller.type] + and al,sc_active + test al,al + jz no_change_horizontal_scroller_2D + + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.y] + mov bx,[Scroller.mouseY] + + sub eax,ebx + jns no_signum_1_x_2D + neg eax + no_signum_1_x_2D: + + cmp eax,110 + jle no_change_bits_horizontal_scroller_2D + + and [Scroller.type],sc_move_active_off + no_change_bits_horizontal_scroller_2D: + + mov esi,dword Scroller + mov edi,[PointerForScroller] + add esi,control_header_size + add edi,control_header_size + mov ecx,sc_control_data_size + rep movsb + + no_change_horizontal_scroller_2D: + + no_horizontal_scroller_2D: + + no_2D_scroller: + + ;checking to mouse events + cmp [Message],dword 6 + jne no_send_message_to_child_buttons_of_scroller + + ;checking first child button + mov eax,[Scroller.ChildButton1] + mov ebx,[eax] + + push Message + push eax + call ebx + + mov eax,[Scroller.ChildButton1] + + xor ebx,ebx + mov bl,[eax+45] + and bl,bt_crossing + test bl,bl + jz no_crossing_first_child_button_of_scroller + + xor ebx,ebx + mov bl,[eax+45] + and bl,10b + test bl,bl + jz no_crossing_first_child_button_of_scroller + + or [Scroller.buttons_flags],sc_first_child_button_pressed + or [Scroller.buttons_flags],10b + + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + mov [x],eax + mov [y],ebx + + ;-------------------------------------- + ;---Checking stcroler to 2D or 3D types + ;-------------------------------------- + xor eax,eax + mov al,[Scroller.type] + and al,sc_check_3D_type + test al,al + jnz type_3D_first_child_button_crossing + + ;if we here than scroller 2D type + + ;---------------------------------------------------- + ;---Chcecking scroller to horizontal or vertical types + ;---------------------------------------------------- + + call DrawPressedButtonOf2DScroller + + jmp else_type_3D_first_child_button_crossing + + type_3D_first_child_button_crossing: + + ;if we here than scroller 3D type + + call DrawPressedButtonOf3DScroller + + else_type_3D_first_child_button_crossing: + + jmp crossing_first_child_button_of_scroller + no_crossing_first_child_button_of_scroller: + + and [Scroller.buttons_flags],sc_first_child_button_pressed_off + + xor eax,eax + mov ax,[Scroller.buttons_flags] + and ax,10b + test ax,ax + jz no_put_first_child_button + + ;-------------------------------------- + ;---Checking stcroler to 2D or 3D types + ;-------------------------------------- + xor eax,eax + mov al,[Scroller.type] + and al,sc_check_3D_type + test al,al + jnz type_3D_first_child_button_not_crossing + + ;if we here than scroller 2D type + + ;---------------------------------------------------- + ;---Chcecking scroller to horizontal or vertical types + ;---------------------------------------------------- + + xor eax,eax + mov al,[Scroller.type] + and al,sc_check_vertical + test al,al + jz type_horizontal_first_child_2D_button + + ;put vertical first child button + call DrawButtonsOf2DVerticalScroller + + jmp exit_else_type_horizontal_first_child_2D_button + type_horizontal_first_child_2D_button: + + ;put horizontal first child button + call DrawButtonsOf2DVerticalScroller + + exit_else_type_horizontal_first_child_2D_button: + + jmp else_type_3D_first_child_button_not_crossing + + type_3D_first_child_button_not_crossing: + + ;if we here than scroller 3D type + + ;---------------------------------------------------- + ;---Chcecking scroller to horizontal or vertical types + ;---------------------------------------------------- + + xor eax,eax + mov al,[Scroller.type] + and al,sc_check_vertical + test al,al + jz type_horizontal_first_child_3D_button + + ;put vertical first child button + call DrawButtonsOfVertical3DScroller + + jmp else_type_3D_first_child_button_not_crossing + + type_horizontal_first_child_3D_button: + + ;put horizontal first child button + call DrawButtonsOfHorizontal3DScroller + + else_type_3D_first_child_button_not_crossing: + + and [Scroller.buttons_flags],11111101b + + no_put_first_child_button: + + crossing_first_child_button_of_scroller: + + ;checking second child button + mov eax,[Scroller.ChildButton2] + mov ebx,[eax] + + push Message + push eax + call ebx + + mov eax,[Scroller.ChildButton2] + + xor ebx,ebx + mov bl,[eax+45] + and bl,bt_crossing + test bl,bl + jz no_crossing_second_child_button_of_scroller + + xor ebx,ebx + mov bl,[eax+45] + and bl,10b + test bl,bl + jz no_crossing_second_child_button_of_scroller + + or [Scroller.buttons_flags],sc_second_child_button_pressed + or [Scroller.buttons_flags],100000b + + xor eax,eax + xor ebx,ebx + xor ecx,ecx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + mov [x],eax + mov [y],ebx + + mov cx,[Scroller.length] + sub ecx,16 + + ;---------------------------------------------------- + ;---Chcecking scroller to horizontal or vertical types + ;---------------------------------------------------- + xor eax,eax + mov al,[Scroller.type] + and al,sc_check_vertical + test al,al + jz calculate_pos_horizontal_second_child_button + + add [y],ecx + + jmp exit_else_calculate_pos_horizontal_second_child_button + calculate_pos_horizontal_second_child_button: + + add [x],ecx + + exit_else_calculate_pos_horizontal_second_child_button: + + ;-------------------------------------- + ;---Checking stcroler to 2D or 3D types + ;-------------------------------------- + xor eax,eax + mov al,[Scroller.type] + and al,sc_check_3D_type + test al,al + jnz type_3D_second_child_button_crossing + + ;if we here than scroller 2D type + + ;---------------------------------------------------- + ;---Chcecking scroller to horizontal or vertical types + ;---------------------------------------------------- + + call DrawPressedButtonOf2DScroller + + jmp else_type_3D_second_child_button_crossing + + type_3D_second_child_button_crossing: + + ;if we here than scroller 3D type + + call DrawPressedButtonOf3DScroller + + else_type_3D_second_child_button_crossing: + + jmp crossing_second_child_button_of_scroller + no_crossing_second_child_button_of_scroller: + + and [Scroller.buttons_flags],sc_second_child_button_pressed_off + + xor eax,eax + mov ax,[Scroller.buttons_flags] + and ax,100000b + test ax,ax + jz no_put_second_child_button + + ;-------------------------------------- + ;---Checking stcroler to 2D or 3D types + ;-------------------------------------- + xor eax,eax + mov al,[Scroller.type] + and al,sc_check_3D_type + test al,al + jnz type_3D_second_child_button_not_crossing + + ;if we here than scroller 2D type + + ;---------------------------------------------------- + ;---Chcecking scroller to horizontal or vertical types + ;---------------------------------------------------- + + xor eax,eax + mov al,[Scroller.type] + and al,sc_check_vertical + test al,al + jz type_horizontal_second_child_2D_button + + ;put vertical first child button + call DrawButtonsOf2DVerticalScroller + + jmp exit_else_type_horizontal_second_child_2D_button + type_horizontal_second_child_2D_button: + + ;put horizontal first child button + call DrawButtonsOf2DVerticalScroller + + exit_else_type_horizontal_second_child_2D_button: + + jmp else_type_3D_second_child_button_not_crossing + + type_3D_second_child_button_not_crossing: + + ;if we here than scroller 3D type + + ;---------------------------------------------------- + ;---Chcecking scroller to horizontal or vertical types + ;---------------------------------------------------- + + xor eax,eax + mov al,[Scroller.type] + and al,sc_check_vertical + test al,al + jz type_horizontal_second_child_3D_button + + ;put vertical first child button + call DrawButtonsOfVertical3DScroller + + jmp else_type_3D_second_child_button_not_crossing + + type_horizontal_second_child_3D_button: + + ;put horizontal first child button + call DrawButtonsOfHorizontal3DScroller + + else_type_3D_second_child_button_not_crossing: + + and [Scroller.buttons_flags],11011111b + + no_put_second_child_button: + + crossing_second_child_button_of_scroller: + + no_send_message_to_child_buttons_of_scroller: + + exit_scroller: + + ;save resultat of work in control + mov esi,dword Scroller + mov edi,[PointerForScroller] + mov ecx,sc_control_data_size + add esi,control_header_size + add edi,control_header_size + rep movsb + + ret 8 + + +DrawPressedButtonOf2DScroller: + + and [Line.color],0;eax + + ;draw horizontal up light line + mov eax,[x] + mov ebx,[y] + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + add [Line.x2],15 + call DrawLine + + ;draw vertical up light line + mov eax,[x] + mov ebx,[y] + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + add [Line.y2],14 + call DrawLine + + ;mov eax,[colors_table2+8*3] + ;and eax,0xffffff + mov [Line.color],0xffffff ;eax + + ;draw vertical up dark line + mov eax,[x] + mov ebx,[y] + add eax,15 + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + add [Line.y2],15 + call DrawLine + + ;draw horizontal up dark line + mov eax,[x] + mov ebx,[y] + add ebx,15 + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + add [Line.x2],15 + call DrawLine + + ret + +DrawPressedButtonOf3DScroller: + + and [Line.color],0;eax + + ;draw horizontal up light line + mov eax,[x] + mov ebx,[y] + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + add [Line.x2],16 + call DrawLine + + ;draw vertical up light line + mov eax,[x] + mov ebx,[y] + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + add [Line.y2],16 + call DrawLine + + ;mov eax,[colors_table2+8*3] + ;and eax,0xffffff + mov [Line.color],0xffffff ;eax + + ;draw vertical up dark line + mov eax,[x] + mov ebx,[y] + add eax,16 + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + add [Line.y2],16 + call DrawLine + + ;draw horizontal up dark line + mov eax,[x] + mov ebx,[y] + add ebx,16 + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + add [Line.x2],16 + call DrawLine + + ret + +DrawButtonsOf2DHorizontalScroller: + + ;generate colors tables + mov eax,[Scroller.color1] + mov ebx,0xffffff + mov ecx,20 + mov edx,dword colors_table1 + call gradient + + xor eax,eax + mov ebx,[Scroller.color1] + mov ecx,20 + mov edx,dword colors_table2 + call gradient + + ;draw vertical up rectangle + xor ebx,ebx + xor ecx,ecx + mov eax,13 + mov bx,[Scroller.x] + mov cx,[Scroller.y] + shl ebx,16 + shl ecx,16 + add ebx,16 + add ecx,16 + mov edx,[Color] + and edx,0xffffff + mcall + + mov eax,[colors_table1+15*3] + and eax,0xffffff + mov [Line.color],eax + + ;draw horizontal up light line + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + add [Line.x2],15 + call DrawLine + + ;draw vertical up light line + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + add [Line.y2],15 + call DrawLine + + mov eax,[colors_table2+8*3] + and eax,0xffffff + mov [Line.color],eax + + ;draw vertical up dark line + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + add eax,15 + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + add [Line.y2],15 + call DrawLine + + ;draw horizontal up dark line + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + add ebx,15 + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + add [Line.x2],14 + call DrawLine + + and [Line.color],0 + + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + add [Line.x1],5 + add [Line.x2],9 + add [Line.y1],8 + add [Line.y2],4 + call DrawLine + + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + add [Line.x1],6 + add [Line.x2],9 + add [Line.y1],8 + add [Line.y2],5 + call DrawLine + + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + add [Line.x1],5 + add [Line.x2],9 + add [Line.y1],8 + add [Line.y2],12 + call DrawLine + + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + add [Line.x1],6 + add [Line.x2],9 + add [Line.y1],8 + add [Line.y2],11 + call DrawLine + + ;draw vertical down rectangle + xor ebx,ebx + xor ecx,ecx + mov eax,13 + mov edx,[Color] + mov bx,[Scroller.x] + mov cx,[Scroller.y] + add bx,[Scroller.length] + sub bx,16 + shl ebx,16 + shl ecx,16 + add ebx,16 + add ecx,16 + and edx,0xffffff + mcall + + mov eax,[colors_table1+15*3] + and eax,0xffffff + mov [Line.color],eax + + ;draw horizontal up light line + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + add ax,[Scroller.length] + sub eax,15 + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + add [Line.x2],15 + call DrawLine + + ;draw vertical up light line + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + add ax,[Scroller.length] + sub eax,16 + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + add [Line.y2],15 + call DrawLine + + mov eax,[colors_table2+8*3] + and eax,0xffffff + mov [Line.color],eax + + ;draw vertical up dark line + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + add ax,[Scroller.length] + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + add [Line.y2],15 + call DrawLine + + ;draw horizontal up dark line + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + add ax,[Scroller.length] + sub eax,15 + add ebx,15 + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + add [Line.x2],15 + call DrawLine + + xor eax,eax + mov ax,[Scroller.length] + sub eax,16 + mov [length],eax + + and [Line.color],0 + + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + add eax,[length] + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + add [Line.x1],12 + add [Line.x2],8 + add [Line.y1],8 + add [Line.y2],4 + call DrawLine + + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + add eax,[length] + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + add [Line.x1],11 + add [Line.x2],8 + add [Line.y1],8 + add [Line.y2],5 + call DrawLine + + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + add eax,[length] + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + add [Line.x1],12 + add [Line.x2],8 + add [Line.y1],8 + add [Line.y2],12 + call DrawLine + + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + add eax,[length] + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + add [Line.x1],11 + add [Line.x2],8 + add [Line.y1],8 + add [Line.y2],11 + call DrawLine + + ret + +DrawButtonsOf2DVerticalScroller: + + ;generate colors tables + mov eax,[Scroller.color1] + mov ebx,0xffffff + mov ecx,20 + mov edx,dword colors_table1 + call gradient + + xor eax,eax + mov ebx,[Scroller.color1] + mov ecx,20 + mov edx,dword colors_table2 + call gradient + + ;draw vertical up rectangle + mov eax,13 + mov edx,[Color] + xor ebx,ebx + xor ecx,ecx + mov bx,[Scroller.x] + mov cx,[Scroller.y] + shl ebx,16 + shl ecx,16 + add ebx,16 + add ecx,16 + and edx,0xffffff + mcall + + mov eax,[colors_table1+15*3] + and eax,0xffffff + mov [Line.color],eax + + ;draw horizontal up light line + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + add [Line.x2],14 + call DrawLine + + ;draw vertical up light line + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + add [Line.y2],14 + call DrawLine + + mov eax,[colors_table2+8*3];[pointer] + and eax,0xffffff + mov [Line.color],eax + + ;draw vertical up dark line + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + add eax,15 + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + add [Line.y2],15 + call DrawLine + + ;draw horizontal up dark line + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + add ebx,15 + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + add [Line.x2],15 + call DrawLine + + and [Line.color],0 + + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + add [Line.x1],4 + add [Line.x2],8 + add [Line.y1],9 + add [Line.y2],5 + call DrawLine + + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + add [Line.x1],4 + add [Line.x2],8 + add [Line.y1],10 + add [Line.y2],6 + call DrawLine + + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + add [Line.x1],8 + add [Line.x2],12 + add [Line.y1],5 + add [Line.y2],9 + call DrawLine + + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + add [Line.x1],8 + add [Line.x2],12 + add [Line.y1],6 + add [Line.y2],10 + call DrawLine + + ;draw vertical down rectangle + xor ebx,ebx + xor ecx,ecx + mov eax,13 + mov edx,[Color] + and edx,0xffffff + mov bx,[Scroller.x] + mov cx,[Scroller.y] + add cx,[Scroller.length] + sub cx,16 + shl ebx,16 + shl ecx,16 + add ebx,16 + add ecx,16 + mcall + + mov eax,[colors_table1+15*3] + and eax,0xffffff + mov [Line.color],eax + + ;draw horizontal up light line + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + add bx,[Scroller.length] + sub ebx,16 + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + add [Line.x2],15 + call DrawLine + + ;draw vertical up light line + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + add bx,[Scroller.length] + sub ebx,16 + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + add [Line.y2],15 + call DrawLine + + mov eax,[colors_table2+8*3];[pointer] + and eax,0xffffff + mov [Line.color],eax + + ;draw vertical up dark line + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + add bx,[Scroller.length] + sub ebx,16 + add eax,15 + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + add [Line.y2],15 + call DrawLine + + ;draw horizontal up dark line + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + add bx,[Scroller.length] + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + add [Line.x2],15 + call DrawLine + + xor eax,eax + mov ax,[Scroller.length] + sub eax,16 + mov [length],eax + + and [Line.color],0 + + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + add ebx,[length] + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + add [Line.x1],4 + add [Line.x2],8 + add [Line.y1],7 + add [Line.y2],11 + call DrawLine + + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + add ebx,[length] + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + add [Line.x1],4 + add [Line.x2],8 + add [Line.y1],6 + add [Line.y2],10 + call DrawLine + + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + add ebx,[length] + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + add [Line.x1],12 + add [Line.x2],8 + add [Line.y1],7 + add [Line.y2],11 + call DrawLine + + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + add ebx,[length] + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + add [Line.x1],12 + add [Line.x2],8 + add [Line.y1],6 + add [Line.y2],10 + call DrawLine + + ret + +DrawButtonsOfHorizontal3DScroller: + + ;draw vertical up rectangle + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + mov [Rectangle.x],eax + mov [Rectangle.y],ebx + mov [Rectangle.width],16 + mov [Rectangle.height],16 + + mov eax,[pointer] + and eax,0xffffff + mov [Rectangle.color],eax + call RectangleContour + + ;draw gradient right + mov eax,[Scroller.color1] + mov ebx,dword 0xffffff + and eax,0xffffff + xor ecx,ecx + xor edx,edx + xor esi,esi + xor edi,edi + mov cx,[Scroller.x] + mov dx,[Scroller.y] + mov si,(16-1) + mov di,(16-2) + add cx,1 + add dx,1 + call rectangle_gradient_up + + mov eax,[pointer+10*3] + and eax,0xffffff + mov [Line.color],eax + + ;draw horizontal up light line + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + add eax,1 + add ebx,1 + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + add [Line.x2],14 + call DrawLine + + ;draw vertical up light line + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + add eax,1 + add ebx,1 + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + add [Line.y2],14 + call DrawLine + + mov eax,[Color] + mov [Line.color],eax + + ;draw vertical up dark line + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + add eax,16 + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + add [Line.y1],1 + add [Line.y2],14 + call DrawLine + + ;draw horizontal up dark line + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + add eax,1 + add ebx,15 + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + add [Line.x2],14 + call DrawLine + + xor eax,eax + mov eax,[AveregeColor] + mov [Pixel.color],eax + + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + mov [Pixel.x],eax + mov [Pixel.y],ebx + call DrawPixel + + xor eax,eax + mov ax,[Scroller.x] + add eax,16 + mov [Pixel.x],eax + call DrawPixel + + xor eax,eax + mov ax,[Scroller.x] + mov [Pixel.x],eax + add [Pixel.y],16 + call DrawPixel + + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + add eax,16 + add ebx,16 + mov [Pixel.x],eax + mov [Pixel.y],ebx + call DrawPixel + + ;---------------- + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + add eax,1 + add ebx,1 + mov [Pixel.x],eax + mov [Pixel.y],ebx + call DrawPixel + + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + add eax,15 + add ebx,1 + mov [Pixel.x],eax + mov [Pixel.y],ebx + call DrawPixel + + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + add eax,1 + add ebx,15 + mov [Pixel.x],eax + mov [Pixel.y],ebx + call DrawPixel + + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + add eax,15 + add ebx,15 + mov [Pixel.x],eax + mov [Pixel.y],ebx + call DrawPixel + + mov [Line.color],0 + + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + add [Line.x1],5 + add [Line.x2],9 + add [Line.y1],8 + add [Line.y2],4 + call DrawLine + + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + add [Line.x1],6 + add [Line.x2],9 + add [Line.y1],8 + add [Line.y2],5 + call DrawLine + + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + add [Line.x1],5 + add [Line.x2],9 + add [Line.y1],8 + add [Line.y2],12 + call DrawLine + + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + add [Line.x1],6 + add [Line.x2],9 + add [Line.y1],8 + add [Line.y2],11 + call DrawLine + + ;draw vertical down rectangle + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + add ax,[Scroller.length] + sub ax,16 + mov [Rectangle.x],eax + mov [Rectangle.y],ebx + mov [Rectangle.width],16 + mov [Rectangle.height],16 + + mov eax,[pointer] + and eax,0xffffff + mov [Rectangle.color],eax + call RectangleContour + + ;draw gradient right + mov eax,[Scroller.color1] + mov ebx,dword 0xffffff + and eax,0xffffff + xor ecx,ecx + xor edx,edx + xor esi,esi + xor edi,edi + mov cx,[Scroller.x] + mov dx,[Scroller.y] + add cx,[Scroller.length] + sub cx,16 + mov si,(16-1) + mov di,(16-2) + add cx,1 + add dx,1 + call rectangle_gradient_up + + mov eax,[pointer+10*3] + and eax,0xffffff + mov [Line.color],eax + + ;draw horizontal up light line + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + add ax,[Scroller.length] + sub eax,15 + add ebx,1 + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + add [Line.x2],15 + call DrawLine + + ;draw vertical up light line + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + add ebx,1 + add ax,[Scroller.length] + sub eax,15 + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + add [Line.y2],14 + call DrawLine + + mov eax,[Color];[pointer] + mov [Line.color],eax + + ;draw vertical up dark line + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + add ax,[Scroller.length] + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + add [Line.y2],15 + call DrawLine + + ;draw horizontal up dark line + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + add ax,[Scroller.length] + sub eax,15 + add ebx,15 + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + add [Line.x2],14 + call DrawLine + + xor eax,eax + mov ax,[Scroller.length] + sub eax,16 + mov [length],eax + + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + add eax,[length] + mov [Pixel.x],eax + mov [Pixel.y],ebx + call DrawPixel + + add [Pixel.x],16 + call DrawPixel + + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + add ebx,16 + add eax,[length] + mov [Pixel.x],eax + mov [Pixel.y],ebx + call DrawPixel + + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + add eax,16 + add ebx,16 + add eax,[length] + mov [Pixel.x],eax + mov [Pixel.y],ebx + call DrawPixel + + ;---------------- + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + add eax,1 + add ebx,1 + add eax,[length] + mov [Pixel.x],eax + mov [Pixel.y],ebx + call DrawPixel + + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + add eax,15 + add ebx,1 + add eax,[length] + mov [Pixel.x],eax + mov [Pixel.y],ebx + call DrawPixel + + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + add eax,1 + add ebx,15 + add eax,[length] + mov [Pixel.x],eax + mov [Pixel.y],ebx + call DrawPixel + + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + add eax,15 + add ebx,15 + add eax,[length] + mov [Pixel.x],eax + mov [Pixel.y],ebx + call DrawPixel + + xor eax,eax + mov ax,[Scroller.length] + sub eax,16 + mov [length],eax + + and [Line.color],0 + + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + add eax,[length] + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + add [Line.x1],12 + add [Line.x2],8 + add [Line.y1],8 + add [Line.y2],4 + call DrawLine + + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + add eax,[length] + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + add [Line.x1],11 + add [Line.x2],8 + add [Line.y1],8 + add [Line.y2],5 + call DrawLine + + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + add eax,[length] + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + add [Line.x1],12 + add [Line.x2],8 + add [Line.y1],8 + add [Line.y2],12 + call DrawLine + + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + add eax,[length] + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + add [Line.x1],11 + add [Line.x2],8 + add [Line.y1],8 + add [Line.y2],11 + call DrawLine + + ret + +DrawButtonsOfVertical3DScroller: + + ;draw vertical up rectangle + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + mov [Rectangle.x],eax + mov [Rectangle.y],ebx + mov [Rectangle.width],16 + mov [Rectangle.height],16 + + mov eax,[pointer] + and eax,0xffffff + mov [Rectangle.color],eax + call RectangleContour + + ;draw gradient right + mov eax,[Scroller.color1] + mov ebx,dword 0xffffff + and eax,0xffffff + xor ecx,ecx + xor edx,edx + xor esi,esi + xor edi,edi + mov cx,[Scroller.x] + mov dx,[Scroller.y] + mov si,(16-1) + mov di,(16-2) + add cx,1 + add dx,1 + call rectangle_gradient_right + + mov eax,[pointer+10*3] + and eax,0xffffff + mov [Line.color],eax + + ;draw horizontal up light line + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + add eax,1 + add ebx,1 + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + add [Line.x2],14 + call DrawLine + + ;draw vertical up light line + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + add eax,1 + add ebx,1 + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + add [Line.y2],14 + call DrawLine + + mov eax,[Color] + mov [Line.color],eax + + ;draw vertical up dark line + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + add eax,15 + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + add [Line.y1],1 + add [Line.y2],14 + call DrawLine + + ;draw horizontal up dark line + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + add eax,1 + add ebx,15 + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + add [Line.x2],14 + call DrawLine + + xor eax,eax + mov eax,[AveregeColor] + mov [Pixel.color],eax + + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + mov [Pixel.x],eax + mov [Pixel.y],ebx + call DrawPixel + + xor eax,eax + mov ax,[Scroller.x] + add eax,16 + mov [Pixel.x],eax + call DrawPixel + + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + add ebx,16 + mov [Pixel.x],eax + mov [Pixel.y],ebx + call DrawPixel + + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + add eax,16 + add ebx,16 + mov [Pixel.x],eax + mov [Pixel.y],ebx + call DrawPixel + + ;---------------- + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + add eax,1 + add ebx,1 + mov [Pixel.x],eax + mov [Pixel.y],ebx + call DrawPixel + + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + add eax,15 + add ebx,1 + mov [Pixel.x],eax + mov [Pixel.y],ebx + call DrawPixel + + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + add eax,1 + add ebx,15 + mov [Pixel.x],eax + mov [Pixel.y],ebx + call DrawPixel + + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + add eax,15 + add ebx,15 + mov [Pixel.x],eax + mov [Pixel.y],ebx + call DrawPixel + + and [Line.color],0 + + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + add [Line.x1],4 + add [Line.x2],8 + add [Line.y1],9 + add [Line.y2],5 + call DrawLine + + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + add [Line.x1],4 + add [Line.x2],8 + add [Line.y1],10 + add [Line.y2],6 + call DrawLine + + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + add [Line.x1],8 + add [Line.x2],12 + add [Line.y1],5 + add [Line.y2],9 + call DrawLine + + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + add [Line.x1],8 + add [Line.x2],12 + add [Line.y1],6 + add [Line.y2],10 + call DrawLine + + ;draw vertical down rectangle + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + add bx,[Scroller.length] + sub bx,16 + mov [Rectangle.x],eax + mov [Rectangle.y],ebx + mov [Rectangle.width],16 + mov [Rectangle.height],16 + + mov eax,[pointer] + and eax,0xffffff + mov [Rectangle.color],eax + call RectangleContour + + ;draw gradient right + mov eax,[Scroller.color1] + mov ebx,dword 0xffffff + and eax,0xffffff + xor ecx,ecx + xor edx,edx + xor esi,esi + xor edi,edi + mov cx,[Scroller.x] + mov dx,[Scroller.y] + add dx,[Scroller.length] + sub dx,(16-1) + mov si,(16-1) + mov di,(16-2) + add cx,1 + call rectangle_gradient_right + + mov eax,[pointer+10*3] + and eax,0xffffff + mov [Line.color],eax + + ;draw horizontal up light line + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + add bx,[Scroller.length] + sub ebx,15 + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + add [Line.x1],1 + add [Line.x2],15 + call DrawLine + + ;draw vertical up light line + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + add eax,1 + add bx,[Scroller.length] + sub ebx,15 + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + add [Line.y2],14 + call DrawLine + + mov eax,[Color];[pointer] + mov [Line.color],eax + + ;draw vertical up dark line + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + add bx,[Scroller.length] + sub ebx,15 + add eax,15 + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + add [Line.y2],14 + call DrawLine + + ;draw horizontal up dark line + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + add bx,[Scroller.length] + add eax,1 + sub ebx,1 + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + add [Line.x2],14 + call DrawLine + + xor eax,eax + mov ax,[Scroller.length] + sub eax,16 + mov [length],eax + + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + add ebx,[length] + mov [Pixel.x],eax + mov [Pixel.y],ebx + call DrawPixel + + xor eax,eax + mov ax,[Scroller.x] + add eax,16 + mov [Pixel.x],eax + call DrawPixel + + xor eax,eax + mov ax,[Scroller.x] + mov [Pixel.x],eax + add [Pixel.y],16 + call DrawPixel + + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + add eax,16 + add ebx,16 + add ebx,[length] + mov [Pixel.x],eax + mov [Pixel.y],ebx + call DrawPixel + + ;---------------- + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + add eax,1 + add ebx,1 + add ebx,[length] + mov [Pixel.x],eax + mov [Pixel.y],ebx + call DrawPixel + + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + add eax,15 + add ebx,1 + add ebx,[length] + mov [Pixel.x],eax + mov [Pixel.y],ebx + call DrawPixel + + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + add eax,1 + add ebx,15 + add ebx,[length] + mov [Pixel.x],eax + mov [Pixel.y],ebx + call DrawPixel + + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + add eax,15 + add ebx,15 + add ebx,[length] + mov [Pixel.x],eax + mov [Pixel.y],ebx + call DrawPixel + + xor eax,eax + mov ax,[Scroller.length] + sub eax,16 + mov [length],eax + + and [Line.color],0 + + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + add ebx,[length] + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + add [Line.x1],4 + add [Line.x2],8 + add [Line.y1],7 + add [Line.y2],11 + call DrawLine + + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + add ebx,[length] + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + add [Line.x1],4 + add [Line.x2],8 + add [Line.y1],6 + add [Line.y2],10 + call DrawLine + + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + add ebx,[length] + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + add [Line.x1],12 + add [Line.x2],8 + add [Line.y1],7 + add [Line.y2],11 + call DrawLine + + xor eax,eax + xor ebx,ebx + mov ax,[Scroller.x] + mov bx,[Scroller.y] + add ebx,[length] + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + add [Line.x1],12 + add [Line.x2],8 + add [Line.y1],6 + add [Line.y2],10 + call DrawLine + + ret + +;eax - x +;ebx - y +;ecx - size y in pixels +DrawVertical3DScrollBar: + + mov [x],eax + mov [y],ebx + mov [length2],ecx + + mov eax,[x] + mov ebx,[y] + mov ecx,[length2] + mov edx,[pointer] + and edx,0xffffff + mov [Rectangle.x],eax + mov [Rectangle.y],ebx + mov [Rectangle.width],16 + mov [Rectangle.height],ecx + mov [Rectangle.color],edx + call RectangleContour + + ;draw gradient right + mov eax,[Scroller.color1] + mov ebx,dword 0xffffff + and eax,0xffffff + xor esi,esi + xor edi,edi + mov ecx,[x] + mov edx,[y] + add edx,1 + mov si,(16-1) + mov edi,[length2] + sub edi,2 + call rectangle_gradient_right + + ;------------------ + xor eax,eax + mov eax,[AveregeColor] + mov [Pixel.color],eax + + mov eax,[x] + mov ebx,[y] + mov [Pixel.x],eax + mov [Pixel.y],ebx + call DrawPixel + + mov eax,[x] + add eax,16 + mov [Pixel.x],eax + call DrawPixel + + mov eax,[x] + mov ebx,[y] + add ebx,[length2] + mov [Pixel.x],eax + mov [Pixel.y],ebx + call DrawPixel + + mov eax,[x] + mov ebx,[y] + add eax,16 + add ebx,[length2] + mov [Pixel.x],eax + mov [Pixel.y],ebx + call DrawPixel + + mov eax,[x] + mov ebx,[y] + add eax,1 + add ebx,1 + mov [Pixel.x],eax + mov [Pixel.y],ebx + call DrawPixel + + mov eax,[x] + mov ebx,[y] + add eax,15 + add ebx,1 + mov [Pixel.x],eax + mov [Pixel.y],ebx + call DrawPixel + + mov eax,[x] + mov ebx,[y] + add eax,1 + add ebx,[length2] + sub ebx,1 + mov [Pixel.x],eax + mov [Pixel.y],ebx + call DrawPixel + + mov eax,[x] + mov ebx,[y] + add eax,16 + add ebx,[length2] + sub eax,1 + sub ebx,1 + mov [Pixel.x],eax + mov [Pixel.y],ebx + call DrawPixel + + cmp [length2],12 + jl no_draw_reliev_vertical_3D + + mov ebx,[x] + mov eax,[length2] + shr eax,1 + add eax,[y] + add ebx,5 + sub eax,3 + + mov [Line.x1],ebx + mov [Line.x2],ebx + mov [Line.y1],eax + mov [Line.y2],eax + mov [Line.color],0xffffff + add [Line.x2],6 + + mov esi,4 + next_light_line_draw_r_vertical_3D: + + call DrawLine + add [Line.y1],2 + add [Line.y2],2 + + dec esi + jnz next_light_line_draw_r_vertical_3D + + mov ebx,[x] + mov eax,[length2] + shr eax,1 + add eax,[y] + add ebx,6 + sub eax,2 + + mov ecx,[Scroller.color1] + mov [Line.x1],ebx + mov [Line.x2],ebx + mov [Line.y1],eax + mov [Line.y2],eax + mov [Line.color],ecx + add [Line.x2],6 + + mov esi,4 + next_dark_line_draw_r_vertical_3D: + + call DrawLine + add [Line.y1],2 + add [Line.y2],2 + + dec esi + jnz next_dark_line_draw_r_vertical_3D + + no_draw_reliev_vertical_3D: + + + xor eax,eax + mov ax,[Scroller.y] + mov ebx,[y] + add eax,17 + + sub ebx,eax + jz no_draw_up_rectangle_vertical_3D + js no_draw_up_rectangle_vertical_3D + + sub ebx,1 + + mov edi,ebx + + mov eax,0xe4e4e4 + mov ebx,0xffffff + xor edx,edx + mov ecx,[x] + mov dx,[Scroller.y] + add edx,17 + sub ecx,1 + mov esi,17 + call rectangle_gradient_right + no_draw_up_rectangle_vertical_3D: + + xor eax,eax + mov ax,[Scroller.y] + add ax,[Scroller.length] + mov ebx,[y] + add ebx,[length2] + sub eax,17 + + sub eax,ebx + jz no_draw_down_rectangle_vertical_3D + js no_draw_down_rectangle_vertical_3D + + sub eax,1 + mov edi,eax + + mov eax,0xe4e4e4 + mov ebx,0xffffff + mov ecx,[x] + xor edx,edx + mov edx,[y] + add edx,[length2] + add edx,1 + sub ecx,1 + mov esi,17 + call rectangle_gradient_right + + no_draw_down_rectangle_vertical_3D: + + ret + +;eax - x +;ebx - y +;ecx - size y in pixels +DrawHorizontal3DScrollBar: + + mov [x],eax + mov [y],ebx + mov [length2],ecx + + mov eax,[x] + mov ebx,[y] + mov ecx,[length2] + mov edx,[pointer] + and edx,0xffffff + mov [Rectangle.x],eax + mov [Rectangle.y],ebx + mov [Rectangle.width],ecx + mov [Rectangle.height],16 + mov [Rectangle.color],edx + call RectangleContour + + ;draw gradient right + mov eax,[Scroller.color1] + mov ebx,dword 0xffffff + and eax,0xffffff + xor esi,esi + xor edi,edi + mov ecx,[x] + mov edx,[y] + add ecx,1 + mov edi,(16-1) + mov esi,[length2] + sub esi,2 + call rectangle_gradient_up + + ;------------------ + xor eax,eax + mov eax,[AveregeColor] + mov [Pixel.color],eax + + mov eax,[x] + mov ebx,[y] + mov [Pixel.x],eax + mov [Pixel.y],ebx + call DrawPixel + + mov ebx,[y] + add ebx,16 + mov [Pixel.y],ebx + call DrawPixel + + mov eax,[x] + mov ebx,[y] + add eax,[length2] + mov [Pixel.x],eax + mov [Pixel.y],ebx + call DrawPixel + + mov eax,[x] + mov ebx,[y] + add ebx,16 + add eax,[length2] + mov [Pixel.x],eax + mov [Pixel.y],ebx + call DrawPixel + + mov eax,[x] + mov ebx,[y] + add eax,1 + add ebx,1 + mov [Pixel.x],eax + mov [Pixel.y],ebx + call DrawPixel + + mov eax,[x] + mov ebx,[y] + add ebx,15 + add eax,1 + mov [Pixel.x],eax + mov [Pixel.y],ebx + call DrawPixel + + mov eax,[x] + mov ebx,[y] + add ebx,1 + add eax,[length2] + sub eax,1 + mov [Pixel.x],eax + mov [Pixel.y],ebx + call DrawPixel + + mov eax,[x] + mov ebx,[y] + add ebx,15 + add eax,[length2] + sub eax,1 + mov [Pixel.x],eax + mov [Pixel.y],ebx + call DrawPixel + + cmp [length2],12 + jl no_draw_reliev_horizontal_3D + + mov ebx,[y] + mov eax,[length2] + shr eax,1 + add eax,[x] + add ebx,5 + sub eax,3 + + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + mov [Line.color],0xffffff + add [Line.y2],6 + + mov esi,4 + next_light_line_draw_r_horizontal_3D: + + call DrawLine + add [Line.x1],2 + add [Line.x2],2 + + dec esi + jnz next_light_line_draw_r_horizontal_3D + + mov ebx,[y] + mov eax,[length2] + shr eax,1 + add eax,[x] + add ebx,6 + sub eax,2 + + mov ecx,[Scroller.color1] + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + mov [Line.color],ecx + add [Line.y2],6 + + mov esi,4 + next_dark_line_draw_r_horizontal_3D: + + call DrawLine + add [Line.x1],2 + add [Line.x2],2 + + dec esi + jnz next_dark_line_draw_r_horizontal_3D + + no_draw_reliev_horizontal_3D: + + + xor eax,eax + mov ax,[Scroller.x] + mov ebx,[x] + add eax,17 + + sub ebx,eax + jz no_draw_up_rectangle_horizontal_3D + js no_draw_up_rectangle_horizontal_3D + + sub ebx,1 + + mov esi,ebx + + mov eax,0xe4e4e4 + mov ebx,0xffffff + xor ecx,ecx + mov edx,[y] + mov cx,[Scroller.x] + add ecx,17 + sub edx,1 + mov edi,17 + call rectangle_gradient_up + no_draw_up_rectangle_horizontal_3D: + + xor eax,eax + mov ax,[Scroller.x] + add ax,[Scroller.length] + mov ebx,[x] + add ebx,[length2] + sub eax,17 + + sub eax,ebx + jz no_draw_down_rectangle_horizontal_3D + js no_draw_down_rectangle_horizontal_3D + + sub eax,1 + mov esi,eax + + mov eax,0xe4e4e4 + mov ebx,0xffffff + mov edx,[y] + xor ecx,ecx + mov ecx,[x] + add ecx,[length2] + add ecx,1 + sub edx,1 + mov edi,17 + call rectangle_gradient_up + + no_draw_down_rectangle_horizontal_3D: + + ret + +;eax - x +;ebx - y +;ecx - size y in pixels +DrawVertical2DScrollBar: + + mov [x],eax + mov [y],ebx + mov [length2],ecx + + mov eax,13 + mov edx,[Color] + mov ebx,[x] + mov ecx,[y] + shl ebx,16 + shl ecx,16 + add ebx,16 + add ecx,[length2] + and edx,0xffffff + mcall + + ;draw horizontal up light line + mov eax,[x] + mov ebx,[y] + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + add [Line.x2],15 + mov ecx,[colors_table1+15*3] + and ecx,0xffffff + mov [Line.color],ecx + call DrawLine + + ;draw vertical up light line + mov eax,[x] + mov ebx,[y] + mov ecx,[length2] + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + add [Line.y2],ecx + call DrawLine + + ;draw vertical up dark line + mov eax,[x] + mov ebx,[y] + add eax,15 + mov ecx,[length2] + sub ecx,1 + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + add [Line.y2],ecx + mov ecx,[colors_table2+8*3];[pointer] + and ecx,0xffffff + mov [Line.color],ecx + call DrawLine + + ;draw horizontal up dark line + mov eax,[x] + mov ebx,[y] + mov ecx,[length2] + add ebx,ecx + sub ebx,1 + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + add [Line.x2],15 + call DrawLine + + + xor eax,eax + mov ax,[Scroller.y] + mov ebx,[y] + add eax,16 + + sub ebx,eax + jz no_draw_up_rectangle_vertical_2D + js no_draw_up_rectangle_vertical_2D + + mov edi,ebx + + xor ecx,ecx + mov eax,13 + mov edx,0xe4e4e4 + mov ebx,[x] + mov cx,[Scroller.y] + add ecx,16 + shl ebx,16 + shl ecx,16 + add ebx,16 + add ecx,edi + mcall + + no_draw_up_rectangle_vertical_2D: + + xor eax,eax + mov ax,[Scroller.y] + add ax,[Scroller.length] + mov ebx,[y] + add ebx,[length2] + sub eax,16 + + sub eax,ebx + jz no_draw_down_rectangle_vertical_2D + js no_draw_down_rectangle_vertical_2D + + ;sub eax,1 + mov edi,eax + + xor ecx,ecx + mov eax,13 + mov edx,0xe4e4e4 + mov ebx,[x] + mov ecx,[y] + add ecx,[length2] + shl ebx,16 + shl ecx,16 + add ebx,16 + add ecx,edi + mcall + + no_draw_down_rectangle_vertical_2D: + + ret + +;eax - x +;ebx - y +;ecx - size x in pixels +DrawHorizontal2DScrollBar: + + mov [x],eax + mov [y],ebx + mov [length2],ecx + + mov eax,13 + mov edx,[Color] + mov ebx,[x] + mov ecx,[y] + shl ebx,16 + shl ecx,16 + add ebx,[length2] + add ecx,16 + and edx,0xffffff + mcall + + ;draw horizontal up light line + mov eax,[x] + mov ebx,[y] + mov ecx,[length2] + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + sub ecx,1 + add [Line.x2],ecx + mov ecx,[colors_table1+15*3] + and ecx,0xffffff + mov [Line.color],ecx + call DrawLine + + ;draw vertical up light line + mov eax,[x] + mov ebx,[y] + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + add [Line.y2],15 + call DrawLine + + ;draw vertical up dark line + mov eax,[x] + mov ebx,[y] + mov ecx,[length2] + sub ecx,1 + add eax,ecx + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + add [Line.y2],15 + mov ecx,[colors_table2+8*3];[pointer] + and ecx,0xffffff + mov [Line.color],ecx + call DrawLine + + ;draw horizontal up dark line + mov eax,[x] + mov ebx,[y] + mov ecx,[length2] + sub ecx,1 + add ebx,15 + mov [Line.x1],eax + mov [Line.x2],eax + mov [Line.y1],ebx + mov [Line.y2],ebx + add [Line.x2],ecx + call DrawLine + + + xor eax,eax + mov ax,[Scroller.x] + mov ebx,[x] + add eax,16 + + sub ebx,eax + jz no_draw_up_rectangle_horizontal_2D + js no_draw_up_rectangle_horizontal_2D + + mov edi,ebx + + xor ecx,ecx + xor ebx,ebx + mov eax,13 + mov edx,0xe4e4e4 + mov bx,[Scroller.x] + mov cx,[Scroller.y] + add ebx,16 + shl ebx,16 + shl ecx,16 + add ecx,16 + add ebx,edi + mcall + + no_draw_up_rectangle_horizontal_2D: + + xor eax,eax + mov ax,[Scroller.x] + add ax,[Scroller.length] + mov ebx,[x] + add ebx,[length2] + sub eax,16 + + sub eax,ebx + jz no_draw_down_rectangle_horizontal_2D + js no_draw_down_rectangle_horizontal_2D + + ;sub eax,1 + mov edi,eax + + xor ecx,ecx + mov eax,13 + mov edx,0xe4e4e4 + mov ebx,[x] + mov ecx,[y] + add ebx,[length2] + shl ebx,16 + shl ecx,16 + add ebx,edi + add ecx,16 + mcall + + no_draw_down_rectangle_horizontal_2D: + + ret diff --git a/programs/develop/libGUI/src/string.inc b/programs/develop/libGUI/src/string.inc new file mode 100644 index 0000000000..1f0b8d2ef9 --- /dev/null +++ b/programs/develop/libGUI/src/string.inc @@ -0,0 +1,19 @@ +;ebx - pointer to string +GetLengthString: + + xor ecx,ecx + + next_simvol: + inc ecx + xor eax,eax + mov al,[ebx] + test al,al + jz null + inc ebx + jmp next_simvol + + null: + mov eax,ecx + dec eax + + ret \ No newline at end of file diff --git a/programs/develop/libGUI/src/struct.inc b/programs/develop/libGUI/src/struct.inc new file mode 100644 index 0000000000..947a84e89a --- /dev/null +++ b/programs/develop/libGUI/src/struct.inc @@ -0,0 +1,180 @@ + +; Macroinstructions for defining data structures + +macro struct name + { fields@struct equ name + match child parent, name \{ fields@struct equ child,fields@\#parent \} + sub@struct equ + struc db [val] \{ \common fields@struct equ fields@struct,.,db, \} + struc dw [val] \{ \common fields@struct equ fields@struct,.,dw, \} + struc du [val] \{ \common fields@struct equ fields@struct,.,du, \} + struc dd [val] \{ \common fields@struct equ fields@struct,.,dd, \} + struc dp [val] \{ \common fields@struct equ fields@struct,.,dp, \} + struc dq [val] \{ \common fields@struct equ fields@struct,.,dq, \} + struc dt [val] \{ \common fields@struct equ fields@struct,.,dt, \} + struc rb count \{ fields@struct equ fields@struct,.,db,count dup (?) \} + struc rw count \{ fields@struct equ fields@struct,.,dw,count dup (?) \} + struc rd count \{ fields@struct equ fields@struct,.,dd,count dup (?) \} + struc rp count \{ fields@struct equ fields@struct,.,dp,count dup (?) \} + struc rq count \{ fields@struct equ fields@struct,.,dq,count dup (?) \} + struc rt count \{ fields@struct equ fields@struct,.,dt,count dup (?) \} + macro db [val] \{ \common \local anonymous + fields@struct equ fields@struct,anonymous,db, \} + macro dw [val] \{ \common \local anonymous + fields@struct equ fields@struct,anonymous,dw, \} + macro du [val] \{ \common \local anonymous + fields@struct equ fields@struct,anonymous,du, \} + macro dd [val] \{ \common \local anonymous + fields@struct equ fields@struct,anonymous,dd, \} + macro dp [val] \{ \common \local anonymous + fields@struct equ fields@struct,anonymous,dp, \} + macro dq [val] \{ \common \local anonymous + fields@struct equ fields@struct,anonymous,dq, \} + macro dt [val] \{ \common \local anonymous + fields@struct equ fields@struct,anonymous,dt, \} + macro rb count \{ \local anonymous + fields@struct equ fields@struct,anonymous,db,count dup (?) \} + macro rw count \{ \local anonymous + fields@struct equ fields@struct,anonymous,dw,count dup (?) \} + macro rd count \{ \local anonymous + fields@struct equ fields@struct,anonymous,dd,count dup (?) \} + macro rp count \{ \local anonymous + fields@struct equ fields@struct,anonymous,dp,count dup (?) \} + macro rq count \{ \local anonymous + fields@struct equ fields@struct,anonymous,dq,count dup (?) \} + macro rt count \{ \local anonymous + fields@struct equ fields@struct,anonymous,dt,count dup (?) \} + macro union \{ fields@struct equ fields@struct,,union,< + sub@struct equ union \} + macro struct \{ fields@struct equ fields@struct,,substruct,< + sub@struct equ substruct \} + virtual at 0 } + +macro ends + { match , sub@struct \{ restruc db,dw,du,dd,dp,dq,dt + restruc rb,rw,rd,rp,rq,rt + purge db,dw,du,dd,dp,dq,dt + purge rb,rw,rd,rp,rq,rt + purge union,struct + match name=,fields,fields@struct \\{ fields@struct equ + make@struct name,fields + fields@\\#name equ fields \\} + end virtual \} + match any, sub@struct \{ fields@struct equ fields@struct> \} + restore sub@struct } + +macro make@struct name,[field,type,def] + { common + if $ + display 'Error: definition of ',`name,' contains illegal instructions.',0Dh,0Ah + err + end if + local define + define equ name + forward + local sub + match , field \{ make@substruct type,name,sub def + define equ define,.,sub, \} + match any, field \{ define equ define,.#field,type, \} + common + match fields, define \{ define@struct fields \} } + +macro define@struct name,[field,type,def] + { common + local list + list equ + forward + if ~ field eq . + name#field type def + sizeof.#name#field = $ - name#field + else + rb sizeof.#type + end if + local value + match any, list \{ list equ list, \} + list equ list + common + sizeof.#name = $ + restruc name + match values, list \{ + struc name value \\{ + match any, fields@struct \\\{ fields@struct equ fields@struct,.,name, \\\} + match , fields@struct \\\{ label . + forward + match , value \\\\{ field type def \\\\} + match any, value \\\\{ field type value + if ~ field eq . + rb sizeof.#name#field - ($-field) + end if \\\\} + common \\\} \\} \} } + +macro enable@substruct + { macro make@substruct substruct,parent,name,[field,type,def] + \{ \common + \local define + define equ parent,name + \forward + \local sub + match , field \\{ match any, type \\\{ enable@substruct + make@substruct type,name,sub def + purge make@substruct + define equ define,.,sub, \\\} \\} + match any, field \\{ define equ define,.\#field,type, \\} + \common + match fields, define \\{ define@\#substruct fields \\} \} } + +enable@substruct + +macro define@union parent,name,[field,type,def] + { common + virtual at 0 + forward + if ~ field eq . + virtual at 0 + parent#field type def + sizeof.#parent#field = $ - parent#field + end virtual + if sizeof.#parent#field > $ + rb sizeof.#parent#field - $ + end if + else if sizeof.#type > $ + rb sizeof.#type - $ + end if + common + sizeof.#name = $ + end virtual + struc name [value] \{ \common + label .\#name + last@union equ + forward + match any, last@union \\{ virtual at .\#name + field type def + end virtual \\} + match , last@union \\{ match , value \\\{ field type def \\\} + match any, value \\\{ field type value \\\} \\} + last@union equ field + common rb sizeof.#name - ($ - .\#name) \} } + +macro define@substruct parent,name,[field,type,def] + { common + virtual at 0 + forward + if ~ field eq . + parent#field type def + sizeof.#parent#field = $ - parent#field + else + rb sizeof.#type + end if + local value + common + sizeof.#name = $ + end virtual + struc name value \{ + label .\#name + forward + match , value \\{ field type def \\} + match any, value \\{ field type value + if ~ field eq . + rb sizeof.#parent#field - ($-field) + end if \\} + common \} } diff --git a/programs/develop/libGUI/src/text.inc b/programs/develop/libGUI/src/text.inc new file mode 100644 index 0000000000..a0dd2dcf5f --- /dev/null +++ b/programs/develop/libGUI/src/text.inc @@ -0,0 +1,150 @@ + +tx_control_data_size = 22 +tx_no_show_text = 1b +tx_redraw_all = 10000000b +tx_redraw_all_off = 01111111b +tx_special_redraw_on = 100b +tx_special_redraw_off = 11111011b + +;**************************************************** +;********************craete Text********************** +;**************************************************** +;IN +;pointer to parend +;pointer to Text's structure +;OUT +;pointer to initialized Texr's structure +align 4 + +craete_text: + + mov ebx,[esp+4] + mov eax,[esp+8] + + mov [PointerToStructureForText],eax + + mov eax,control_header_size+tx_control_data_size + call craete_control + + ;set all image's parameters in control + mov [eax],dword text + + mov ecx,tx_control_data_size + mov esi,[PointerToStructureForText] + mov edi,eax + add edi,control_header_size + rep movsb + + call get_skin_height + + mov ebx,[PointerToStructureForText] + mov ecx,[ebx+6] ;x + mov edx,[ebx+10] ;y + mov esi,[ebx+14] ;length x + imul esi,6 + add ecx,border_width + add edx,[skin_height] + ;copy information to control + mov [eax+24],ecx + mov [eax+28],edx + mov [eax+32],esi + mov [eax+36],dword 9 + + ret 8 + +;**************************************************** +;********************Draw Text********************** +;**************************************************** +;IN +;pointer to control of text +;message +;OUT +;not returned value +align 4 + +text: + + ;get message + mov eax,[esp+8] + + ;get pointer to control of image + mov esi,[esp+4] + mov [PointerForText],esi + ;copy control to local control + add esi,control_header_size + mov edi,dword Text + mov ecx,tx_control_data_size + rep movsb + + + cmp [eax],dword 1 + jne no_redraw_all_text + + xor ebx,ebx + mov bl,[Text.type] + and bl,tx_no_show_text + test bl,bl + jnz no_redraw_all_text + + or [Text.type],tx_redraw_all + + no_redraw_all_text: + + cmp [eax],dword 3 + jne no_special_message_for_text + + xor ebx,ebx + mov bl,[Text.type] + and bl,tx_special_redraw_on + test bl,bl + jz no_special_message_for_text + + or [Text.type],tx_redraw_all + and [Text.type],tx_special_redraw_off + + no_special_message_for_text: + + ;load coordinats and size from control + mov eax,[PointerForText] + mov ebx,[eax+24] ;x + mov ecx,[eax+28] ;y + ;set current coordinats and sizes in zakladka + mov [Text.x],ebx + mov [Text.y],ecx + + ;get standart colors table + mov eax,48 + mov ebx,3 + mov ecx,dword pointer2 + mov edx,40 + mcall + + xor eax,eax + mov al,[Text.type] + and al,tx_redraw_all + test al,al + jz no_redraw_text_ + + and [Text.type],tx_redraw_all_off + + mov esi,dword Text + mov edi,[PointerForText] + add edi,control_header_size + mov ecx,2 + rep movsb + + mov eax,4 + mov ebx,[Text.x] + shl ebx,16 + add ebx,[Text.y] + mov ecx,[Text.color] + mov edx,[Text.pointer] + mov esi,[Text.length] + mov edi,[pointer2+8] + mcall + + no_redraw_text_: + + exit_text: + + ret 8