From 0dab2e078d49037c514719d729abbfd4968f9026 Mon Sep 17 00:00:00 2001 From: Serhii Sakhno Date: Fri, 24 Jul 2015 18:15:43 +0000 Subject: [PATCH] Calypte: new program for read text book git-svn-id: svn://kolibrios.org@5612 a494cfbc-eb01-0410-851d-a64ba20cac60 --- programs/cmm/Calypte/Calypte.c | 389 ++++++++++++++++++++++ programs/cmm/Calypte/Tupfile.lua | 6 + programs/cmm/Calypte/compile_en.bat | 11 + programs/cmm/Calypte/compile_ru.bat | 11 + programs/cmm/Calypte/include/gui.h | 23 ++ programs/cmm/Calypte/include/properties.h | 92 +++++ 6 files changed, 532 insertions(+) create mode 100644 programs/cmm/Calypte/Calypte.c create mode 100644 programs/cmm/Calypte/Tupfile.lua create mode 100644 programs/cmm/Calypte/compile_en.bat create mode 100644 programs/cmm/Calypte/compile_ru.bat create mode 100644 programs/cmm/Calypte/include/gui.h create mode 100644 programs/cmm/Calypte/include/properties.h diff --git a/programs/cmm/Calypte/Calypte.c b/programs/cmm/Calypte/Calypte.c new file mode 100644 index 0000000000..a16ca6cc46 --- /dev/null +++ b/programs/cmm/Calypte/Calypte.c @@ -0,0 +1,389 @@ +#define MEMSIZE 0x100000 +#include "..\lib\kolibri.h" +#include "..\lib\strings.h" +#include "..\lib\mem.h" +#include "..\lib\file_system.h" +#include "..\lib\dll.h" +#include "..\lib\gui.h" +#include "..\lib\obj\box_lib.h" +#include "..\lib\obj\proc_lib.h" +#include "..\lib\obj\libio_lib.h" + +#include "lang.h--" + +#ifdef LANG_RUS + ?define T_FILE "Файл" + ?define T_TYPE "Тип" + ?define T_SIZE "Размер" + ?define MENU1 "Файл" + ?define MENU1_SUBMENU1 "Открыть" + ?define MENU1_SUBMENU2 "Закрыть" + ?define MENU1_SUBMENU3 "Свойства" + ?define MENU1_SUBMENU4 "Выход" + ?define ERROR_LOAD_BOX_LIB "Ошибка при загрузке библиотеки - box_lib.obj" + ?define ERROR_LOAD_LIBIO "Ошибка при загрузке библиотеки - libio.obj" + ?define ERROR_LOAD_PROC_LIB "Ошибка при загрузке библиотеки - proc_lib.obj" +#else + ?define T_FILE "File" + ?define T_TYPE "Type" + ?define T_SIZE "Size" + ?define MENU1 "File" + ?define MENU1_SUBMENU1 "Open" + ?define MENU1_SUBMENU2 "Close" + ?define MENU1_SUBMENU3 "Properties" + ?define MENU1_SUBMENU4 "Exit" + ?define ERROR_LOAD_BOX_LIB "Error while loading library - box_lib.obj" + ?define ERROR_LOAD_LIBIO "Error while loading library - libio.obj" + ?define ERROR_LOAD_PROC_LIB "Error while loading library - proc_lib.obj" +#endif + +#ifdef LANG_RUS +struct menu_text_struct +{ + char menu[5]; + char sub_menu1[8]; + char sub_menu2[8]; + //char sub_menu3[9]; + char sub_menu4[6]; + byte end; +}; +#else +struct menu_text_struct +{ + char menu[5]; + char sub_menu1[5]; + char sub_menu2[6]; + //char sub_menu3[11]; + char sub_menu4[5]; + byte end; +}; +#endif + +#define TITLE "Calypte v0.1" + +#define TOPPANELH 19 +#define BOTPANELH 10 +#define WIN_W 600 +#define WIN_H 400 + +proc_info Form; +system_colors sc; + +byte active_properties = 0; +dword properties_window; + +#include "include\gui.h" +#include "include\properties.h" + +struct filter +{ + dword size; + char ext1[4]; + //char ext2[4]; + //char ext3[4]; + //char ext4[4]; + byte end; +}; + +filter filter2; +menu_text_struct menu_text_area1; + +char win_title[4096] = "Calypte v0.1"; + +int + cur_row=0, + read=0, + pos=0, + row_num=0, + col_count=0, + row_count=0; + +dword old_width,old_height; + +proc_info pr_inf; +char communication_area_name[] = "FFFFFFFF_open_dialog"; +byte plugin_path[4096]; +char default_dir[] = "/rd/1"; +char open_dialog_path[] = "/rd/1/File managers/opendial"; //opendial +byte openfile_path[2048]; +byte filename_area[4096]; + +opendialog o_dialog = {0, #pr_inf, #communication_area_name, 0, #plugin_path, #default_dir, #open_dialog_path, #draw_window, 0, #openfile_path, #filename_area, #filter2, 420, 200, 320, 120}; + +dword bufpointer; +dword bufsize; +dword draw_sruct; + +menu_data menudata1 = {0, 40, 2, 15, 2, #menu_text_area1.menu, #menu_text_area1.sub_menu1, #menu_text_area1.end, 0, 0, 80, 2, 100, 18, 0xEEEEEE, 0xFF, 0xEEEEEE, 0, 0, 0, #Form, 0, 0, 0, 16, 0, 0, 0x00CC00, 0, 0xFFFFFF, 0, 8, 0, 0}; + +void main() +{ + int id, key; + + strcpy(#filter2.ext1, "TXT"); + //strcpy(#filter2.ext2, "ASM"); + //strcpy(#filter2.ext3, "INC\0"); + //strcpy(#filter2.ext4, "\0"); + filter2.size = 8; + filter2.end = 0; + + strcpy(#menu_text_area1.menu, MENU1); + strcpy(#menu_text_area1.sub_menu1, MENU1_SUBMENU1); + strcpy(#menu_text_area1.sub_menu2, MENU1_SUBMENU2); + //strcpy(#menu_text_area1.sub_menu3, MENU1_SUBMENU3); + strcpy(#menu_text_area1.sub_menu4, MENU1_SUBMENU4); + menu_text_area1.end = 0; + + mem_Init(); + if (load_dll2(boxlib, #box_lib_init,0)!=0) notify(ERROR_LOAD_BOX_LIB); + if (load_dll2(libio, #libio_init,1)!=0) notify(ERROR_LOAD_LIBIO); + if (load_dll2(Proc_lib, #OpenDialog_init,0)!=0) notify(ERROR_LOAD_PROC_LIB); + OpenDialog_init stdcall (#o_dialog); + SetEventMask(0x27); + loop() + { + switch(WaitEvent()) + { + case evMouse: + menu_bar_mouse stdcall (#menudata1); + if (menudata1.click==1) + { + switch(menudata1.cursor_out) + { + case 1: + OpenDialog_start stdcall (#o_dialog); + OpenFile(#openfile_path); + Prepare(); + draw_window(); + break; + case 2: + read = 0; + strcpy(#win_title, TITLE); + FreeBuf(); + draw_window(); + break; + case 3: + if (!active_properties) + { + SwitchToAnotherThread(); + properties_window = CreateThread(#properties_dialog, #properties_stak+4092); + break; + } + else + { + ActivateWindow(GetProcessSlot(properties_window)); + } + break; + case 4: + ExitProcess(); + } + } + break; + + case evButton: + id=GetButtonID(); + if (id==1) || (id==10) ExitProcess(); + break; + + case evKey: + key = GetKey(); + switch (key) + { + if (Form.status_window>2) break; + case 015: //Ctrl+O + OpenDialog_start stdcall (#o_dialog); + OpenFile(#openfile_path); + Prepare(); + draw_window(); + break; + case ASCII_KEY_HOME: + cur_row = 0; + DrawText(); + break; + case ASCII_KEY_END: + cur_row = row_num - row_count - 1; + DrawText(); + break; + case ASCII_KEY_UP: + if (!cur_row) break; + else cur_row = cur_row-1; + DrawText(); + break; + case ASCII_KEY_DOWN: + if (cur_row+row_count>=row_num) break; + cur_row = cur_row+1; + DrawText(); + break; + case ASCII_KEY_PGUP: + if (!cur_row) break; + if (cur_rowrow_num) break; + cur_row = cur_row+row_count; + DrawText(); + break; + } + break; + + case evReDraw: + draw_window(); + break; + } + } +} + + +void draw_window() +{ + sc.get(); + DefineAndDrawWindow(GetScreenWidth()-WIN_W/2,GetScreenHeight()-WIN_H/2,WIN_W,WIN_H,0x73,0xFFFFFF,#win_title); + GetProcessInfo(#Form, SelfInfo); + DrawBar(0, 0, Form.cwidth, TOPPANELH, sc.work); + DrawBar(0, Form.cheight-BOTPANELH, Form.cwidth, BOTPANELH, sc.work); + + menudata1.bckg_col = sc.work; + menu_bar_draw stdcall (#menudata1); + + if (old_width!=Form.width) || (old_height!=Form.height) + { + old_width = Form.width; + old_height = Form.height; + + col_count = Form.cwidth/6; + row_count = Form.cheight-BOTPANELH-TOPPANELH-2; + row_count = row_count/10; + + if (read==1) Prepare(); + } + if (read==1) + { + DrawText(); + } + else DrawBar(0, TOPPANELH, Form.cwidth, Form.cheight-BOTPANELH-TOPPANELH, 0xFFFFFF); +} + +void OpenFile(dword path) +{ + strcpy(#win_title, TITLE); + strcat(#win_title, " - "); + strcat(#win_title, path); + file_size stdcall (path); + bufsize = EBX; + if (bufsize) + { + mem_Free(bufpointer); + bufpointer = mem_Alloc(bufsize); + ReadFile(0, bufsize, bufpointer, path); + read=1; + } +} + +void FreeBuf() +{ + int i; + for (i=0; i=bufsize-1) break; + } + pos=0; +} + +void DrawText() +{ + int i, top, num_line; + if (row_numlang.h-- + +@del Calypte +cls +c-- Calypte.c +@kpack Calypte.com +@rename Calypte.com Calypte +@del warning.txt +@del lang.h-- +@pause \ No newline at end of file diff --git a/programs/cmm/Calypte/compile_ru.bat b/programs/cmm/Calypte/compile_ru.bat new file mode 100644 index 0000000000..f80640bc88 --- /dev/null +++ b/programs/cmm/Calypte/compile_ru.bat @@ -0,0 +1,11 @@ +@del lang.h-- +@echo #define LANG_RUS 1 >lang.h-- + +@del Calypte +cls +c-- Calypte.c +@kpack Calypte.com +@rename Calypte.com Calypte +@del warning.txt +@del lang.h-- +@pause \ No newline at end of file diff --git a/programs/cmm/Calypte/include/gui.h b/programs/cmm/Calypte/include/gui.h new file mode 100644 index 0000000000..ab0233bd74 --- /dev/null +++ b/programs/cmm/Calypte/include/gui.h @@ -0,0 +1,23 @@ +#define COL_PADDING 0xC8C9C9 + +dword col_palette[14] = {0xD2D3D3,0xD4D4D4,0xD6D5D6,0xD8D7D8,0xDAD8D9,0xDCDADB, +0xDFDCDD,0xE1DDDE,0xE2DEE0,0xE4DFE1,0xE3DFE1,0xE3DFE1,0xE3DFE1,0xE3DFE1,0xE3DFE1}; + +void DrawFlatButton(dword x,y,width,height,id,color,text) +{ + int fill_h; + DrawRectangle(x,y,width,height,sc.work_graph); + DrawRectangle3D(x+1,y+1,width-2,height-2,0xFEFEFE,COL_PADDING); + PutPixel(x+width-1, y+1, COL_PADDING); + if (color!=-1) DrawFilledBar(x+2, y+2, width-3, height-3); + IF (id<>0) DefineButton(x+1,y+1,width-2,height-2,id+BT_HIDE,0xEFEBEF); + WriteText(-strlen(text)*6+width/2+x+1,height/2-3+y,0x80,sc.work_text,text); +} + +void DrawFilledBar(dword x, y, w, h) +{ + int i, fill_h; + if (h <= 14) fill_h = h; else fill_h = 14; + for (i=0; i