forked from KolibriOS/kolibrios
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:
parent
0d1782e8b0
commit
2a73669575
@ -20,9 +20,9 @@
|
||||
#include "img\URLgoto.txt";
|
||||
|
||||
|
||||
//ïåðåìåííûå
|
||||
char URL[4096],
|
||||
editURL[4096],
|
||||
#define URL param
|
||||
|
||||
char editURL[4096],
|
||||
page_links[12000],
|
||||
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};
|
||||
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;
|
||||
#define WIN_W 640
|
||||
#define WIN_H 480
|
||||
|
||||
|
||||
dword stak[100]; //ìåíþ ÏÊÌ
|
||||
mouse m;
|
||||
|
||||
@ -55,11 +60,14 @@ void main()
|
||||
load_dll2(#abox_lib, #boxlib_init,0);
|
||||
//load_dll2(libtruetype, #truetype,0);
|
||||
|
||||
if (param) strcpy(#URL, #param);
|
||||
else strcpy(#URL, "/sys/index.htm");
|
||||
if (!URL) strcpy(#URL, "/sys/index.htm");
|
||||
strcpy(#editURL, #URL);
|
||||
|
||||
lines.column_max = 101;
|
||||
Form.width=WIN_W;
|
||||
Form.height=WIN_H;
|
||||
|
||||
SetElementSizes();
|
||||
|
||||
WB1.OpenPage();
|
||||
|
||||
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()
|
||||
{
|
||||
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);
|
||||
if (Form.status_window>2) //åñëè ñâåðíóòî â çàãîëîâîê, íè÷åãî íå ðèñóåì
|
||||
@ -189,13 +207,7 @@ void Draw_Window()
|
||||
DrawRegion(205,14,onLeft(58,205),18,0x94AECE); //îáîäîê ïîëîñû àäðåñà
|
||||
DrawRegion(206,15,onLeft(59,205),16,0xE4ECF3);
|
||||
|
||||
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;
|
||||
|
||||
SetElementSizes();
|
||||
WB1.ShowPage();
|
||||
|
||||
DefineButton(scroll1.start_x+1, scroll1.start_y+1, 16, 16, ID1+BT_HIDE, 0xE4DFE1);
|
||||
|
@ -5,11 +5,10 @@ dword
|
||||
buf,
|
||||
filesize,
|
||||
blink;
|
||||
int i;
|
||||
|
||||
char download_path[]="/rd/1/.download";
|
||||
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 {
|
||||
@ -21,6 +20,7 @@ struct TWebBrowser {
|
||||
void ShowPage();
|
||||
void ParseHTML(dword);
|
||||
void WhatTextStyle(int left1, top1, width1);
|
||||
void DrawPage();
|
||||
void DrawScroller();
|
||||
};
|
||||
|
||||
@ -48,7 +48,6 @@ char line[500],
|
||||
parametr[1200],
|
||||
options[1000];
|
||||
|
||||
|
||||
#include "include\history.h"
|
||||
#include "include\colors.h"
|
||||
#include "include\unicode_tags.h"
|
||||
@ -58,7 +57,7 @@ char line[500],
|
||||
|
||||
void TWebBrowser::Scan(int id)
|
||||
{
|
||||
if (id > 399)
|
||||
if (id >= 400)
|
||||
{
|
||||
GetURLfromPageLinks(id);
|
||||
|
||||
@ -247,6 +246,7 @@ void TWebBrowser::OpenPage()
|
||||
KillProcess(downloader_id);
|
||||
strcpy(#editURL, #URL);
|
||||
BrowserHistory.AddUrl();
|
||||
strcpy(#header, #version);
|
||||
if (!strcmp(get_URL_part(5),"http:")))
|
||||
{
|
||||
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);
|
||||
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){
|
||||
word bukva[1];
|
||||
word bukva[2];
|
||||
int j, perenos_num;
|
||||
byte ignor_param = 0;
|
||||
byte ignor_param;
|
||||
char temp[768];
|
||||
|
||||
stroka = -lines.first;
|
||||
@ -314,7 +315,7 @@ void TWebBrowser::ParseHTML(dword bword){
|
||||
bg_color = 0xFFFFFF;
|
||||
line = '';
|
||||
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, ".mht")) ignor_text = 1;
|
||||
@ -339,7 +340,7 @@ void TWebBrowser::ParseHTML(dword bword){
|
||||
tab_len=strlen(#line)/8;
|
||||
tab_len=tab_len*8;
|
||||
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;
|
||||
}
|
||||
case 0x0d:
|
||||
@ -347,15 +348,17 @@ void TWebBrowser::ParseHTML(dword bword){
|
||||
goto DEFAULT_MARK;
|
||||
case '<':
|
||||
bword++; //ïðîìîòàåì ñèìâîë <
|
||||
tag = parametr = tagparam = ignor_param = 0;
|
||||
if (ESBYTE[bword] == '!') //ôèëüòðàöèÿ âíóòðè <!-- -->, äåðçêî
|
||||
{
|
||||
bword++;
|
||||
if (ESBYTE[bword] == '-') {
|
||||
HH_:
|
||||
if (ESBYTE[bword] == '-')
|
||||
{
|
||||
HH_:
|
||||
do
|
||||
{
|
||||
bword++;
|
||||
if (bword >= buf + filesize) break 1;
|
||||
if (buf + filesize <= bword) break 2;
|
||||
}
|
||||
while (ESBYTE[bword] <>'-');
|
||||
|
||||
@ -378,19 +381,18 @@ void TWebBrowser::ParseHTML(dword bword){
|
||||
}
|
||||
bword++;
|
||||
}
|
||||
lowcase(#tag);
|
||||
lowcase(#tagparam);
|
||||
strlwr(#tag);
|
||||
strlwr(#tagparam);
|
||||
|
||||
if (tag[strlen(#tag)-1]=='/') tag[strlen(#tag)-1]=''; //íåáîëüøîé ôèêñ äëÿ ðàáîòû ñ XHTML-òåãàìè òèïà br/
|
||||
if (strlen(#tagparam) > 0) && (strlen(#tagparam) < 4000) GetNextParam();
|
||||
//while (tagparam)
|
||||
//{
|
||||
// GetNextParam();
|
||||
WhatTextStyle(left + 5, stroka * 10 + top + 5, width - 20); //îáðàáîòêà òåãîâ
|
||||
//}
|
||||
if (tag[strlen(#tag)-1]=='/') tag[strlen(#tag)-1]=''; //for br/
|
||||
if (tagparam) && (strlen(#tagparam) < 4000) GetNextParam();
|
||||
|
||||
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;
|
||||
case '=': //ïîääåðæêà øàéòàíñêîé êîäèðîâêè ñòðàíèö, ñîõðàí¸ííûõ ÷åðåç ÈÅ7
|
||||
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;
|
||||
break;
|
||||
|
||||
case '&': //îáðàáîòêà òåãîâ òèïà
|
||||
case '&': // and so on
|
||||
bword++;
|
||||
tag='';
|
||||
for (j=0; (ESBYTE[bword] <>';') && (j < 7); j++, bword++;)
|
||||
tag=0;
|
||||
for (j=0; (ESBYTE[bword]<>';') && (j<7); j++, bword++;)
|
||||
{
|
||||
bukva = ESBYTE[bword];
|
||||
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)
|
||||
{
|
||||
bukva = unicode_chars[rez];
|
||||
GOTO DEFAULT_MARK; //îáðàáàòûâàåì áóêâó
|
||||
}
|
||||
{
|
||||
bukva = unicode_chars[rez];
|
||||
//GOTO DEFAULT_MARK; //îáðàáàòûâàåì áóêâó ëó÷øå íàâåðíî strcat(#line, unicode_tags[j+1]); è break 1;
|
||||
strcat(#line, #bukva);
|
||||
break;
|
||||
}
|
||||
|
||||
//debug(#tag); //òýã íå íàéäåí - âûâîäèì íà äîñêó îòëàäêè
|
||||
strcat(#line,#tag); //âûâîäèì íà ýêðàí íåîáðàáîòàííûé òåã, òàê áðàóçåðû çà÷åì-òî äåëàþò
|
||||
break;
|
||||
default:
|
||||
@ -445,13 +448,13 @@ void TWebBrowser::ParseHTML(dword bword){
|
||||
line[perenos_num] = 0x00;
|
||||
NEXT_MARK:
|
||||
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); //çàêðàøèâàåì ñëåäóùóþ ñòðîêó
|
||||
strcpy(#line, #temp);
|
||||
}
|
||||
if (!pre_text) && (bukva == ' ') && (!stolbec) && (!line) break;
|
||||
strcat(#line, #bukva);
|
||||
}
|
||||
if (strlen(#line)<sizeof(line)) strcat(#line, #bukva);
|
||||
}
|
||||
}
|
||||
|
||||
if (lines.visible * 10 + 25 <= height)
|
||||
@ -459,16 +462,74 @@ void TWebBrowser::ParseHTML(dword bword){
|
||||
if (stroka * 10 + 15 <= height)
|
||||
DrawBar(left, stroka * 10 + top + 15, width - 15, -stroka * 10 + height - 15, bg_color); //çàêðàøèâàåì âñ¸ äî êîíöà
|
||||
if (lines.first == 0) lines.all = stroka;
|
||||
|
||||
debug ("Pre end - anchor");
|
||||
if (anchor)
|
||||
{
|
||||
//åñëè ïîñðåäè òåêñòà ïîÿâèòñÿ íîâûé ÿêîðü - áóäåò áåñêîíå÷íûé öèêë
|
||||
anchor='';
|
||||
lines.first=anchor_line_num;
|
||||
ParseHTML(buf);
|
||||
}
|
||||
|
||||
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;
|
||||
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;
|
||||
strcpy(#tag, #tag+1);
|
||||
}
|
||||
ELSE
|
||||
else
|
||||
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;
|
||||
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);
|
||||
strcat(#header, " -");
|
||||
strcat(#header, #version);
|
||||
if (stroka==0) DrawTitle(#header);
|
||||
if (rez)
|
||||
{
|
||||
header=0;
|
||||
}
|
||||
else //òåã çàêðûëñÿ - âûâåëè ñòðîêó
|
||||
{
|
||||
if (stroka==0) DrawTitle(#header);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
IF (ignor_text) return;
|
||||
if (ignor_text) return;
|
||||
|
||||
|
||||
|
||||
|
||||
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=")) //î÷åíü ïëîõî!!! ïîòîìó ÷òî åñëè íå ïîñëåäíèé òåã, ðàáîòàòü íå áóäåò
|
||||
{
|
||||
@ -595,13 +639,14 @@ void TWebBrowser::WhatTextStyle(int left1, top1, width1) {
|
||||
GOTO _A_MARK;
|
||||
}
|
||||
}
|
||||
ELSE {
|
||||
else {
|
||||
link = 0;
|
||||
IF(text_color_index > 0) text_color_index--;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
if (!chTag("font"))
|
||||
{
|
||||
if (rez)
|
||||
@ -748,7 +793,8 @@ void TWebBrowser::WhatTextStyle(int left1, top1, width1) {
|
||||
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);
|
||||
DrawBar(left1+w - 5, top1 + 10, width1-w + 5, h, bg_color);
|
||||
|
@ -52,16 +52,75 @@
|
||||
|
||||
</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="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>
|
||||
</html>
|
||||
|
@ -1,5 +1,5 @@
|
||||
|
||||
void wintodos(dword ESI)
|
||||
inline fastcall void wintodos( ESI)
|
||||
{
|
||||
while (BL=ESBYTE[ESI])
|
||||
{
|
||||
@ -28,7 +28,7 @@ void wintodos(dword ESI)
|
||||
|
||||
|
||||
byte mas[66] = "î ¡æ¤¥ä£å¨©ª«¬®¯ïàáâ㦢ìë§èíéçꞀ<EFBFBD>–„…”ƒ•ˆ‰Š‹Œ<EFBFBD>Ž<EFBFBD>Ÿ<EFBFBD>‘’“†‚œ›‡˜<EFBFBD>™—š";
|
||||
void koitodos(dword EDI)
|
||||
inline fastcall void koitodos( EDI)
|
||||
{
|
||||
WHILE (BL=ESBYTE[EDI])
|
||||
{
|
||||
@ -42,10 +42,9 @@ void koitodos(dword EDI)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//Asper, lev
|
||||
//uncomplete
|
||||
int utf8rutodos(dword ESI) //-
|
||||
inline fastcall void utf8rutodos( ESI)
|
||||
{
|
||||
EDI=ESI;
|
||||
while (BL=ESBYTE[ESI])
|
||||
@ -79,8 +78,6 @@ int utf8rutodos(dword ESI) //-
|
||||
}
|
||||
}
|
||||
|
||||
//0xC2 ñãðóïïèðîâàòü
|
||||
|
||||
else IF (BL == 0xC2) //òàáëèöó ïåðåêîäèðîâîê?
|
||||
SWITCH(ESBYTE[ESI+1]) {
|
||||
case 0xAB: //"
|
||||
@ -108,25 +105,27 @@ int utf8rutodos(dword ESI) //-
|
||||
ESI++;
|
||||
BREAK;
|
||||
}
|
||||
CASE 0xA9: // (c)
|
||||
{
|
||||
ESWORD[EDI] = 'c(';
|
||||
// ESBYTE[EDI] = '(';
|
||||
// ESBYTE[EDI+1] = 'c';
|
||||
ESBYTE[EDI+2] = ')';
|
||||
EDI+=2;
|
||||
ESI++;
|
||||
BREAK;
|
||||
}
|
||||
CASE 0xAE: // (r)
|
||||
{
|
||||
ESWORD[EDI] = 'r(';
|
||||
ESBYTE[EDI+2] = ')';
|
||||
EDI+=2;
|
||||
ESI++;
|
||||
break;
|
||||
}
|
||||
}
|
||||
CASE 0xA9: // (c) --- âûëåò Î_î
|
||||
{
|
||||
ESBYTE[EDI] = 'c';
|
||||
//ESBYTE[EDI] = '(';
|
||||
//ESBYTE[EDI+1] = 'c';
|
||||
//ESBYTE[EDI+2] = ')';
|
||||
//EDI+=2;
|
||||
ESI++;
|
||||
BREAK;
|
||||
}
|
||||
CASE 0xAE: // (r)
|
||||
{
|
||||
ESBYTE[EDI] = 'r';
|
||||
//ESBYTE[EDI] = '(';
|
||||
//ESBYTE[EDI+1] = 'r';
|
||||
//ESBYTE[EDI+2] = ')';
|
||||
//EDI+=2;
|
||||
ESI++;
|
||||
BREAK;
|
||||
}
|
||||
}
|
||||
|
||||
ELSE IF (BL >= 0x90) && (BL <= 0xAF)
|
||||
{
|
||||
|
@ -6,11 +6,11 @@
|
||||
// strchr( ESI,BL)
|
||||
// strrchr( ESI,BL)
|
||||
// strstr( EBX, EDX)
|
||||
//
|
||||
// IntToStr( ESI)
|
||||
// StrToInt()
|
||||
// upcase( ESI)
|
||||
// lowcase( ESI)
|
||||
// itoa( ESI)
|
||||
// atoi( EAX)
|
||||
// strupr( ESI)
|
||||
// strlwr( ESI)
|
||||
// strtok( ESI)
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
|
||||
@ -63,7 +63,7 @@ inline fastcall strcat( EDI, ESI)
|
||||
}
|
||||
|
||||
char buffer[11];
|
||||
inline fastcall dword IntToStr( ESI)
|
||||
inline fastcall dword itoa( ESI)
|
||||
{
|
||||
$mov edi, #buffer
|
||||
$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++;
|
||||
EAX=0;
|
||||
BH=AL;
|
||||
@ -141,7 +142,7 @@ inline fastcall unsigned int strrchr( ESI,BL)
|
||||
}
|
||||
|
||||
|
||||
inline fastcall upcase( ESI)
|
||||
inline fastcall strupr( ESI)
|
||||
{
|
||||
do{
|
||||
AL=DSBYTE[ESI];
|
||||
@ -150,7 +151,7 @@ inline fastcall upcase( ESI)
|
||||
}while(AL!=0);
|
||||
}
|
||||
|
||||
inline fastcall lowcase( ESI)
|
||||
inline fastcall strlwr( ESI)
|
||||
{
|
||||
do{
|
||||
$LODSB
|
||||
@ -201,3 +202,43 @@ ls2: xor eax, eax
|
||||
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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user