From 20b79b5a5ab52c4ba1e2cd9ccf9f961392c82b12 Mon Sep 17 00:00:00 2001 From: "Kirill Lipatov (Leency)" Date: Mon, 16 Mar 2015 14:23:55 +0000 Subject: [PATCH] fix Liza, upload some experimental programs git-svn-id: svn://kolibrios.org@5520 a494cfbc-eb01-0410-851d-a64ba20cac60 --- .../cmm/experimental/easyshot/compile_en.bat | 9 ++ .../cmm/experimental/easyshot/compile_ru.bat | 9 ++ programs/cmm/experimental/easyshot/easyshot.c | 130 ++++++++++++++++++ .../experimental/ttf_performance/compile.bat | 10 ++ .../ttf_performance/ttf_performance.c | 89 ++++++++++++ programs/cmm/lib/obj/box_lib.h | 2 +- programs/cmm/lib/obj/truetype.h | 11 +- programs/cmm/liza/liza.c | 2 +- 8 files changed, 254 insertions(+), 8 deletions(-) create mode 100644 programs/cmm/experimental/easyshot/compile_en.bat create mode 100644 programs/cmm/experimental/easyshot/compile_ru.bat create mode 100644 programs/cmm/experimental/easyshot/easyshot.c create mode 100644 programs/cmm/experimental/ttf_performance/compile.bat create mode 100644 programs/cmm/experimental/ttf_performance/ttf_performance.c diff --git a/programs/cmm/experimental/easyshot/compile_en.bat b/programs/cmm/experimental/easyshot/compile_en.bat new file mode 100644 index 0000000000..6a312bdf08 --- /dev/null +++ b/programs/cmm/experimental/easyshot/compile_en.bat @@ -0,0 +1,9 @@ +@del lang.h-- +@echo #define LANG_ENG 1 >lang.h-- + +C-- easyshot.c +@del easyshot +@rename easyshot.com easyshot +@del warning.txt +@del lang.h-- +@pause diff --git a/programs/cmm/experimental/easyshot/compile_ru.bat b/programs/cmm/experimental/easyshot/compile_ru.bat new file mode 100644 index 0000000000..90e7a3d586 --- /dev/null +++ b/programs/cmm/experimental/easyshot/compile_ru.bat @@ -0,0 +1,9 @@ +@del lang.h-- +@echo #define LANG_RUS 1 >lang.h-- + +C-- easyshot.c +@del easyshot +@rename easyshot.com easyshot +@del warning.txt +@del lang.h-- +@pause diff --git a/programs/cmm/experimental/easyshot/easyshot.c b/programs/cmm/experimental/easyshot/easyshot.c new file mode 100644 index 0000000000..21cec73279 --- /dev/null +++ b/programs/cmm/experimental/easyshot/easyshot.c @@ -0,0 +1,130 @@ +#define MEMSIZE 0xFFFFF +#include "..\lib\kolibri.h" +#include "..\lib\strings.h" +#include "..\lib\mem.h" +#include "..\lib\gui.h" + +#ifndef AUTOBUILD + #include "lang.h--" +#endif + +/* === DATA === */ + +system_colors sc; +proc_info Form; + + +dword b_screen, + s_screen; + +int b_screen_width, + b_screen_height, + b_screen_length, + s_screen_width, + s_screen_height, + s_screen_length; + + +/* === CODE === */ + + +void main() +{ + char id; + mem_Init(); + b_screen_width = GetScreenWidth()+1; + b_screen_height = GetScreenHeight()+1; + b_screen_length = b_screen_width*b_screen_height*3; + s_screen_width = b_screen_width / 2; + s_screen_height = b_screen_height / 2; + s_screen_length = b_screen_length / 2; + + b_screen = malloc(b_screen_length); + s_screen = malloc(b_screen_length/2); + + loop() + { + switch(WaitEvent()) + { + case evButton: + id = GetButtonID(); + if (id==1) ExitProcess(); + if (id==10) TakeScreenshot(); + break; + + case evReDraw: + sc.get(); + DefineAndDrawWindow(b_screen_width/4, b_screen_height/4, s_screen_width + 9, s_screen_height + GetSkinHeight() + 45,0x74, 0, "EasyShot v0.2",0); + GetProcessInfo(#Form, SelfInfo); + if (Form.status_window>2) break; + DrawBar(0, 0, Form.cwidth, 41, sc.work); + DrawCaptButton(10, 10, 140, 20, 10, sc.work_button, sc.work_button_text, "Make screenshot"); + _PutImage(0, Form.cheight - s_screen_height, s_screen_width, s_screen_height, s_screen); + if (ESDWORD[s_screen]==0) + WriteTextB(Form.cwidth/2 - 60, Form.cheight/2+10, 0x90, 0xFFFfff, "There will be preview"); + else + DrawCaptButton(160, 10, 80, 20, 11, sc.work_button, sc.work_button_text, "Save"); + } + } +} + +void TakeScreenshot() { + MinimizeWindow(); + pause(20); + CopyScreen(b_screen, 0, 0, b_screen_width, b_screen_height); + ZoomImageTo50percent(); + ActivateWindow(GetProcessSlot(Form.ID)); + //_PutImage(0, Form.cheight - s_screen_height, s_screen_width, s_screen_height, s_screen); +} + +void ZoomImageTo50percent() { + dword point_x, + line_h= b_screen_width * 3, + s_off = s_screen + 3, + b_off = b_screen + 6, + b_off_r, + b_off_g, + b_off_b, + rez_r, + rez_g, + rez_b; + + while( (s_off < s_screen + s_screen_length) && (b_off < b_screen + b_screen_length ) ) { + + if (b_off < b_screen + line_h) || (b_off > b_screen + b_screen_length - line_h) + { + ESBYTE[s_off] = ESBYTE[b_off]; + ESBYTE[s_off+1] = ESBYTE[b_off+1]; + ESBYTE[s_off+2] = ESBYTE[b_off+2]; + } + else + { + // line[x].R = (line[x+1].R + line[x].R + line[x-1].R + line1[x].R + line2[x].R) / 5; + // line[x].G = (line[x+1].G + line[x].G + line[x-1].G + line1[x].G + line2[x].G) / 5; + // line[x].B = (line[x+1].B + line[x].B + line[x-1].B + line1[x].B + line2[x].B) / 5 + b_off_r = b_off; + b_off_g = b_off + 1; + b_off_b = b_off + 2; + rez_r = ESBYTE[b_off_r+3] + ESBYTE[b_off_r] + ESBYTE[b_off_r-3] + ESBYTE[b_off_r-line_h] + ESBYTE[b_off_r+line_h] / 5; + rez_g = ESBYTE[b_off_g+3] + ESBYTE[b_off_g] + ESBYTE[b_off_g-3] + ESBYTE[b_off_g-line_h] + ESBYTE[b_off_g+line_h] / 5; + rez_b = ESBYTE[b_off_b+3] + ESBYTE[b_off_b] + ESBYTE[b_off_b-3] + ESBYTE[b_off_b-line_h] + ESBYTE[b_off_b+line_h] / 5; + ESBYTE[s_off] = rez_r; + ESBYTE[s_off+1] = rez_g; + ESBYTE[s_off+2] = rez_b; + + } + + s_off+=3; + b_off+=6; + + point_x+=2; + if (point_x >= b_screen_width) + { + b_off += line_h; + point_x = 0; + } + } +} + + +stop: diff --git a/programs/cmm/experimental/ttf_performance/compile.bat b/programs/cmm/experimental/ttf_performance/compile.bat new file mode 100644 index 0000000000..7d33833abd --- /dev/null +++ b/programs/cmm/experimental/ttf_performance/compile.bat @@ -0,0 +1,10 @@ +C-- ttf_performance.c +@del ttf_performance +@rename ttf_performance.com ttf_performance +kpack ttf_performance +@del warning.txt +@pause +@rem ====== Automatically add binnary to kolibri.img and then run QEMU ===== +"C:\Program Files (x86)\WinImage\WINIMAGE.exe" D:\Kolibri\work\QEMU\kolibri.img /I /H/Q C:\Users\lee\Desktop\CMM\ttf_performance\ttf_performance +@cd /d D:\Kolibri\work\QEMU +D:\Kolibri\work\QEMU\qemu-kos-img.bat \ No newline at end of file diff --git a/programs/cmm/experimental/ttf_performance/ttf_performance.c b/programs/cmm/experimental/ttf_performance/ttf_performance.c new file mode 100644 index 0000000000..3fb6d02e0b --- /dev/null +++ b/programs/cmm/experimental/ttf_performance/ttf_performance.c @@ -0,0 +1,89 @@ +#define MEMSIZE 397113 +#include "..\lib\kolibri.h" +#include "..\lib\strings.h" +#include "..\lib\mem.h" +#include "..\lib\file_system.h" +#include "..\lib\dll.h" +#include "..\lib\obj\truetype.h" + +proc_info Form; +dword font_data; +stbtt_fontinfo font_info; + + +inline fastcall dword get_start_time() +{ + $mov eax,26 + $mov ebx,9 + $int 0x40 +} + +#define TESTS_NUM 10 +char test_text[] = "The quick brown fox jumps over the lazy dog"; +word rez[TESTS_NUM]; + +void main() +{ + BDVK FontFile_atr; + int id, key; + + mem_Init(); + if (load_dll2(libtruetype, #truetype, 1) != 0) notify("Error: library doesn't exists - truetype"); + + if (param[0]==0) strcpy(#param, "/sys/arial.ttf"); + GetFileInfo(#param, #FontFile_atr); + font_data = malloc(FontFile_atr.sizelo); + ReadFile(0, FontFile_atr.sizelo, #font_data, #param); + + init_font stdcall (#font_info, #font_data); + if (EAX==0) notify("init_font failed"); + + loop() + { + switch(WaitEvent()) + { + case evButton: + id=GetButtonID(); + if (id==1) ExitProcess(); + break; + + case evKey: + key = GetKey(); + IF (key==013){ //Enter + debug("Tests count: "); + debugi(TESTS_NUM); + for (id=0; id