From 41fcb88df4ecd9359ac12bd0678740b41ff030ad Mon Sep 17 00:00:00 2001 From: "Kirill Lipatov (Leency)" Date: Mon, 4 Feb 2013 13:15:13 +0000 Subject: [PATCH] c--: add example, libs updated git-svn-id: svn://kolibrios.org@3225 a494cfbc-eb01-0410-851d-a64ba20cac60 --- programs/cmm/dict/dicty.c | 20 +++++++------- programs/cmm/example/compile.bat | 6 +++++ programs/cmm/example/example.c | 41 +++++++++++++++++++++++++++++ programs/cmm/lib/figures.h | 41 +++++++++++++++++------------ programs/cmm/lib/kolibri.h | 2 +- programs/cmm/lib/list_box.h | 45 ++++++++++++++++++++++++++++++++ programs/cmm/lib/strings.h | 6 ++--- 7 files changed, 130 insertions(+), 31 deletions(-) create mode 100644 programs/cmm/example/compile.bat create mode 100644 programs/cmm/example/example.c create mode 100644 programs/cmm/lib/list_box.h diff --git a/programs/cmm/dict/dicty.c b/programs/cmm/dict/dicty.c index 8a2ec45122..541d47cf9b 100644 --- a/programs/cmm/dict/dicty.c +++ b/programs/cmm/dict/dicty.c @@ -120,14 +120,14 @@ void Draw_Window() edit1.width=Form.width-edit1.left-edit1.left-9; edit_box_draw stdcall(#edit1); //рисуем строку адреса DefineButton(edit1.left+edit1.width-80,35, 80,20, 10, sc.work_button); - WriteText(edit1.left+edit1.width-80+14,35+7,0x80,sc.work_button_text,#translate_caption, 0); + WriteText(edit1.left+edit1.width-80+14,35+7,0x80,sc.work_button_text,#translate_caption); DrawBar(0, 69, Form.width-9, 1, sc.work_graph); - WriteText(edit1.left,35+7,0x80,sc.work_text,#direction, 0); + WriteText(edit1.left,35+7,0x80,sc.work_text,#direction); DefineButton(edit1.left+130,35, 120,20, 11, sc.work_button); - WriteText(edit1.left+130+112,35+7,0x80,sc.work_button_text,"\x19", 0); + WriteText(edit1.left+130+112,35+7,0x80,sc.work_button_text,"\x19"); DrawBar(edit1.left+130+1,36, 107,19, 0xFFFFFF); - WriteText(edit1.left+130+8,35+7,0x80,0x000000,#cur_dict, 0); + WriteText(edit1.left+130+8,35+7,0x80,0x000000,#cur_dict); DrawTranslation(); @@ -169,14 +169,14 @@ void ShowDictList() ReadDir(fcount, files_buf, #program_path); fcount-=2; - mem_Move(files_buf,files_buf+608,fcount*304); + memmov(files_buf,files_buf+608,fcount*304); DefineButton(0,0, Form.width,Form.height, 12+BT_HIDE+BT_NOFRAME, sc.work_button); for (j=0; jstrlen(#draw_buf)) { - WriteText(10, y_pos+21, 0x80, 0, #draw_buf, 0); + WriteText(10, y_pos+21, 0x80, 0, #draw_buf); return; } while (draw_buf[text_break]<>' ') && (text_break>0) text_break--; strcpy(#tt, #draw_buf+text_break+1); draw_buf[text_break]=0x0; - WriteText(10, y_pos+21, 0x80, 0, #draw_buf, 0); + WriteText(10, y_pos+21, 0x80, 0, #draw_buf); strcpy(#draw_buf, #tt); y_pos+=12; if (y_pos+24+skin_height+12>Form.height) return; //чтоб не залезало на нижний ободок diff --git a/programs/cmm/example/compile.bat b/programs/cmm/example/compile.bat new file mode 100644 index 0000000000..b5d2b2ae15 --- /dev/null +++ b/programs/cmm/example/compile.bat @@ -0,0 +1,6 @@ +..\C--\C-- example.c +del example +rename example.com example +..\C--\kpack example +pause +del warning.txt diff --git a/programs/cmm/example/example.c b/programs/cmm/example/example.c new file mode 100644 index 0000000000..81d4bed079 --- /dev/null +++ b/programs/cmm/example/example.c @@ -0,0 +1,41 @@ +#include "..\lib\kolibri.h" +#include "..\lib\file_system.h" + + +void main() +{ + int id, key; + + loop() + { + switch(WaitEvent()) + { + case evButton: + id=GetButtonID(); + if (id==1) ExitProcess(); + break; + + case evKey: + key = GetKey(); + IF (key==013){ //Enter + WriteText(50,90,0x80,0xFF00FF,"Pressed Enter"); + } + break; + + case evReDraw: + draw_window(); + break; + } + } +} + + +void draw_window() +{ + DefineAndDrawWindow(215,100,250,200,0x34,0xFFFFFF,"Window header"); + WriteText(50,80,0x80,0,"Press Enter"); + +} + + +stop: diff --git a/programs/cmm/lib/figures.h b/programs/cmm/lib/figures.h index f52538e27b..08a01b3bb1 100644 --- a/programs/cmm/lib/figures.h +++ b/programs/cmm/lib/figures.h @@ -1,25 +1,27 @@ //#include "strings.h" -void DrawRectangle(dword x,y,width,height,color1) +void DrawRectangle(dword x,y,w,h,color1) { - DrawBar(x,y,width,1,color1); - DrawBar(x,y+height,width,1,color1); - DrawBar(x,y,1,height,color1); - DrawBar(x+width,y,1,height+1,color1); + if (w<=0) || (h<=0) return; + DrawBar(x,y,w,1,color1); + DrawBar(x,y+h,w,1,color1); + DrawBar(x,y,1,h,color1); + DrawBar(x+w,y,1,h+1,color1); } -void DrawRectangle3D(dword x,y,width,height,color1,color2) +void DrawRectangle3D(dword x,y,w,h,color1,color2) { - DrawBar(x,y,width+1,1,color1); - DrawBar(x,y+1,1,height-1,color1); - DrawBar(x+width,y+1,1,height,color2); - DrawBar(x,y+height,width,1,color2); + if (w<=0) || (h<=0) return; + DrawBar(x,y,w+1,1,color1); + DrawBar(x,y+1,1,h-1,color1); + DrawBar(x+w,y+1,1,h,color2); + DrawBar(x,y+h,w,1,color2); } -void DrawCaptButton(dword x,y,width,height,id,color_b, color_t,text) +void DrawCaptButton(dword x,y,w,h,id,color_b, color_t,text) { - DefineButton(x,y,width,height,id,color_b); - WriteText(-strlen(text)*6+width/2+x+1,height/2-3+y,0x80,color_t,text); + DefineButton(x,y,w,h,id,color_b); + WriteText(-strlen(text)*6+w/2+x+1,h/2-3+y,0x80,color_t,text); } void DrawCircle(int x, y, r) @@ -60,15 +62,20 @@ void CheckBox(dword x,y,w,h, bt_id, text, graph_color, text_color, is_checked) void DrawProgressBar(dword st_x, st_y, st_w, st_h, col_fon, col_border, col_fill, col_text, progress_percent, status_text) { - int progress_w = progress_percent * st_w / 100 - 3; + int progress_w; static int fill_old; - if (!progress_percent) {DrawBar(st_x,st_y, st_x + st_y + fill_old + 15,st_h+1, col_fon); return;} + if (progress_percent<=0) {DrawBar(st_x,st_y, st_x + st_w + fill_old + 15,st_h+1, col_fon); fill_old=0; return;} DrawRectangle(st_x, st_y, st_w,st_h, col_border); DrawRectangle3D(st_x+1, st_y+1, st_w-2,st_h-2, 0xFFFfff, 0xFFFfff); - if (progress_percent) DrawBar(st_x+2, st_y+2, progress_w, st_h-3, col_fill); - if (progress_percent<100) DrawBar(st_x+2+progress_w, st_y+2, st_w-progress_w-3, st_h-3, 0xFFFfff); + + if (progress_percent>0) && (progress_percent<=100) + { + progress_w = st_w - 3 * progress_percent / 100; + DrawBar(st_x+2, st_y+2, progress_w, st_h-3, col_fill); + DrawBar(st_x+2+progress_w, st_y+2, st_w-progress_w-3, st_h-3, 0xFFFfff); + } if (status_text) { diff --git a/programs/cmm/lib/kolibri.h b/programs/cmm/lib/kolibri.h index bbafd797ae..6a5003889a 100644 --- a/programs/cmm/lib/kolibri.h +++ b/programs/cmm/lib/kolibri.h @@ -465,7 +465,7 @@ inline fastcall void PutPixel( EBX,ECX,EDX) void DrawBar(dword x,y,w,h,EDX) { - if (h<=0) || (h>65000) return; //bad boy :) + if (h<=0) || (h>60000) || (w<=0) || (w>60000) return; //bad boy :) EAX = 13; EBX = x<<16+w; ECX = y<<16+h; diff --git a/programs/cmm/lib/list_box.h b/programs/cmm/lib/list_box.h new file mode 100644 index 0000000000..f232266070 --- /dev/null +++ b/programs/cmm/lib/list_box.h @@ -0,0 +1,45 @@ +//list_box + +struct llist +{ + int x, y, w, h, min_h; + int line_h; + int count, visible, first, current; + void ClearList(); + void SetSizes(int xx, yy, ww, hh, min_hh, line_hh); + int MouseScroll(dword scroll_state); +}; + + +void llist::ClearList() +{ + count = visible = first = current = 0; +} + + +void llist::SetSizes(int xx, yy, ww, hh, min_hh, line_hh) +{ + x = xx; + y = yy; + w = ww; + h = hh; + min_h = min_hh; + line_h = line_hh; +} + + +int llist::MouseScroll(dword scroll_state) +{ + if (scroll_state == 65535) + { + if (first == 0) return 0; + if (first > 3) first -= 2; else first=0; + return 1; + } + if (scroll_state == 1) + { + if (visible+first+3 >= count) first = count - visible; else first+=2; + return 1; + } + return 0; +} \ No newline at end of file diff --git a/programs/cmm/lib/strings.h b/programs/cmm/lib/strings.h index 07939d34f6..6a7fca8555 100644 --- a/programs/cmm/lib/strings.h +++ b/programs/cmm/lib/strings.h @@ -210,11 +210,11 @@ dword strstri(dword searchin, usestr_s) } -void strcpyb(dword searchin, copyin, startstr, endstr) +void strcpyb(dword search_in, copyin, startstr, endstr) { dword startp, endp; - startp = strstr(searchin, startstr) + strlen(startstr); - endp = strstr(startp, endstr); + startp = strstr(search_in, startstr) + strlen(startstr); + endp = strstri(startp, endstr); if (startp==endp) return; do {