HTMLv 0.92: basic menu RMB, downloader spike v2.0, code cleaning

git-svn-id: svn://kolibrios.org@2764 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Kirill Lipatov (Leency) 2012-06-13 14:11:10 +00:00
parent 014a5bcd70
commit ddda560478
8 changed files with 157 additions and 108 deletions

View File

@ -24,21 +24,22 @@ char URL[4096],
int max_kolvo_strok, //lines_visible int max_kolvo_strok, //lines_visible
max_kolvo_stolbcov, max_kolvo_stolbcov,
count, //lines_all count, //lines_all
za_kadrom, za_kadrom, //lines_first
mouse_dd; mouse_dd;
edit_box edit1= {250,207,16,0xffffff,0x94AECE,0xffffff,0xffffff,0,248,#editURL,#mouse_dd,2,19,19}; 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-- 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; proc_info Form;
dword stak[100]; //ìåíþ ÏÊÌ
mouse m;
#include "TWB.h" #include "TWB.h"
#include "include\menu_rmb.h"
void main() void main()
{ {
mouse m;
int btn; int btn;
byte key; byte key;
int scroll_size; int scroll_size;
@ -51,17 +52,14 @@ void main()
if (param) copystr(#param,#URL); if (param) copystr(#param,#URL);
else copystr("/sys/index.htm",#URL); else copystr("/sys/index.htm",#URL);
copystr(#URL,#editURL); copystr(#URL,#editURL);
if (!strcmp(get_URL_part(5),"http:"))) HttpLoad(); OpenPage();
//Draw_Window(); //shis is right
//WB1.ShowPage(#URL); //shis is right
SetEventMask(0x27); SetEventMask(0x27);
loop() loop()
{ {
WaitEventTimeout(1); WaitEventTimeout(2);
switch(EAX & 0xFF) switch(EAX & 0xFF)
{ {
CASE evMouse: CASE evMouse:
@ -74,7 +72,16 @@ void main()
WB1.ParseHTML(buf, filesize); WB1.ParseHTML(buf, filesize);
//break; //break;
};*/ };*/
btn=GetSlot(Form.ID);
IF (btn<>ActiveProcess()) break; //åñëè îêíî íå àêòèâíî íà ñîáûòèÿ ìûøè íå ðåàãèðóåì
m.get(); m.get();
if (m.pkm) && (m.y>WB1.top) && (m.y<Form.height) && (filesize)
{
CreateThread(#menu_rmb,#stak);
break;
}
IF (m.vert==65535) //ïðîêðóòêà êîë¸ñèêîì IF (m.vert==65535) //ïðîêðóòêà êîë¸ñèêîì
{ {
@ -120,12 +127,12 @@ void main()
{ {
WB1.Scan(btn); WB1.Scan(btn);
} }
BREAK; break;
case evKey: case evKey:
key = GetKey(); key = GetKey();
WB1.Scan(key); WB1.Scan(key);
IF (key<>0x0d) && (key<>183) && (key<>184) && (key<>173) {EAX=key<<8; edit_box_key stdcall(#edit1);} //àäðåñíàÿ ñòðîêà IF (key<>0x0d) && (key<>183) && (key<>184) && (key<>173) {EAX=key<<8; edit_box_key stdcall(#edit1);} //àäðåñíàÿ ñòðîêà
BREAK; break;
case evReDraw: case evReDraw:
Draw_Window(); Draw_Window();
break; break;
@ -134,7 +141,10 @@ void main()
{ {
if (GetProcessSlot(downloader_id)<>0) break; if (GetProcessSlot(downloader_id)<>0) break;
downloader_id=0; downloader_id=0;
ReadHtml();
if (filesize) wintodos(buf);
Draw_Window(); Draw_Window();
//WB1.ShowPage(#URL);
} }
} }
} }
@ -144,7 +154,7 @@ void main()
void Draw_Window() void Draw_Window()
{ {
DefineAndDrawWindow(215,100,640,480,0x73,0x00E4DFE1,0,0,0); DefineAndDrawWindow(215,100,640,480,0x73,0x00E4DFE1,0,0,0);
GetProcessInfo(#Form, SelfInfo); GetProcessInfo(#Form, SelfInfo);
IF (Form.status_window>2) //åñëè ñâåðíóòî â çàãîëîâîê, íè÷åãî íå ðèñóåì IF (Form.status_window>2) //åñëè ñâåðíóòî â çàãîëîâîê, íè÷åãî íå ðèñóåì
{ {
@ -166,16 +176,15 @@ void Draw_Window()
DefineButton(onLeft(56,0),15, 17, 16, SEARCHWEB+BT_HIDE, 0xE4DFE1); DefineButton(onLeft(56,0),15, 17, 16, SEARCHWEB+BT_HIDE, 0xE4DFE1);
DrawRegion(205,14,onLeft(58,205),18,0x94AECE); //îáîäîê ïîëîñû àäðåñà DrawRegion(205,14,onLeft(58,205),18,0x94AECE); //îáîäîê ïîëîñû àäðåñà
DrawRegion(206,15,onLeft(59,205),16,0xE4ECF3); DrawRegion(206,15,onLeft(59,205),16,0xE4ECF3);
edit1.width=Form.width-266; edit1.width=Form.width-266;
//edit_box_draw stdcall(#edit1); //ðèñóåì ñòðîêó àäðåñà //shis is right
WB1.top=44; WB1.top=44;
WB1.width=Form.width-13; WB1.width=Form.width-13;
WB1.height=onTop(43,5); WB1.height=onTop(43,5);
max_kolvo_stolbcov = WB1.width - 30 / 6;
max_kolvo_strok = WB1.height - 3 / 10 - 2;
WB1.ShowPage(#URL); WB1.ShowPage(#URL);
//WB1.ParseHTML(buf, filesize); //shis is right
} }
int onLeft(dword right,left) {return Form.width-right-left;} int onLeft(dword right,left) {return Form.width-right-left;}

View File

@ -1,3 +1,9 @@
13.06.12 -- v0.92
- базовое меню ПКМ;
- убрана постоянная загрузка страницы при перерисовке окна;
- костыли версии 2.0 для работы с downloader'ом;
- разделение кода загрузки и отображения страницы: часть 1.
04.06.12 -- v0.90 04.06.12 -- v0.90
- новый скроллбар из box_lib (спасибо lev); - новый скроллбар из box_lib (спасибо lev);
- нормальная загрузка страниц без скидывания фокуса с окна; - нормальная загрузка страниц без скидывания фокуса с окна;

View File

@ -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 - оптимизации, некоторые доработки.

View File

@ -1,6 +1,3 @@
//èäåÿ - ëåâûå ôàéëû îòêðûâàòü ñîîòâåòñòâóþùèìè ïðîãàìè
//ol - öèôåðêè
int downloader_id; int downloader_id;
@ -11,9 +8,8 @@ dword j,
int i; int i;
char download_path[]="/rd/1/.download"; 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 search_path[]="http://nigma.ru/index.php?s=";
char version[]=" Text-based Browser 0.9b"; char version[]=" Text-based Browser 0.92";
struct TWebBrowser { struct TWebBrowser {
@ -56,23 +52,18 @@ void TWebBrowser::Scan(dword id) {
if (id > 399) if (id > 399)
{ {
GetURLfromPageLinks(id); GetURLfromPageLinks(id);
//ýòó âñþ õðåíü íóæíî â GetNewUrl() ïåðåìåñòèòü //ýòó âñþ õðåíü íóæíî â GetNewUrl() ïåðåìåñòèòü
IF (URL[0] == '#') { //ìû íå óìååì ïåðåõîäèòü ïî ññûëêå âíóòðè äîêóìåíòà. Ïîêà ÷òî... if (URL[0] == '#') { //ìû íå óìååì ïåðåõîäèòü ïî ññûëêå âíóòðè äîêóìåíòà. Ïîêà ÷òî...
copystr(BrowserHistory.CurrentUrl(), #editURL); copystr(BrowserHistory.CurrentUrl(), #editURL);
copystr(#URL, #editURL + strlen(#editURL)); copystr(#URL, #editURL + strlen(#editURL));
//edit1.size = edit1.pos = strlen(#editURL);
//edit_box_draw stdcall(#edit1); //ðèñóåì ñòðîêó àäðåñà
copystr(BrowserHistory.CurrentUrl(), #URL); copystr(BrowserHistory.CurrentUrl(), #URL);
ShowPage(#URL); ShowPage(#URL);
return; return;
} }
URL[find_symbol(#URL, '#')-1] = 0x00; //çàãëóøêà, ëó÷øå, ÷åì íè÷åãî (õàáð, íàïðèìåð, áóäåò ðàáîòàòü) //ýòî íå ñîâñåì ïðàâèëüíî - â åäèòóðë äîëæíî îñòàâàòüñÿ URL[find_symbol(#URL, '#')-1] = 0x00; //çàãëóøêà, íî ýòî íå ñîâñåì ïðàâèëüíî - â åäèòóðë äîëæíî îñòàâàòüñÿ
GetNewUrl(); GetNewUrl();
if (!strcmp(#URL + strlen(#URL) - 4, ".gif")) || (!strcmp(#URL + strlen(#URL) - 4, ".png")) || (!strcmp(#URL + strlen(#URL) - 4, ".jpg")) if (!strcmp(#URL + strlen(#URL) - 4, ".gif")) || (!strcmp(#URL + strlen(#URL) - 4, ".png")) || (!strcmp(#URL + strlen(#URL) - 4, ".jpg"))
{ {
RunProgram("/sys/media/kiv", #URL); RunProgram("/sys/media/kiv", #URL);
@ -116,9 +107,7 @@ void TWebBrowser::Scan(dword id) {
Draw_Window(); Draw_Window();
return; return;
} }
copystr(#URL, #editURL); OpenPage(); //îò ñåðäöà îòðûâàþ, çäåñü íóæíî za_kadrom ñòàðîå
if (!strcmp(get_URL_part(5),"http:"))) HttpLoad();
ShowPage(#URL);
return; return;
case 014: //Ctrl+N íîâîå îêíî case 014: //Ctrl+N íîâîå îêíî
case 020: //Ctrl+T íîâàÿ âêëàäêà case 020: //Ctrl+T íîâàÿ âêëàäêà
@ -177,15 +166,7 @@ void TWebBrowser::Scan(dword id) {
ParseHTML(buf, filesize); 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(){ void GetNewUrl(){
IF (!strcmp(get_URL_part(2),"./")) copystr(#URL+2,#URL); //èãíîðèì :) 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() void ReadHtml()
{ {
@ -242,7 +206,8 @@ void ReadHtml()
file_size stdcall (#URL); file_size stdcall (#URL);
filesize = EBX; filesize = EBX;
if (!filesize) /*{Pause(200); ReadHtml();}*/ return; if (!filesize) return;
mem_Free(buf); mem_Free(buf);
buf = mem_Alloc(filesize); buf = mem_Alloc(filesize);
if (!strcmp(get_URL_part(5),"http:"))) 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; void TWebBrowser::ShowPage(dword adress)
max_kolvo_strok = height - 3 / 10 - 2; {
edit1.size = edit1.pos = strlen(#editURL); edit1.size = edit1.pos = strlen(#editURL);
edit_box_draw stdcall(#edit1); //ðèñóåì ñòðîêó àäðåñà edit_box_draw stdcall(#edit1); //ðèñóåì ñòðîêó àäðåñà
BrowserHistory.AddUrl();
//LETS_LOAD
ReadHtml();
if (!filesize) if (!filesize)
{ {
DrawBar(left, top, width+4, height, 0xFFFFFF); //çàêðàøèâàåì âñ¸ äîíèçó DrawBar(left, top, width+4, height, 0xFFFFFF); //çàêðàøèâàåì âñ¸ äîíèçó
@ -276,8 +267,7 @@ void TWebBrowser::ShowPage(dword adress) {
DrawTitle(#version); //? DrawTitle(#version); //?
return; return;
} }
wintodos(buf);
ParseHTML(buf, filesize); ParseHTML(buf, filesize);
IF (!strcmp(#version, #header)) DrawTitle(#header); IF (!strcmp(#version, #header)) DrawTitle(#header);
} }

View File

@ -2,4 +2,5 @@
del HTMLv del HTMLv
rename HTMLv.com HTMLv rename HTMLv.com HTMLv
rem ..\C--\kpack HTMLv rem ..\C--\kpack HTMLv
del warning.txt
pause pause

View File

@ -58,6 +58,7 @@
<p><a href='index.htm'>Íà ãëàâíóþ ñòðàíèöó index.htm</a></p> <p><a href='index.htm'>Íà ãëàâíóþ ñòðàíèöó index.htm</a></p>
<p><a href="index.htm#home" id="#end">index.htm#home</a></p> <p><a href="index.htm#home" id="#end">index.htm#home</a></p>
<p><a href="#home">#home</a></p>
<p><a href="background.gif">Ôîíîâàÿ êàðòèíêà</a></p> <p><a href="background.gif">Ôîíîâàÿ êàðòèíêà</a></p>
</body> </body>

View File

@ -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; i<items_num; i++;)
{
DefineButton(0, i*ITEM_HEIGHT, ITEM_WIDTH, ITEM_HEIGHT, i+10+BT_HIDE, 0xFFFFFF);
WriteText(8,i*ITEM_HEIGHT+6,0x80,0x000000,ITEMS_LIST[i],0);
}
default:
GetProcessInfo(#MenuForm, SelfInfo);
id=GetSlot(MenuForm.ID);
if (id<>ActiveProcess()) ExitProcess();
}
}

View File

@ -18,11 +18,12 @@ byte unicode_chars[] = "
char *unicode_tags[]={ char *unicode_tags[]={
"nbsp", " ", "nbsp", " ",
"#38", " ", "#38", " ",
"#160", " ",
"copy", "(c)", "copy", "(c)",
"#169", "(c)", "#169", "(c)",
"trade", "[TM]", "trade", "[TM]",
"reg", "(r)", "reg", "(r)",
"#174", "(r)", "#174", "(r)",
@ -55,23 +56,25 @@ char *unicode_tags[]={
"#34", "\"", "#34", "\"",
"ldquo", "\"", "ldquo", "\"",
"rdquo", "\"", "rdquo", "\"",
"#8222","\"", "#8222", "\"",
"#8221", "\"", "#8221", "\"",
"laquo", "<<", "laquo", "<<",
"#171", "<<",
"raquo", ">>", "raquo", ">>",
"#187", ">>",
"uarr", "\24", "uarr", "\24",
"darr", "\25", "darr", "\25",
"rarr", "\26", "rarr", "\26",
"larr", "\27", "larr", "\27",
"#1028","\242", "#1028", "\242",
"#1030","I", "#1030", "I",
"#1031","\244", "#1031", "\244",
"#8470","N", "#8470", "N",
"bull", "-", //¢®®¡é¥ §¤¥áì â®çª  "bull", "-", //¢®®¡é¥ §¤¥áì â®çª 
"percnt","%", "percnt","%",
0}; 0};