HTMLv 0.75: new futures and bags.

git-svn-id: svn://kolibrios.org@2413 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Kirill Lipatov (Leency) 2012-02-27 13:48:04 +00:00
parent a6898aa575
commit 823a0a9a8f
11 changed files with 105 additions and 122 deletions

View File

@ -2,17 +2,16 @@
//Copyright 2007-2009 by Veliant & Leency //Copyright 2007-2009 by Veliant & Leency
//Asper, Lrz, Nable, lev. //Asper, Lrz, Nable, lev.
#include "../lib/kolibri.h--" #include "..\lib\kolibri.h--"
#include "../lib/file_system.h--" #include "..\lib\file_system.h--"
#include "include/some_code.h--" #include "img\toolbar_icons.c"
#include "img/toolbar_icons.c--" #include "img\URLgoto.txt";
#include "img/URLgoto.txt";
//Asper //Asper
#include "../lib/mem.h--" #include "..\lib\mem.h--"
#include "../lib/libio_lib.h--" #include "..\lib\libio_lib.h--"
#include "../lib/libimg_lib.h--" #include "..\lib\libimg_lib.h--"
#include "../lib/edit_box_lib.h--" #include "..\lib\edit_box_lib.h--"
#include "../lib/dll.h--" #include "..\lib\dll.h--"
//ïåğåìåííûå //ïåğåìåííûå
char URL[4096]="/sys/index.htm", char URL[4096]="/sys/index.htm",
@ -30,12 +29,12 @@ int za_kadrom,
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};
#include "TWB.h--"
proc_info Form; proc_info Form;
#include "TWB.h"
void main() void main()
{ {
mouse m; mouse m;
@ -91,10 +90,14 @@ void main()
IF (btn<>za_kadrom) WB1.ParseHTML(buf, filesize); //÷òîá ëèøíèé ğàç íå ïåğåğèñîâûâàòü IF (btn<>za_kadrom) WB1.ParseHTML(buf, filesize); //÷òîá ëèøíèé ğàç íå ïåğåğèñîâûâàòü
m.get(); m.get();
} }
BREAK; break;
case evButton: case evButton:
btn=GetButtonID(); btn=GetButtonID();
IF (btn==1) ExitProcess(); IF (btn==1)
{
KillProcess(downloader_id);
ExitProcess();
}
ELSE ELSE
{ {
WB1.Scan(btn); WB1.Scan(btn);
@ -117,9 +120,7 @@ void main()
void Draw_Window() void Draw_Window()
{ {
WindowRedrawStatus(1);
DefineAndDrawWindow(215,100,640,480,0x73,0x00E4DFE1,0,0,0); DefineAndDrawWindow(215,100,640,480,0x73,0x00E4DFE1,0,0,0);
WindowRedrawStatus(2);
GetProcessInfo(#Form, SelfInfo); GetProcessInfo(#Form, SelfInfo);
IF (Form.height==GetSkinWidth()+3) //åñëè ñâåğíóòî â çàãîëîâîê, íè÷åãî íå ğèñóåì IF (Form.height==GetSkinWidth()+3) //åñëè ñâåğíóòî â çàãîëîâîê, íè÷åãî íå ğèñóåì
@ -131,6 +132,8 @@ void Draw_Window()
IF (Form.width<280) MoveSize(OLD,OLD,280,OLD); IF (Form.width<280) MoveSize(OLD,OLD,280,OLD);
PutPaletteImage(#toolbar,200,42,0,0,8,#toolbar_pal); PutPaletteImage(#toolbar,200,42,0,0,8,#toolbar_pal);
if (GetProcessSlot(downloader_id)<>0) PutImage(#stop_btn,24,24,88,10);
DrawBar(200,0,onLeft(200,9),43,0xE4DFE1); //çàêğàøèâàåì ôîí ïîä òóëáàğîì DrawBar(200,0,onLeft(200,9),43,0xE4DFE1); //çàêğàøèâàåì ôîí ïîä òóëáàğîì
DrawBar(0,42,onLeft(5,4),1,0xE2DBDC); //âûïóêëîñòü DrawBar(0,42,onLeft(5,4),1,0xE2DBDC); //âûïóêëîñòü
DrawBar(0,43,onLeft(5,4),1,0xD2CED0); //âûïóêëîñòü DrawBar(0,43,onLeft(5,4),1,0xD2CED0); //âûïóêëîñòü

View File

@ -1,4 +1,11 @@
24.02.12 -- v0.72 -- 11.? Ęá 27.02.12 -- v0.75 -- 11.? Кб
- при закрытии HTMLv, downloader тоже завершается;
- невозможно запустить больше одного downloader'a;
- отображение процесса загрузки страницы из Интернета через кнопочку "остановить", надпись "Loading...", возможность прервать процесс;
- обновление страницы из Интернета приводит к её повторной загрузке.
24.02.12 -- v0.71 -- 11.? Кб
- просто починил эти самые интернеты. - просто починил эти самые интернеты.

View File

@ -1,27 +1,22 @@
==О программе HTMLv== ==О программе HTMLv==
HTMLv - это текстовый браузер, а так же просмотровщик веб-страниц. Пока что HTMLv - это текстовый браузер, а так же просмотровщик веб-страниц. Пока что
поддерживает только форматирование текста с некоторыми вложеными параметрами. поддерживает только форматирование текста с некоторыми вложеными параметрами.
Программа написана на языке... среднего уровня C--. Обсуждение программы здесь: Программа написана на языке C--. В нём можно писать программы, как на Си, так и на асме, притом их там удобно совмещать.
Обсуждение программы здесь:
http://board.kolibrios.org/viewtopic.php?f=9&t=1075 http://board.kolibrios.org/viewtopic.php?f=9&t=1075
Для поиска нужно в адресную строку ввести запрос, нажать Ctrl+Enter (или кнопку).
==Установка== ==Установка==
Сама программа может быть запущена откуда угодно. Сама программа может быть запущена откуда угодно. Для работы с Интернетом необходим downloader.
==Интернет== ==Интернет==
Если ваша сетевая карта не поддерживается Колибри нативно - не беда. Если ваша сетевая карта не поддерживается Колибри нативно - не беда:
Она поддерживается в Qemu и VirtualBox :) она поддерживается в Qemu и VirtualBox.
==Проблемы== ==Проблемы==
1. Связаны со строкой адреса. Отписывайтесь в теме, если что-то не так. Ссылка выше.
box_lib.obj следует положить в /sys/lib/
2. Страницы из Интернета не хотят загружаться.
ZEROCONF.INI [настройки сети для Qemu и VBox] положить в /sys/network/
downloader положить в /sys/
==Авторы== ==Авторы==
Leency - разработка, дизайн. Leency - разработка, дизайн.
@ -30,6 +25,4 @@ Veliant -
Barsuk - программа downloader, код работы с ней. Barsuk - программа downloader, код работы с ней.
Lrz - компонент EditBox. Lrz - компонент EditBox.
Nable - оптимизации. Nable - оптимизации.
lev - оптимизации, некоторые доработки. lev - оптимизации, некоторые доработки.
Спасибо за использование :)

View File

@ -4,6 +4,10 @@
//èäåÿ - ëåâûå ôàéëû îòêðûâàòü ñîîòâåòñòâóþùèìè ïðîãàìè //èäåÿ - ëåâûå ôàéëû îòêðûâàòü ñîîòâåòñòâóþùèìè ïðîãàìè
//ol - öèôåðêè //ol - öèôåðêè
//èç õòòï-ëîàä â ðåàäõòìë
//BrowserHistory.AddUrl(); -> ïðîâåðêà íå = ëè íîâûé àäðåñ ñòàðîìó è äîáàâèòü ïîóìîë÷àíèþ âåçäå
int downloader_id; int downloader_id;
dword j, dword j,
@ -15,7 +19,7 @@ dword j,
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://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.71"; char version[]=" Text-based Browser 0.75";
struct TWebBrowser { struct TWebBrowser {
@ -50,29 +54,29 @@ char line[330],
options[1000]; options[1000];
#include "include\history.h--" #include "include\history.h"
#include "include\colors.h--" #include "include\colors.h"
#include "include\unicode_tags.h--" #include "include\unicode_tags.h"
#include "include\some_code.h"
void TWebBrowser::Scan(dword id) { void TWebBrowser::Scan(dword id) {
if (id > 399) if (id > 399)
{ {
j = 0;
FOR(i = 0; i <= id - 401; i++) {
do j++;
while (page_links[j] <>'|');
}
page_links[j] = 0x00;
copystr(#page_links[find_symbol(#page_links, '|')], #URL);
//Lee 21.02 { //Lee 21.02 {
IF (URL[0] == '#') { //ìû íå óìååì ïåðåõîäèòü ïî ññûëêå âíóòðè äîêóìåíòà. Ïîêà ÷òî... IF (URL[0] == '#') { //ìû íå óìååì ïåðåõîäèòü ïî ññûëêå âíóòðè äîêóìåíòà. Ïîêà ÷òî...
copystr(#editURL, #URL); copystr(#editURL, #URL);
return; return;
} }
URL[find_symbol(#URL, '#')-1] = 0x00; //çàãëóøêà, ëó÷øå, ÷åì íè÷åãî (õàáð, íàïðèìåð, áóäåò ðàáîòàòü)
GetURLfromPageLinks(id);
URL[find_symbol(#URL, '#')-1] = 0x00; //çàãëóøêà, ëó÷øå, ÷åì íè÷åãî (õàáð, íàïðèìåð, áóäåò ðàáîòàòü)
GetNewUrl(); GetNewUrl();
BrowserHistory.AddUrl();
if (!strcmp(get_URL_part(5),"http:"))) HttpLoad(); if (!strcmp(get_URL_part(5),"http:"))) HttpLoad();
//Lee 21.02 } //Lee 21.02 }
@ -101,8 +105,16 @@ void TWebBrowser::Scan(dword id) {
case 054: //F5 case 054: //F5
IF(edit1.flags == 66) break; IF(edit1.flags == 66) break;
case REFRESH: case REFRESH:
if (GetProcessSlot(downloader_id)<>0)
{
KillProcess(downloader_id);
Pause(20);
Draw_Window();
return;
}
copystr(#URL, #editURL); copystr(#URL, #editURL);
Draw_Window(); 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 íîâàÿ âêëàäêà
@ -165,6 +177,7 @@ void TWebBrowser::Scan(dword id) {
void GetNewUrl(){ void GetNewUrl(){
IF (!strcmp(get_URL_part(2),"./")) copystr(#URL+1,#URL); IF (!strcmp(get_URL_part(2),"./")) copystr(#URL+1,#URL);
//IF (!strcmp(get_URL_part(3),"../")) //IF (!strcmp(get_URL_part(3),"../"))
//{ //{
// //DrawTitle(#URL+7); // //DrawTitle(#URL+7);
@ -185,12 +198,19 @@ void GetNewUrl(){
} }
} }
void HttpLoad() void HttpLoad()
{ {
za_kadrom = 0;
copystr(#URL, #editURL);
KillProcess(downloader_id); //óáèâàåì ñòàðûé ïðîöåññ
DeleteFile(#download_path); DeleteFile(#download_path);
IF (URL[strlen(#URL)-1]=='/') URL[strlen(#URL)-1]=''; IF (URL[strlen(#URL)-1]=='/') URL[strlen(#URL)-1]='';
downloader_id = RunProgram("/sys/network/downloader", #URL); downloader_id = RunProgram("/sys/network/downloader", #URL);
IF (downloader_id<0) RunProgram("@notify", "Error running Downloader. Internet unavilable."); IF (downloader_id<0) RunProgram("@notify", "Error running Downloader. Internet unavilable.");
Draw_Window();
} }
@ -202,7 +222,7 @@ void ReadHtml()
file_size stdcall (#URL); file_size stdcall (#URL);
filesize = EBX; filesize = EBX;
if (!filesize) /*{Pause(200); ReadHtml();}*/ return; //Lee 22.09 if (!filesize) /*{Pause(200); ReadHtml();}*/ 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:")))
@ -217,31 +237,28 @@ void TWebBrowser::ShowPage(dword adress) {
max_kolvo_stolbcov = width - 30 / 6; max_kolvo_stolbcov = width - 30 / 6;
max_kolvo_strok = height - 3 / 10 - 2; max_kolvo_strok = height - 3 / 10 - 2;
copystr(#version, #header); copystr(#version, #header);
IF (!WindowRePaint) {
za_kadrom = 0;
copystr(#URL, #editURL);
BrowserHistory.AddUrl();
}
edit1.size = edit1.pos = strlen(#editURL); edit1.size = edit1.pos = strlen(#editURL);
edit_box_draw stdcall(#edit1); //ðèñóåì ñòðîêó àäðåñà edit_box_draw stdcall(#edit1); //ðèñóåì ñòðîêó àäðåñà
//LETS_LOAD //LETS_LOAD
ReadHtml(); ReadHtml();
IF (!filesize) return; //Lee 22.09 if (!filesize)
{
wintodos(buf); DrawBar(left, top, width+2, height, 0xFFFFFF); //çàêðàøèâàåì âñ¸ äîíèçó
ParseHTML(buf, filesize); if (GetProcessSlot(downloader_id)<>0) WriteText(left + 10, top + 18, 0x80, 0, "Loading...", 0);
IF(!strlen(buf)) { else
IF (strcmp(get_URL_part(5),"http:")==0)
{ {
PutImage(#stop_btn, 24, 24, 88, 10);
WriteText(left + 10, top + 18, 0x80, 0, "Loading...", 0);
}
ELSE
WriteText(left + 10, top + 18, 0x80, 0, "Page not found. May be, URL contains some errors.", 0); WriteText(left + 10, top + 18, 0x80, 0, "Page not found. May be, URL contains some errors.", 0);
if (!strcmp(get_URL_part(5),"http:"))) WriteText(left + 10, top + 32, 0x80, 0, "Or Internet unavilable for your configuration.", 0);
}
DrawTitle(#version); //?
return;
} }
DrawBar(left, top, width-15, 15, 0xFFFFFF); //çàêðàøèâàåì ïåðâóþ ñòðîêó
wintodos(buf);
ParseHTML(buf, filesize);
IF (!strcmp(#version, #header)) DrawTitle(#header); IF (!strcmp(#version, #header)) DrawTitle(#header);
} }
@ -263,7 +280,6 @@ void TWebBrowser::ParseHTML(dword bword, fsize){
IF(!strcmp(#URL + strlen(#URL) - 4, ".txt")) pre_text = 1; //çà÷¸òíîå îòîáðàæåíèå òåêñòà IF(!strcmp(#URL + strlen(#URL) - 4, ".txt")) pre_text = 1; //çà÷¸òíîå îòîáðàæåíèå òåêñòà
//IF(!strcmp(#URL + strlen(#URL) - 4, ".rtf")) pre_text = 1; //IF(!strcmp(#URL + strlen(#URL) - 4, ".rtf")) pre_text = 1;
IF(!strcmp(#URL + strlen(#URL) - 4, ".mht")) ignor_text = 1; IF(!strcmp(#URL + strlen(#URL) - 4, ".mht")) ignor_text = 1;
IF(za_kadrom == 0) || (WindowRePaint) DrawBar(left, top, width - 15, 15, 0xFFFFFF); //çàêðàøèâàåì ïåðâóþ ñòðîêó
for (; buf + fsize > bword; bword++;) { for (; buf + fsize > bword; bword++;) {
bukva = ESBYTE[bword]; bukva = ESBYTE[bword];
switch (bukva) { switch (bukva) {
@ -688,6 +704,10 @@ void TWebBrowser::WhatTextStyle(int left1, top1, width1) {
img_draw stdcall (image,left1-5,top1+10,w, h,0,img_za_kadrom); img_draw stdcall (image,left1-5,top1+10,w, h,0,img_za_kadrom);
DrawBar(left1+w - 5, top1 + 10, width1-w + 5, h, 0xFFFFFF); DrawBar(left1+w - 5, top1 + 10, width1-w + 5, h, 0xFFFFFF);
} }
/*else
{
IF (strcmp(#parametr,"alt=")==0) copystr(#options,#line+strlen(#line));
}*/
return; return;
} }
@ -740,7 +760,7 @@ void TWebBrowser::DrawScroller() {
DrawFlatButton(left + width - 15, top, 16, 16, ID1, 0xE4DFE1, "\x18"); DrawFlatButton(left + width - 15, top, 16, 16, ID1, 0xE4DFE1, "\x18");
IF(count <= max_kolvo_strok) { IF(count <= max_kolvo_strok) {
DrawBar(left + width - 14, top + 17, 16, height - 34, 0xCED0D0); DrawBar(left + width - 14, top, 16, height - 17, 0xCED0D0);
return; return;
} }

View File

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

View File

@ -1,51 +0,0 @@
int GetTime()
{
$mov eax, 26;
$mov ebx, 9;
$int 0x40;
return EAX;
}
/*******************************************************************************
ÔÓÍÊÖÈß ÎÏÐÅÄÅËÅÍÈß FPS
x,y - êîîðäèíàòû âûâîäà FPS íà îêíî
âîçâðàùàåò âðåìÿ â ñîòûõ äîëÿõ ñåêóíäû çàòðà÷èâàåìîå íà 1 öèêë
*/
int time1=0;
int time2=0;
int fps1=0;
int timerend=0;
int FPS()
{
int tr;
time1=GetTime();
if (timerend==0)
{
time2=time1;
timerend=time1;
}
tr = time1 - timerend;
if (time1 - time2 < 100) //åñëè ïðîøëî ìåíåå 1 ñåêóíäû
{ //óâåëè÷èâàåì ñ÷åò÷èê fps
fps1++;
}
else
{
//âûâîäèì ÷èñëî fps
DrawTitle(IntToStr(fps1));
fps1=0;
time2=time1;
}
timerend=time1;
return tr;
}
//******************************************************************************

View File

@ -1,4 +1,3 @@
struct UrlsHistory { struct UrlsHistory {
byte UrlHistory[6000]; byte UrlHistory[6000];
void AddUrl(); void AddUrl();
@ -10,6 +9,9 @@ UrlsHistory BrowserHistory;
void UrlsHistory::GoBack() void UrlsHistory::GoBack()
{ {
//WriteDebug(#UrlHistory);
j = strlen(#UrlHistory); j = strlen(#UrlHistory);
WHILE(UrlHistory[j] <>'|') && (j > 0) j--; WHILE(UrlHistory[j] <>'|') && (j > 0) j--;
IF (j > 0) UrlHistory[j] = 0x00; IF (j > 0) UrlHistory[j] = 0x00;
@ -28,10 +30,7 @@ void UrlsHistory::AddUrl()
copystr(#URL, #UrlHistory + strlen(#UrlHistory)); copystr(#URL, #UrlHistory + strlen(#UrlHistory));
} }
dword UrlsHistory::CurrentUrl() dword UrlsHistory::CurrentUrl()
{ {
EAX=#UrlHistory + find_symbol(#UrlHistory, '|'); EAX=#UrlHistory + find_symbol(#UrlHistory, '|');
} }

View File

@ -56,3 +56,15 @@ shift=-2;
} }
mem_Free(italic_buf); mem_Free(italic_buf);
} }
void GetURLfromPageLinks(int id) //столько бреда, потому что нельзя создать массив стрингов
{
j = 0;
for (i = 0; i <= id - 401; i++)
{
do j++;
while (page_links[j] <>'|');
}
page_links[j] = 0x00;
copystr(#page_links[find_symbol(#page_links, '|')], #URL);
}