HTMLv 0.95: fixed bug in utf-decoding, in opening program with params, with images, complete improvements in strings.h (now it C-like library)

git-svn-id: svn://kolibrios.org@2844 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Kirill Lipatov (Leency) 2012-07-03 17:24:00 +00:00
parent 0d1782e8b0
commit 2a73669575
5 changed files with 295 additions and 138 deletions

View File

@ -20,9 +20,9 @@
#include "img\URLgoto.txt"; #include "img\URLgoto.txt";
//ïåðåìåííûå #define URL param
char URL[4096],
editURL[4096], char editURL[4096],
page_links[12000], page_links[12000],
header[300]; header[300];
@ -34,7 +34,12 @@ int 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;
#define WIN_W 640
#define WIN_H 480
dword stak[100]; //ìåíþ ÏÊÌ dword stak[100]; //ìåíþ ÏÊÌ
mouse m; mouse m;
@ -55,11 +60,14 @@ void main()
load_dll2(#abox_lib, #boxlib_init,0); load_dll2(#abox_lib, #boxlib_init,0);
//load_dll2(libtruetype, #truetype,0); //load_dll2(libtruetype, #truetype,0);
if (param) strcpy(#URL, #param); if (!URL) strcpy(#URL, "/sys/index.htm");
else strcpy(#URL, "/sys/index.htm");
strcpy(#editURL, #URL); strcpy(#editURL, #URL);
lines.column_max = 101; Form.width=WIN_W;
Form.height=WIN_H;
SetElementSizes();
WB1.OpenPage(); WB1.OpenPage();
SetEventMask(0x27); SetEventMask(0x27);
@ -161,11 +169,21 @@ void main()
} }
} }
void SetElementSizes()
{
edit1.width=Form.width-266;
WB1.top=44;
WB1.width=Form.width-13;
WB1.height=onTop(43,5);
lines.column_max = WB1.width - 30 / 6;
lines.visible = WB1.height - 3 / 10 - 2;
}
void Draw_Window() void Draw_Window()
{ {
int j; int j;
DefineAndDrawWindow(215,100,640,480,0x73,0x00E4DFE1,0,0,0); DefineAndDrawWindow(215,100,WIN_W,WIN_H,0x73,0x00E4DFE1,0,0,0);
GetProcessInfo(#Form, SelfInfo); GetProcessInfo(#Form, SelfInfo);
if (Form.status_window>2) //åñëè ñâåðíóòî â çàãîëîâîê, íè÷åãî íå ðèñóåì if (Form.status_window>2) //åñëè ñâåðíóòî â çàãîëîâîê, íè÷åãî íå ðèñóåì
@ -189,13 +207,7 @@ void Draw_Window()
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; SetElementSizes();
WB1.top=44;
WB1.width=Form.width-13;
WB1.height=onTop(43,5);
lines.column_max = WB1.width - 30 / 6;
lines.visible = WB1.height - 3 / 10 - 2;
WB1.ShowPage(); WB1.ShowPage();
DefineButton(scroll1.start_x+1, scroll1.start_y+1, 16, 16, ID1+BT_HIDE, 0xE4DFE1); DefineButton(scroll1.start_x+1, scroll1.start_y+1, 16, 16, ID1+BT_HIDE, 0xE4DFE1);

View File

@ -5,11 +5,10 @@ dword
buf, buf,
filesize, filesize,
blink; blink;
int i;
char download_path[]="/rd/1/.download"; char download_path[]="/rd/1/.download";
char search_path[]="http://nigma.ru/index.php?s="; char search_path[]="http://nigma.ru/index.php?s=";
char version[]=" Text-based Browser 0.94z"; char version[]=" Text-based Browser 0.95";
struct TWebBrowser { struct TWebBrowser {
@ -21,6 +20,7 @@ struct TWebBrowser {
void ShowPage(); void ShowPage();
void ParseHTML(dword); void ParseHTML(dword);
void WhatTextStyle(int left1, top1, width1); void WhatTextStyle(int left1, top1, width1);
void DrawPage();
void DrawScroller(); void DrawScroller();
}; };
@ -48,7 +48,6 @@ char line[500],
parametr[1200], parametr[1200],
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"
@ -58,7 +57,7 @@ char line[500],
void TWebBrowser::Scan(int id) void TWebBrowser::Scan(int id)
{ {
if (id > 399) if (id >= 400)
{ {
GetURLfromPageLinks(id); GetURLfromPageLinks(id);
@ -247,6 +246,7 @@ void TWebBrowser::OpenPage()
KillProcess(downloader_id); KillProcess(downloader_id);
strcpy(#editURL, #URL); strcpy(#editURL, #URL);
BrowserHistory.AddUrl(); BrowserHistory.AddUrl();
strcpy(#header, #version);
if (!strcmp(get_URL_part(5),"http:"))) if (!strcmp(get_URL_part(5),"http:")))
{ {
KillProcess(downloader_id); //óáèâàåì ñòàðûé ïðîöåññ KillProcess(downloader_id); //óáèâàåì ñòàðûé ïðîöåññ
@ -286,20 +286,21 @@ void TWebBrowser::ShowPage()
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); if (!strcmp(get_URL_part(5),"http:"))) WriteText(left + 10, top + 32, 0x80, 0, "Or Internet unavilable for your configuration.", 0);
} }
DrawTitle(#version); //? //return;
return;
} }
else
ParseHTML(buf); ParseHTML(buf);
IF (!strcmp(#version, #header)) DrawTitle(#header);
if (!header) strcpy(#header, #version);
if (!strcmp(#version, #header)) DrawTitle(#header);
} }
void TWebBrowser::ParseHTML(dword bword){ void TWebBrowser::ParseHTML(dword bword){
word bukva[1]; word bukva[2];
int j, perenos_num; int j, perenos_num;
byte ignor_param = 0; byte ignor_param;
char temp[768]; char temp[768];
stroka = -lines.first; stroka = -lines.first;
@ -314,7 +315,7 @@ void TWebBrowser::ParseHTML(dword bword){
bg_color = 0xFFFFFF; bg_color = 0xFFFFFF;
line = ''; line = '';
strcpy(#page_links,"|"); strcpy(#page_links,"|");
strcpy(#header,#version); strcpy(#header, #version);
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, ".mht")) ignor_text = 1; if (!strcmp(#URL + strlen(#URL) - 4, ".mht")) ignor_text = 1;
@ -339,7 +340,7 @@ void TWebBrowser::ParseHTML(dword bword){
tab_len=strlen(#line)/8; tab_len=strlen(#line)/8;
tab_len=tab_len*8; tab_len=tab_len*8;
tab_len=8+tab_len-strlen(#line); tab_len=8+tab_len-strlen(#line);
for (i=0; i<tab_len; i++;) strcat(#line," "); for (j=0; j<tab_len; j++;) strcat(#line," ");
break; break;
} }
case 0x0d: case 0x0d:
@ -347,15 +348,17 @@ void TWebBrowser::ParseHTML(dword bword){
goto DEFAULT_MARK; goto DEFAULT_MARK;
case '<': case '<':
bword++; //ïðîìîòàåì ñèìâîë < bword++; //ïðîìîòàåì ñèìâîë <
tag = parametr = tagparam = ignor_param = 0;
if (ESBYTE[bword] == '!') //ôèëüòðàöèÿ âíóòðè <!-- -->, äåðçêî if (ESBYTE[bword] == '!') //ôèëüòðàöèÿ âíóòðè <!-- -->, äåðçêî
{ {
bword++; bword++;
if (ESBYTE[bword] == '-') { if (ESBYTE[bword] == '-')
HH_: {
HH_:
do do
{ {
bword++; bword++;
if (bword >= buf + filesize) break 1; if (buf + filesize <= bword) break 2;
} }
while (ESBYTE[bword] <>'-'); while (ESBYTE[bword] <>'-');
@ -378,19 +381,18 @@ void TWebBrowser::ParseHTML(dword bword){
} }
bword++; bword++;
} }
lowcase(#tag); strlwr(#tag);
lowcase(#tagparam); strlwr(#tagparam);
if (tag[strlen(#tag)-1]=='/') tag[strlen(#tag)-1]=''; //íåáîëüøîé ôèêñ äëÿ ðàáîòû ñ XHTML-òåãàìè òèïà br/ if (tag[strlen(#tag)-1]=='/') tag[strlen(#tag)-1]=''; //for br/
if (strlen(#tagparam) > 0) && (strlen(#tagparam) < 4000) GetNextParam(); if (tagparam) && (strlen(#tagparam) < 4000) GetNextParam();
//while (tagparam)
//{
// GetNextParam();
WhatTextStyle(left + 5, stroka * 10 + top + 5, width - 20); //îáðàáîòêà òåãîâ
//}
line = tag = parametr = tagparam = ignor_param = 0; //âñ¸ îáíóëÿåì DrawPage();
line=0;
if (tag) WhatTextStyle(left + 5, stroka * 10 + top + 5, width - 20); //îáðàáîòêà òåãîâ
tag = parametr = tagparam = ignor_param = '\0';
break; break;
case '=': //ïîääåðæêà øàéòàíñêîé êîäèðîâêè ñòðàíèö, ñîõðàí¸ííûõ ÷åðåç ÈÅ7 case '=': //ïîääåðæêà øàéòàíñêîé êîäèðîâêè ñòðàíèö, ñîõðàí¸ííûõ ÷åðåç ÈÅ7
if (strcmp(#URL + strlen(#URL) - 4, ".mht")<>0) goto DEFAULT_MARK; if (strcmp(#URL + strlen(#URL) - 4, ".mht")<>0) goto DEFAULT_MARK;
@ -406,10 +408,10 @@ void TWebBrowser::ParseHTML(dword bword){
if (bukva) goto DEFAULT_MARK; if (bukva) goto DEFAULT_MARK;
break; break;
case '&': //îáðàáîòêà òåãîâ òèïà &nbsp; case '&': //&nbsp; and so on
bword++; bword++;
tag=''; tag=0;
for (j=0; (ESBYTE[bword] <>';') && (j < 7); j++, bword++;) for (j=0; (ESBYTE[bword]<>';') && (j<7); j++, bword++;)
{ {
bukva = ESBYTE[bword]; bukva = ESBYTE[bword];
strcat(#tag, #bukva); strcat(#tag, #bukva);
@ -424,14 +426,15 @@ void TWebBrowser::ParseHTML(dword bword){
} }
} }
rez = StrToInt(#tag + 1) - 1040; rez = atoi(#tag + 1) - 1040;
if (tag[1] == '1') && (rez>=0) && (rez<=72) && (strlen(#tag) == 5) if (tag[1] == '1') && (rez>=0) && (rez<=72) && (strlen(#tag) == 5)
{ {
bukva = unicode_chars[rez]; bukva = unicode_chars[rez];
GOTO DEFAULT_MARK; //îáðàáàòûâàåì áóêâó //GOTO DEFAULT_MARK; //îáðàáàòûâàåì áóêâó ëó÷øå íàâåðíî strcat(#line, unicode_tags[j+1]); è break 1;
} strcat(#line, #bukva);
break;
}
//debug(#tag); //òýã íå íàéäåí - âûâîäèì íà äîñêó îòëàäêè
strcat(#line,#tag); //âûâîäèì íà ýêðàí íåîáðàáîòàííûé òåã, òàê áðàóçåðû çà÷åì-òî äåëàþò strcat(#line,#tag); //âûâîäèì íà ýêðàí íåîáðàáîòàííûé òåã, òàê áðàóçåðû çà÷åì-òî äåëàþò
break; break;
default: default:
@ -445,13 +448,13 @@ void TWebBrowser::ParseHTML(dword bword){
line[perenos_num] = 0x00; line[perenos_num] = 0x00;
NEXT_MARK: NEXT_MARK:
if (stroka >= lines.visible) && (lines.first <>0) break 1; //óõîäèì... if (stroka >= lines.visible) && (lines.first <>0) break 1; //óõîäèì...
WhatTextStyle(left + 5, stroka * 10 + top + 5, width - 20); //âûâîä ñòðîêè DrawPage();
TextGoDown(left + 5, stroka * 10 + top + 5, width - 20); //çàêðàøèâàåì ñëåäóùóþ ñòðîêó TextGoDown(left + 5, stroka * 10 + top + 5, width - 20); //çàêðàøèâàåì ñëåäóùóþ ñòðîêó
strcpy(#line, #temp); strcpy(#line, #temp);
} }
if (!pre_text) && (bukva == ' ') && (!stolbec) && (!line) break; if (!pre_text) && (bukva == ' ') && (!stolbec) && (!line) break;
strcat(#line, #bukva); if (strlen(#line)<sizeof(line)) strcat(#line, #bukva);
} }
} }
if (lines.visible * 10 + 25 <= height) if (lines.visible * 10 + 25 <= height)
@ -459,16 +462,74 @@ void TWebBrowser::ParseHTML(dword bword){
if (stroka * 10 + 15 <= height) if (stroka * 10 + 15 <= height)
DrawBar(left, stroka * 10 + top + 15, width - 15, -stroka * 10 + height - 15, bg_color); //çàêðàøèâàåì âñ¸ äî êîíöà DrawBar(left, stroka * 10 + top + 15, width - 15, -stroka * 10 + height - 15, bg_color); //çàêðàøèâàåì âñ¸ äî êîíöà
if (lines.first == 0) lines.all = stroka; if (lines.first == 0) lines.all = stroka;
debug ("Pre end - anchor");
if (anchor) if (anchor)
{ {
//åñëè ïîñðåäè òåêñòà ïîÿâèòñÿ íîâûé ÿêîðü - áóäåò áåñêîíå÷íûé öèêë
anchor=''; anchor='';
lines.first=anchor_line_num; lines.first=anchor_line_num;
ParseHTML(buf); ParseHTML(buf);
} }
debug("End parsing"); debug("End parsing");
DrawScroller(); //ðèñóåì ñêðîëë
DrawScroller();
}
void TWebBrowser::DrawPage() //ðåçàòü çäåñü!!1!
{
int start_x, start_y, line_length;
char temp[sizeof(line)];
if (!header) //&& (tag)
{
if (strlen(#version)+strlen(#line)+2>sizeof(header))
{
//line = 123456789
//header = 1234
//line = 56789
debug("too long header");
strcpy(#temp, #line);
temp[sizeof(header)-strlen(#version)-2]=0;
strcpy(#header, #temp);
strcpy(#line, #line+strlen(#temp));
}
else
{
debug("normal header");
strcpy(#header, #line);
line=0;
}
strcat(#header, " -");
strcat(#header, #version);
return;
}
if (stroka >= 0) && (stroka - 2 < lines.visible) && (line) && (!anchor)
{
if (!stroka) && (!stolbec)
{
DrawBar(left, top, width-15, 15, bg_color); //çàêðàøèâàåì ïåðâóþ ñòðîêó
first_line_drawed=1;
}
start_x=stolbec * 6 + left+5;
start_y=stroka * 10 + top + 5;
line_length=strlen(#line)*6;
WriteText(start_x, start_y, 0x80, text_colors[text_color_index], #line, 0);
//line_length = get_length stdcall (#line,-1,16,line_length);
//text_out stdcall (#line, -1, 17, text_colors[text_color_index], start_x, start_y-2);
IF (b_text) { $add ebx, 1<<16 $int 0x40 }
IF (i_text) Skew(start_x, start_y, line_length+6, 10);
IF (s_text) DrawBar(start_x, start_y + 4, line_length, 1, text_colors[text_color_index]);
IF (u_text) DrawBar(start_x, start_y + 8, line_length, 1, text_colors[text_color_index]);
IF (link) {
DefineButton(start_x-2, start_y, line_length + 3, 9, blink + BT_HIDE, 0xB5BFC9);
DrawBar(start_x, start_y + 8, line_length, 1, text_colors[text_color_index]);
}
stolbec += strlen(#line);
}
} }
@ -478,61 +539,44 @@ void TWebBrowser::WhatTextStyle(int left1, top1, width1) {
dword image; dword image;
char temp[4096]; char temp[4096];
int w, h, img_lines_first, line_length; int w=0, h=0, img_lines_first=0;
//ïðîâåðÿåì òåã îòêðûâàåòñÿ èëè çàêðûâàåòñÿ //ïðîâåðÿåì òåã îòêðûâàåòñÿ èëè çàêðûâàåòñÿ
IF(tag[0] == '/') if (tag[0] == '/')
{ {
rez = 0; rez = 0;
strcpy(#tag, #tag+1); strcpy(#tag, #tag+1);
} }
ELSE else
rez = 1; rez = 1;
// if (!chTag("html")) {
IF(!chTag("html")) {
IF(!strcmp(#URL + strlen(#URL) - 4, ".mht")) IF (rez==0) ignor_text = 1; ELSE ignor_text = 0; IF(!strcmp(#URL + strlen(#URL) - 4, ".mht")) IF (rez==0) ignor_text = 1; ELSE ignor_text = 0;
return; return;
} }
IF(!chTag("script")) || (!chTag("style")) || (!chTag("binary")) ignor_text = rez;
if(!chTag("title")) && (!rez) if (!chTag("script")) || (!chTag("style")) || (!chTag("binary")) ignor_text = rez;
if(!chTag("title"))
{ {
strcpy(#header, #line); if (rez)
strcat(#header, " -"); {
strcat(#header, #version); header=0;
if (stroka==0) DrawTitle(#header); }
else //òåã çàêðûëñÿ - âûâåëè ñòðîêó
{
if (stroka==0) DrawTitle(#header);
}
return; return;
} }
IF (ignor_text) return;
if (ignor_text) return;
IF(!chTag("q")) strcat(#line, "\""); IF(!chTag("q")) strcat(#line, "\"");
//âûâîä íà ýêðàí
if (stroka >= 0) && (stroka - 2 < lines.visible) && (line) && (!anchor)
{
if (stroka==0) && (stolbec==0)
{
DrawBar(left, top, width-15, 15, bg_color); //çàêðàøèâàåì ïåðâóþ ñòðîêó
first_line_drawed=1;
}
line_length=strlen(#line)*6;
WriteText(stolbec * 6 + left1, top1, 0x80, text_colors[text_color_index], #line, 0); //ìîæåò òóò ðèñîâàòü áåëóþ ñòðîêó?
//line_length = get_length stdcall (#line,-1,16,line_length);
//text_out stdcall (#line, -1, 17, text_colors[text_color_index], stolbec * 6 + left1, top1-2);
IF (b_text) { $add ebx, 1<<16 $int 0x40 }
IF (i_text) Skew(stolbec * 6 + left1, top1, line_length+6, 10); //íàêëîííûé òåêñò
IF (s_text) DrawBar(stolbec * 6 + left1, top1 + 4, line_length, 1, text_colors[text_color_index]); //çà÷¸ðêíóòûé
IF (u_text) DrawBar(stolbec * 6 + left1, top1 + 8, line_length, 1, text_colors[text_color_index]); //ïîä÷¸ðêíóòûé
IF (link) {
DefineButton(stolbec * 6 + left1 - 2, top1, line_length + 3, 9, blink + BT_HIDE, 0xB5BFC9); //
DrawBar(stolbec * 6 + left1, top1 + 8, line_length, 1, text_colors[text_color_index]);
}
}
IF(!tag) return;
stolbec += strlen(#line);
if (anchor) && (!strcmp(#parametr, "id=")) //î÷åíü ïëîõî!!! ïîòîìó ÷òî åñëè íå ïîñëåäíèé òåã, ðàáîòàòü íå áóäåò if (anchor) && (!strcmp(#parametr, "id=")) //î÷åíü ïëîõî!!! ïîòîìó ÷òî åñëè íå ïîñëåäíèé òåã, ðàáîòàòü íå áóäåò
{ {
@ -541,7 +585,7 @@ void TWebBrowser::WhatTextStyle(int left1, top1, width1) {
anchor_line_num=lines.first+stroka; anchor_line_num=lines.first+stroka;
} }
} }
if (!chTag("body")) if (!chTag("body"))
{ {
BODY_MARK: BODY_MARK:
@ -595,13 +639,14 @@ void TWebBrowser::WhatTextStyle(int left1, top1, width1) {
GOTO _A_MARK; GOTO _A_MARK;
} }
} }
ELSE { else {
link = 0; link = 0;
IF(text_color_index > 0) text_color_index--; IF(text_color_index > 0) text_color_index--;
} }
return; return;
} }
if (!chTag("font")) if (!chTag("font"))
{ {
if (rez) if (rez)
@ -748,7 +793,8 @@ void TWebBrowser::WhatTextStyle(int left1, top1, width1) {
h=WB1.top+WB1.height-top1-15; h=WB1.top+WB1.height-top1-15;
} }
IF (h<=0) return; if (h<=0) return;
if (anchor) return;
img_draw stdcall (image,left1-5,top1+10,w, h,0,img_lines_first); img_draw stdcall (image,left1-5,top1+10,w, h,0,img_lines_first);
DrawBar(left1+w - 5, top1 + 10, width1-w + 5, h, bg_color); DrawBar(left1+w - 5, top1 + 10, width1-w + 5, h, bg_color);

View File

@ -52,16 +52,75 @@
</pre> </pre>
<!--этого текста здесь <нет>--> <!--этого текста здесь <нет>-->
<a href='/sys/index.htm'>Index.htm</a><br>
<a href="/sys/kernel.mnt">Kernel.mnt</a><br>
<a href="index.htm#2.1.4">index.htm#2.1.4</a><br>
<a href="#2.1.4">#2.1.4</a><br>
<a href="background.gif">Ôîíîâàÿ êàðòèíêà</a><br>
<a href='1111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111111
'>Î÷åíü äëèííûé àäðåñ ñòðîêè</a><br>
<hr color="#758999"> <hr color="#758999">
В этом тексте есть переход на следующую строку, но браузер В этом тексте есть переход на следующую строку, но браузер
его должен проигнорировать. Еще много пробелов. А тут есть его должен проигнорировать. Еще много пробелов. А тут есть
табы. Кое-какие символы: &quot; &amp; &lt; &gt; &#149; &nbsp; &copy; &reg; &bdquo; &ldquo; &#151; Їжачок іншого боку р. Євфрат з'їв ґрунт та єврейський ґербалайф. табы. Кое-какие символы: &quot; &amp; &lt; &gt; &#149; &nbsp; &copy; &reg; &bdquo; &ldquo; &#151; Їжачок іншого боку р. Євфрат з'їв ґрунт та єврейський ґербалайф.
<hr color="grey"> <hr color="grey">
<p><a href='index.htm'>Íà ãëàâíóþ ñòðàíèöó index.htm</a></p>
<p><a href="index.htm#2.1.4">index.htm#2.1.4</a></p>
<p><a href="#2.1.4">#2.1.4</a></p>
<p><a href="background.gif">Ôîíîâàÿ êàðòèíêà</a></p>
</body> </body>
</html> </html>

View File

@ -1,5 +1,5 @@
void wintodos(dword ESI) inline fastcall void wintodos( ESI)
{ {
while (BL=ESBYTE[ESI]) while (BL=ESBYTE[ESI])
{ {
@ -28,7 +28,7 @@ void wintodos(dword ESI)
byte mas[66] = "椥ä£å¨©ª«¬­®¯ïàáâ㦢ìë§èíéçꞀ<EFBFBD>„…”ƒ•ˆ‰ŠŒ<EFBFBD>Ž<EFBFBD>Ÿ<EFBFBD>“†œ˜<EFBFBD>™—š"; byte mas[66] = "椥ä£å¨©ª«¬­®¯ïàáâ㦢ìë§èíéçꞀ<EFBFBD>„…”ƒ•ˆ‰ŠŒ<EFBFBD>Ž<EFBFBD>Ÿ<EFBFBD>“†œ˜<EFBFBD>™—š";
void koitodos(dword EDI) inline fastcall void koitodos( EDI)
{ {
WHILE (BL=ESBYTE[EDI]) WHILE (BL=ESBYTE[EDI])
{ {
@ -42,10 +42,9 @@ void koitodos(dword EDI)
} }
} }
//Asper, lev //Asper, lev
//uncomplete //uncomplete
int utf8rutodos(dword ESI) //- inline fastcall void utf8rutodos( ESI)
{ {
EDI=ESI; EDI=ESI;
while (BL=ESBYTE[ESI]) while (BL=ESBYTE[ESI])
@ -79,8 +78,6 @@ int utf8rutodos(dword ESI) //-
} }
} }
//0xC2 ñãðóïïèðîâàòü
else IF (BL == 0xC2) //òàáëèöó ïåðåêîäèðîâîê? else IF (BL == 0xC2) //òàáëèöó ïåðåêîäèðîâîê?
SWITCH(ESBYTE[ESI+1]) { SWITCH(ESBYTE[ESI+1]) {
case 0xAB: //" case 0xAB: //"
@ -108,25 +105,27 @@ int utf8rutodos(dword ESI) //-
ESI++; ESI++;
BREAK; BREAK;
} }
CASE 0xA9: // (c) CASE 0xA9: // (c) --- âûëåò Î_î
{ {
ESWORD[EDI] = 'c('; ESBYTE[EDI] = 'c';
// ESBYTE[EDI] = '('; //ESBYTE[EDI] = '(';
// ESBYTE[EDI+1] = 'c'; //ESBYTE[EDI+1] = 'c';
ESBYTE[EDI+2] = ')'; //ESBYTE[EDI+2] = ')';
EDI+=2; //EDI+=2;
ESI++; ESI++;
BREAK; BREAK;
} }
CASE 0xAE: // (r) CASE 0xAE: // (r)
{ {
ESWORD[EDI] = 'r('; ESBYTE[EDI] = 'r';
ESBYTE[EDI+2] = ')'; //ESBYTE[EDI] = '(';
EDI+=2; //ESBYTE[EDI+1] = 'r';
ESI++; //ESBYTE[EDI+2] = ')';
break; //EDI+=2;
} ESI++;
} BREAK;
}
}
ELSE IF (BL >= 0x90) && (BL <= 0xAF) ELSE IF (BL >= 0x90) && (BL <= 0xAF)
{ {

View File

@ -6,11 +6,11 @@
// strchr( ESI,BL) // strchr( ESI,BL)
// strrchr( ESI,BL) // strrchr( ESI,BL)
// strstr( EBX, EDX) // strstr( EBX, EDX)
// // itoa( ESI)
// IntToStr( ESI) // atoi( EAX)
// StrToInt() // strupr( ESI)
// upcase( ESI) // strlwr( ESI)
// lowcase( ESI) // strtok( ESI)
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
@ -63,7 +63,7 @@ inline fastcall strcat( EDI, ESI)
} }
char buffer[11]; char buffer[11];
inline fastcall dword IntToStr( ESI) inline fastcall dword itoa( ESI)
{ {
$mov edi, #buffer $mov edi, #buffer
$mov ecx, 10 $mov ecx, 10
@ -91,9 +91,10 @@ f3:
} }
inline fastcall dword StrToInt() inline fastcall dword atoi( EDI)
{ {
ESI=EDI=EAX; //ESI=EDI=EAX;
ESI=EDI;
IF(DSBYTE[ESI]=='-')ESI++; IF(DSBYTE[ESI]=='-')ESI++;
EAX=0; EAX=0;
BH=AL; BH=AL;
@ -141,7 +142,7 @@ inline fastcall unsigned int strrchr( ESI,BL)
} }
inline fastcall upcase( ESI) inline fastcall strupr( ESI)
{ {
do{ do{
AL=DSBYTE[ESI]; AL=DSBYTE[ESI];
@ -150,7 +151,7 @@ inline fastcall upcase( ESI)
}while(AL!=0); }while(AL!=0);
} }
inline fastcall lowcase( ESI) inline fastcall strlwr( ESI)
{ {
do{ do{
$LODSB $LODSB
@ -200,4 +201,44 @@ ls1: mov esi, edx
ls2: xor eax, eax ls2: xor eax, eax
ls3: ls3:
} }
} }
/* strtok( LPSTR dest, src, divs);
src - указатель на исходную строку или результат предыдущего вызова
dest - указатель на буфер, куда будет скопировано слово
divs - указатель на строку, содержащую символы-разделители
Возвращает: 0, если слов больше нет
не 0, если слово скопировано в dest (передайте это значение
в качестве src для последующего поиска) */
dword fastcall strtok( EDX, ESI, EBX)
{
asm {
XOR ECX, ECX
MOV EDI, EBX
XOR EAX, EAX
DEC ECX
REPNE SCASB
XOR ECX, 0FFFFFFFFH
DEC ECX
PUSH ECX
L1: LODSB
OR AL, AL
JZ L4
MOV EDI, EBX
MOV ECX, SSDWORD[ ESP]
REPNE SCASB
JZ L1
DEC ESI
L2: LODSB
MOV EDI, EBX
MOV ECX, SSDWORD[ ESP]
REPNE SCASB
JZ L3
MOV DSBYTE[ EDX], AL
INC EDX
JMP SHORT L2
L3: MOV EAX, ESI
L4: POP ECX
} DSBYTE[ EDX] = 0;
}