forked from KolibriOS/kolibrios
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:
parent
014a5bcd70
commit
ddda560478
@ -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,8 +72,17 @@ 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.y<Form.height) && (filesize)
|
||||
{
|
||||
CreateThread(#menu_rmb,#stak);
|
||||
break;
|
||||
}
|
||||
|
||||
IF (m.vert==65535) //ïðîêðóòêà êîë¸ñèêîì
|
||||
{
|
||||
IF (za_kadrom==0) break;
|
||||
@ -120,12 +127,12 @@ void main()
|
||||
{
|
||||
WB1.Scan(btn);
|
||||
}
|
||||
BREAK;
|
||||
break;
|
||||
case evKey:
|
||||
key = GetKey();
|
||||
WB1.Scan(key);
|
||||
IF (key<>0x0d) && (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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -168,14 +178,13 @@ void Draw_Window()
|
||||
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);
|
||||
WB1.ShowPage(#URL);
|
||||
max_kolvo_stolbcov = WB1.width - 30 / 6;
|
||||
max_kolvo_strok = WB1.height - 3 / 10 - 2;
|
||||
|
||||
//WB1.ParseHTML(buf, filesize); //shis is right
|
||||
WB1.ShowPage(#URL);
|
||||
}
|
||||
|
||||
int onLeft(dword right,left) {return Form.width-right-left;}
|
||||
|
@ -1,3 +1,9 @@
|
||||
13.06.12 -- v0.92
|
||||
- базовое меню ПКМ;
|
||||
- убрана постоянная загрузка страницы при перерисовке окна;
|
||||
- костыли версии 2.0 для работы с downloader'ом;
|
||||
- разделение кода загрузки и отображения страницы: часть 1.
|
||||
|
||||
04.06.12 -- v0.90
|
||||
- новый скроллбар из box_lib (спасибо lev);
|
||||
- нормальная загрузка страниц без скидывания фокуса с окна;
|
||||
|
@ -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 - оптимизации, некоторые доработки.
|
@ -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,20 +52,15 @@ 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();
|
||||
|
||||
@ -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); //çàêðàøèâàåì âñ¸ äîíèçó
|
||||
@ -277,7 +268,6 @@ void TWebBrowser::ShowPage(dword adress) {
|
||||
return;
|
||||
}
|
||||
|
||||
wintodos(buf);
|
||||
ParseHTML(buf, filesize);
|
||||
IF (!strcmp(#version, #header)) DrawTitle(#header);
|
||||
}
|
||||
|
@ -2,4 +2,5 @@
|
||||
del HTMLv
|
||||
rename HTMLv.com HTMLv
|
||||
rem ..\C--\kpack HTMLv
|
||||
del warning.txt
|
||||
pause
|
||||
|
@ -58,6 +58,7 @@
|
||||
|
||||
<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="#home">#home</a></p>
|
||||
<p><a href="background.gif">Ôîíîâàÿ êàðòèíêà</a></p>
|
||||
|
||||
</body>
|
||||
|
67
programs/network/htmlv/browser/include/menu_rmb.h
Normal file
67
programs/network/htmlv/browser/include/menu_rmb.h
Normal 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();
|
||||
}
|
||||
}
|
@ -18,6 +18,7 @@ byte unicode_chars[] = "
|
||||
char *unicode_tags[]={
|
||||
"nbsp", " ",
|
||||
"#38", " ",
|
||||
"#160", " ",
|
||||
|
||||
"copy", "(c)",
|
||||
"#169", "(c)",
|
||||
@ -55,22 +56,24 @@ char *unicode_tags[]={
|
||||
"#34", "\"",
|
||||
"ldquo", "\"",
|
||||
"rdquo", "\"",
|
||||
"#8222","\"",
|
||||
"#8222", "\"",
|
||||
"#8221", "\"",
|
||||
|
||||
"laquo", "<<",
|
||||
"#171", "<<",
|
||||
"raquo", ">>",
|
||||
"#187", ">>",
|
||||
|
||||
"uarr", "\24",
|
||||
"darr", "\25",
|
||||
"rarr", "\26",
|
||||
"larr", "\27",
|
||||
|
||||
"#1028","\242",
|
||||
"#1030","I",
|
||||
"#1031","\244",
|
||||
"#1028", "\242",
|
||||
"#1030", "I",
|
||||
"#1031", "\244",
|
||||
|
||||
"#8470","N",
|
||||
"#8470", "N",
|
||||
"bull", "-", //¢®®¡é¥ §¤¥áì â®çª
|
||||
"percnt","%",
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user