From ddda560478abb2f4fd711df0225a543d047d67a4 Mon Sep 17 00:00:00 2001 From: "Kirill Lipatov (Leency)" Date: Wed, 13 Jun 2012 14:11:10 +0000 Subject: [PATCH] HTMLv 0.92: basic menu RMB, downloader spike v2.0, code cleaning git-svn-id: svn://kolibrios.org@2764 a494cfbc-eb01-0410-851d-a64ba20cac60 --- programs/network/htmlv/browser/HTMLv.c-- | 41 ++++---- programs/network/htmlv/browser/History.txt | 6 ++ programs/network/htmlv/browser/ReadMe.txt | 28 ------ programs/network/htmlv/browser/TWB.h | 96 +++++++++---------- programs/network/htmlv/browser/compile.bat | 1 + .../htmlv/browser/include/acid_0.1.htm | 1 + .../network/htmlv/browser/include/menu_rmb.h | 67 +++++++++++++ .../htmlv/browser/include/unicode_tags.h | 25 ++--- 8 files changed, 157 insertions(+), 108 deletions(-) delete mode 100644 programs/network/htmlv/browser/ReadMe.txt create mode 100644 programs/network/htmlv/browser/include/menu_rmb.h diff --git a/programs/network/htmlv/browser/HTMLv.c-- b/programs/network/htmlv/browser/HTMLv.c-- index 5be162ec61..9eb189af22 100644 --- a/programs/network/htmlv/browser/HTMLv.c-- +++ b/programs/network/htmlv/browser/HTMLv.c-- @@ -24,21 +24,22 @@ char URL[4096], int max_kolvo_strok, //lines_visible max_kolvo_stolbcov, count, //lines_all - za_kadrom, + za_kadrom, //lines_first mouse_dd; edit_box edit1= {250,207,16,0xffffff,0x94AECE,0xffffff,0xffffff,0,248,#editURL,#mouse_dd,2,19,19}; scroll_bar scroll1 = { 18,200,398, 44,18,0,115,15,0,0xeeeeee,0xD2CED0,0x555555,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1}; //details in scroll_lib.h-- proc_info Form; - +dword stak[100]; //меню ПКМ +mouse m; #include "TWB.h" +#include "include\menu_rmb.h" void main() { - mouse m; int btn; byte key; int scroll_size; @@ -51,17 +52,14 @@ void main() if (param) copystr(#param,#URL); else copystr("/sys/index.htm",#URL); - copystr(#URL,#editURL); - if (!strcmp(get_URL_part(5),"http:"))) HttpLoad(); - //Draw_Window(); //shis is right - //WB1.ShowPage(#URL); //shis is right + OpenPage(); SetEventMask(0x27); loop() { - WaitEventTimeout(1); + WaitEventTimeout(2); switch(EAX & 0xFF) { CASE evMouse: @@ -74,7 +72,16 @@ void main() WB1.ParseHTML(buf, filesize); //break; };*/ + btn=GetSlot(Form.ID); + IF (btn<>ActiveProcess()) break; //если окно не активно на события мыши не реагируем + m.get(); + + if (m.pkm) && (m.y>WB1.top) && (m.y0x0d) && (key<>183) && (key<>184) && (key<>173) {EAX=key<<8; edit_box_key stdcall(#edit1);} //адресная строка - BREAK; + break; case evReDraw: Draw_Window(); break; @@ -134,7 +141,10 @@ void main() { if (GetProcessSlot(downloader_id)<>0) break; downloader_id=0; + ReadHtml(); + if (filesize) wintodos(buf); Draw_Window(); + //WB1.ShowPage(#URL); } } } @@ -144,7 +154,7 @@ void main() void Draw_Window() { DefineAndDrawWindow(215,100,640,480,0x73,0x00E4DFE1,0,0,0); - + GetProcessInfo(#Form, SelfInfo); IF (Form.status_window>2) //если свернуто в заголовок, ничего не рисуем { @@ -166,16 +176,15 @@ void Draw_Window() DefineButton(onLeft(56,0),15, 17, 16, SEARCHWEB+BT_HIDE, 0xE4DFE1); DrawRegion(205,14,onLeft(58,205),18,0x94AECE); //ободок полосы адреса DrawRegion(206,15,onLeft(59,205),16,0xE4ECF3); - + edit1.width=Form.width-266; - //edit_box_draw stdcall(#edit1); //рисуем строку адреса //shis is right - WB1.top=44; WB1.width=Form.width-13; WB1.height=onTop(43,5); + max_kolvo_stolbcov = WB1.width - 30 / 6; + max_kolvo_strok = WB1.height - 3 / 10 - 2; + WB1.ShowPage(#URL); - - //WB1.ParseHTML(buf, filesize); //shis is right } int onLeft(dword right,left) {return Form.width-right-left;} diff --git a/programs/network/htmlv/browser/History.txt b/programs/network/htmlv/browser/History.txt index 3f075442b3..aa62675259 100644 --- a/programs/network/htmlv/browser/History.txt +++ b/programs/network/htmlv/browser/History.txt @@ -1,3 +1,9 @@ +13.06.12 -- v0.92 +- базовое меню ПКМ; +- убрана постоянная загрузка страницы при перерисовке окна; +- костыли версии 2.0 для работы с downloader'ом; +- разделение кода загрузки и отображения страницы: часть 1. + 04.06.12 -- v0.90 - новый скроллбар из box_lib (спасибо lev); - нормальная загрузка страниц без скидывания фокуса с окна; diff --git a/programs/network/htmlv/browser/ReadMe.txt b/programs/network/htmlv/browser/ReadMe.txt deleted file mode 100644 index f1d20ae1e2..0000000000 --- a/programs/network/htmlv/browser/ReadMe.txt +++ /dev/null @@ -1,28 +0,0 @@ -==О программе HTMLv== -HTMLv - это текстовый браузер, а так же просмотровщик веб-страниц. Пока что -поддерживает только форматирование текста с некоторыми вложеными параметрами. -Программа написана на языке C--. В нём можно писать программы, как на Си, так и на асме, притом их там удобно совмещать. -Обсуждение программы здесь: -http://board.kolibrios.org/viewtopic.php?f=9&t=1075 - - -==Установка== -Сама программа может быть запущена откуда угодно. Для работы с Интернетом необходим downloader. - - -==Интернет== -Если ваша сетевая карта не поддерживается Колибри нативно - не беда: -она поддерживается в Qemu и VirtualBox. - - -==Проблемы== -Отписывайтесь в теме, если что-то не так. Ссылка выше. - -==Авторы== -Leency - разработка, дизайн. -Asper - код работы с библиотеками Колибри, поддержка изображений, UTF-8. -Veliant - автор программы-предшественника, помощь, советы. -Barsuk - программа downloader, код работы с ней. -Lrz - компонент EditBox. -Nable - оптимизации. -lev - оптимизации, некоторые доработки. \ No newline at end of file diff --git a/programs/network/htmlv/browser/TWB.h b/programs/network/htmlv/browser/TWB.h index 4b4a080aee..3c801cd625 100644 --- a/programs/network/htmlv/browser/TWB.h +++ b/programs/network/htmlv/browser/TWB.h @@ -1,6 +1,3 @@ -//идея - левые файлы открывать соответствующими прогами -//ol - циферки - int downloader_id; @@ -11,9 +8,8 @@ dword j, int i; char download_path[]="/rd/1/.download"; -//char search_path[]="http://nova.rambler.ru/search?words="; char search_path[]="http://nigma.ru/index.php?s="; -char version[]=" Text-based Browser 0.9b"; +char version[]=" Text-based Browser 0.92"; struct TWebBrowser { @@ -56,23 +52,18 @@ void TWebBrowser::Scan(dword id) { if (id > 399) { GetURLfromPageLinks(id); - //эту всю хрень нужно в GetNewUrl() переместить - IF (URL[0] == '#') { //мы не умеем переходить по ссылке внутри документа. Пока что... + if (URL[0] == '#') { //мы не умеем переходить по ссылке внутри документа. Пока что... copystr(BrowserHistory.CurrentUrl(), #editURL); copystr(#URL, #editURL + strlen(#editURL)); - - //edit1.size = edit1.pos = strlen(#editURL); - //edit_box_draw stdcall(#edit1); //рисуем строку адреса - copystr(BrowserHistory.CurrentUrl(), #URL); ShowPage(#URL); return; } - URL[find_symbol(#URL, '#')-1] = 0x00; //заглушка, лучше, чем ничего (хабр, например, будет работать) //это не совсем правильно - в едитурл должно оставаться + URL[find_symbol(#URL, '#')-1] = 0x00; //заглушка, но это не совсем правильно - в едитурл должно оставаться GetNewUrl(); - + if (!strcmp(#URL + strlen(#URL) - 4, ".gif")) || (!strcmp(#URL + strlen(#URL) - 4, ".png")) || (!strcmp(#URL + strlen(#URL) - 4, ".jpg")) { RunProgram("/sys/media/kiv", #URL); @@ -116,9 +107,7 @@ void TWebBrowser::Scan(dword id) { Draw_Window(); return; } - copystr(#URL, #editURL); - if (!strcmp(get_URL_part(5),"http:"))) HttpLoad(); - ShowPage(#URL); + OpenPage(); //от сердца отрываю, здесь нужно za_kadrom старое return; case 014: //Ctrl+N новое окно case 020: //Ctrl+T новая вкладка @@ -177,15 +166,7 @@ void TWebBrowser::Scan(dword id) { ParseHTML(buf, filesize); } -void OpenPage() -{ - if (GetProcessSlot(downloader_id)<>0) PutPaletteImage(#toolbar,200,42,0,0,8,#toolbar_pal); - KillProcess(downloader_id); - copystr(#URL, #editURL); - za_kadrom = count = 0; - if (!strcmp(get_URL_part(5),"http:"))) HttpLoad(); - WB1.ShowPage(#URL); -} + void GetNewUrl(){ IF (!strcmp(get_URL_part(2),"./")) copystr(#URL+2,#URL); //игнорим :) @@ -216,23 +197,6 @@ void GetNewUrl(){ } -void HttpLoad() -{ - //count = 0; я думаю ему место здесь - copystr(#version, #header); - KillProcess(downloader_id); //убиваем старый процесс - DeleteFile(#download_path); - IF (URL[strlen(#URL)-1]=='/') URL[strlen(#URL)-1]=''; - downloader_id = RunProgram("/sys/network/downloader", #URL); - //это гениально и это пиздец!!! - Pause(60); - KillProcess(downloader_id); //убиваем старый процесс - downloader_id = RunProgram("/sys/network/downloader", #URL); - // - IF (downloader_id<0) RunProgram("@notify", "Error running Downloader. Internet unavilable."); - Draw_Window(); -} - void ReadHtml() { @@ -242,7 +206,8 @@ void ReadHtml() file_size stdcall (#URL); filesize = EBX; - if (!filesize) /*{Pause(200); ReadHtml();}*/ return; + if (!filesize) return; + mem_Free(buf); buf = mem_Alloc(filesize); if (!strcmp(get_URL_part(5),"http:"))) @@ -252,18 +217,44 @@ void ReadHtml() } +void OpenPage() +{ + if (GetProcessSlot(downloader_id)<>0) PutPaletteImage(#toolbar,200,42,0,0,8,#toolbar_pal); + KillProcess(downloader_id); + copystr(#URL, #editURL); + BrowserHistory.AddUrl(); + za_kadrom = count = 0; + if (!strcmp(get_URL_part(5),"http:"))) + { + copystr(#version, #header); + KillProcess(downloader_id); //убиваем старый процесс + DeleteFile(#download_path); + IF (URL[strlen(#URL)-1]=='/') URL[strlen(#URL)-1]=''; + downloader_id = RunProgram("/sys/network/downloader", #URL); + //это гениально и это пиздец!!! + Pause(60); + if (GetProcessSlot(downloader_id)<>0) + { + WriteDebug("Browser Hack v2.0: Killing downloader and trying to run it one more!"); + KillProcess(downloader_id); //убиваем старый процесс + downloader_id = RunProgram("/sys/network/downloader", #URL); + } + // + IF (downloader_id<0) RunProgram("@notify", "Error running Downloader. Internet unavilable."); + Draw_Window(); + return; + } + ReadHtml(); + if (filesize) wintodos(buf); + WB1.ShowPage(#URL); +} -void TWebBrowser::ShowPage(dword adress) { - max_kolvo_stolbcov = width - 30 / 6; - max_kolvo_strok = height - 3 / 10 - 2; + +void TWebBrowser::ShowPage(dword adress) +{ edit1.size = edit1.pos = strlen(#editURL); edit_box_draw stdcall(#edit1); //рисуем строку адреса - BrowserHistory.AddUrl(); - - //LETS_LOAD - ReadHtml(); - if (!filesize) { DrawBar(left, top, width+4, height, 0xFFFFFF); //закрашиваем всё донизу @@ -276,8 +267,7 @@ void TWebBrowser::ShowPage(dword adress) { DrawTitle(#version); //? return; } - - wintodos(buf); + ParseHTML(buf, filesize); IF (!strcmp(#version, #header)) DrawTitle(#header); } diff --git a/programs/network/htmlv/browser/compile.bat b/programs/network/htmlv/browser/compile.bat index 85dca47b8e..1352438f29 100644 --- a/programs/network/htmlv/browser/compile.bat +++ b/programs/network/htmlv/browser/compile.bat @@ -2,4 +2,5 @@ del HTMLv rename HTMLv.com HTMLv rem ..\C--\kpack HTMLv +del warning.txt pause diff --git a/programs/network/htmlv/browser/include/acid_0.1.htm b/programs/network/htmlv/browser/include/acid_0.1.htm index b6414108d0..79dccbc2da 100644 --- a/programs/network/htmlv/browser/include/acid_0.1.htm +++ b/programs/network/htmlv/browser/include/acid_0.1.htm @@ -58,6 +58,7 @@

На главную страницу index.htm

index.htm#home

+

#home

Фоновая картинка

diff --git a/programs/network/htmlv/browser/include/menu_rmb.h b/programs/network/htmlv/browser/include/menu_rmb.h new file mode 100644 index 0000000000..c22ca30943 --- /dev/null +++ b/programs/network/htmlv/browser/include/menu_rmb.h @@ -0,0 +1,67 @@ +//Leency - 2012 + +#define ITEM_HEIGHT 18 +#define ITEM_WIDTH 138 + +char *ITEMS_LIST[]={ +"View html code F3", +"--------------------", //сделать определение таких линий и рисовать их +"KOI-8 Ctrl+K", +"UTF Ctrl+U", +0}; + +proc_info MenuForm; + + +void menu_rmb() +{ + + mouse mm; + int items_num; + int id, letitclose=0; + + SetEventMask(100111b); + + loop() switch(CheckEvent()) + { + case evMouse: + /*mm.get(); + //кульно + if (mm.x>85) && (mm.x<155) && (mm.y>190) && (mm.y<190+22) + if (mm.lkm) {DrawRegion_3D(86,191,68,20,0xC7C7C7,0xFFFFFF); letitclose=1;} + ELSE {IF (letitclose) {DrawRegion_3D(86,191,68,20,0xFFFFFF,0xC7C7C7); Pause(7); ExitProcess();}} + ELSE IF (letitclose) {letitclose=0; DrawRegion_3D(86,191,68,20,0xFFFFFF,0xC7C7C7);}*/ + break; + + case evButton: + id=GetButtonID(); + if (id==1) ExitProcess(); + if (id==10) WB1.Scan(52); //View html code + if (id==11) break; + if (id==12) WB1.Scan(11); //KOI + if (id==13) WB1.Scan(21); //UTF + + ExitProcess(); + break; + + case evKey: + if (GetKey()==27) ExitProcess(); + break; + + case evReDraw: + for (items_num=0; ITEMS_LIST[items_num]<>0; items_num++;) {}; + DefineAndDrawWindow(Form.left+m.x,Form.top+m.y+GetSkinWidth()+3,ITEM_WIDTH,items_num*ITEM_HEIGHT,0x01,0x10FFFFFF,0,0,0); + + DrawRegion(0,0,ITEM_WIDTH,items_num*ITEM_HEIGHT,0x777777); //ободок + DrawBar(1,1,ITEM_WIDTH-1,items_num*ITEM_HEIGHT-1,0xFFFFFF); //фон + for (i=0; iActiveProcess()) ExitProcess(); + } +} \ No newline at end of file diff --git a/programs/network/htmlv/browser/include/unicode_tags.h b/programs/network/htmlv/browser/include/unicode_tags.h index 0bdc2fa239..bb5882b830 100644 --- a/programs/network/htmlv/browser/include/unicode_tags.h +++ b/programs/network/htmlv/browser/include/unicode_tags.h @@ -18,11 +18,12 @@ byte unicode_chars[] = " char *unicode_tags[]={ "nbsp", " ", "#38", " ", +"#160", " ", "copy", "(c)", "#169", "(c)", -"trade", "[TM]", +"trade", "[TM]", "reg", "(r)", "#174", "(r)", @@ -55,23 +56,25 @@ char *unicode_tags[]={ "#34", "\"", "ldquo", "\"", "rdquo", "\"", -"#8222","\"", +"#8222", "\"", "#8221", "\"", "laquo", "<<", +"#171", "<<", "raquo", ">>", +"#187", ">>", -"uarr", "\24", -"darr", "\25", -"rarr", "\26", -"larr", "\27", +"uarr", "\24", +"darr", "\25", +"rarr", "\26", +"larr", "\27", -"#1028","\242", -"#1030","I", -"#1031","\244", +"#1028", "\242", +"#1030", "I", +"#1031", "\244", -"#8470","N", -"bull", "-", //ў®®ЎйҐ §¤Ґбм в®зЄ  +"#8470", "N", +"bull", "-", //ў®®ЎйҐ §¤Ґбм в®зЄ  "percnt","%", 0};