/programs/network/htmlv/browser/HTMLv.c |
---|
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 |
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 |
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 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 |
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); |
/programs/network/htmlv/browser/TWB.h |
---|
5,11 → 5,10 |
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 |
void ShowPage(); |
void ParseHTML(dword); |
void WhatTextStyle(int left1, top1, width1); |
void DrawPage(); |
void DrawScroller(); |
}; |
48,7 → 48,6 |
parametr[1200], |
options[1000]; |
#include "include\history.h" |
#include "include\colors.h" |
#include "include\unicode_tags.h" |
58,7 → 57,7 |
void TWebBrowser::Scan(int id) |
{ |
if (id > 399) |
if (id >= 400) |
{ |
GetURLfromPageLinks(id); |
247,6 → 246,7 |
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 |
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; |
339,7 → 340,7 |
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 |
goto DEFAULT_MARK; |
case '<': |
bword++; //ïðîìîòàåì ñèìâîë < |
tag = parametr = tagparam = ignor_param = 0; |
if (ESBYTE[bword] == '!') //ôèëüòðàöèÿ âíóòðè <!-- -->, äåðçêî |
{ |
bword++; |
if (ESBYTE[bword] == '-') { |
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 |
} |
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,9 → 408,9 |
if (bukva) goto DEFAULT_MARK; |
break; |
case '&': //îáðàáîòêà òåãîâ òèïà |
case '&': // and so on |
bword++; |
tag=''; |
tag=0; |
for (j=0; (ESBYTE[bword] <>';') && (j < 7); j++, bword++;) |
{ |
bukva = ESBYTE[bword]; |
424,14 → 426,15 |
} |
} |
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; //îáðàáàòûâàåì áóêâó |
//GOTO DEFAULT_MARK; //îáðàáàòûâàåì áóêâó ëó÷øå íàâåðíî strcat(#line, unicode_tags[j+1]); è break 1; |
strcat(#line, #bukva); |
break; |
} |
//debug(#tag); //òýã íå íàéäåí - âûâîäèì íà äîñêó îòëàäêè |
strcat(#line,#tag); //âûâîäèì íà ýêðàí íåîáðàáîòàííûé òåã, òàê áðàóçåðû çà÷åì-òî äåëàþò |
break; |
default: |
445,12 → 448,12 |
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); |
} |
} |
459,19 → 462,77 |
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"); |
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); |
} |
} |
char oldtag[100]; |
void TWebBrowser::WhatTextStyle(int left1, top1, width1) { |
dword hr_color; |
478,62 → 539,45 |
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 (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=")) //î÷åíü ïëîõî!!! ïîòîìó ÷òî åñëè íå ïîñëåäíèé òåã, ðàáîòàòü íå áóäåò |
{ |
if (!strcmp(#anchor, #options)) |
595,7 → 639,7 |
GOTO _A_MARK; |
} |
} |
ELSE { |
else { |
link = 0; |
IF(text_color_index > 0) text_color_index--; |
} |
602,6 → 646,7 |
return; |
} |
if (!chTag("font")) |
{ |
if (rez) |
748,7 → 793,8 |
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); |
/programs/network/htmlv/browser/include/acid_0.1.htm |
---|
52,6 → 52,70 |
</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"> |
 ýòîì òåêñòå åñòü ïåðåõîä íà ñëåäóþùóþ ñòðîêó, íî áðàóçåð |
åãî äîëæåí ïðîèãíîðèðîâàòü. Åùå ìíîãî ïðîáåëîâ. À òóò åñòü |
58,10 → 122,5 |
òàáû. Êîå-êàêèå ñèìâîëû: " & < > • © ® „ “ — ¯æà÷îê ³íøîãî áîêó ð. ªâôðàò ç'¿â ´ðóíò òà ºâðåéñüêèé ´åðáàëàéô. |
<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> |
/programs/network/htmlv/lib/encoding.h |
---|
1,5 → 1,5 |
void wintodos(dword ESI) |
inline fastcall void wintodos( ESI) |
{ |
while (BL=ESBYTE[ESI]) |
{ |
28,7 → 28,7 |
byte mas[66] = "î ¡æ¤¥ä£å¨©ª«¬®¯ïàáâ㦢ìë§èíéçê "; |
void koitodos(dword EDI) |
inline fastcall void koitodos( EDI) |
{ |
WHILE (BL=ESBYTE[EDI]) |
{ |
42,10 → 42,9 |
} |
} |
//Asper, lev |
//uncomplete |
int utf8rutodos(dword ESI) //- |
inline fastcall void utf8rutodos( ESI) |
{ |
EDI=ESI; |
while (BL=ESBYTE[ESI]) |
79,8 → 78,6 |
} |
} |
//0xC2 ñãðóïïèðîâàòü |
else IF (BL == 0xC2) //òàáëèöó ïåðåêîäèðîâîê? |
SWITCH(ESBYTE[ESI+1]) { |
case 0xAB: //" |
108,23 → 105,25 |
ESI++; |
BREAK; |
} |
CASE 0xA9: // (c) |
CASE 0xA9: // (c) --- âûëåò Î_î |
{ |
ESWORD[EDI] = 'c('; |
ESBYTE[EDI] = 'c'; |
// ESBYTE[EDI] = '('; |
// ESBYTE[EDI+1] = 'c'; |
ESBYTE[EDI+2] = ')'; |
EDI+=2; |
//ESBYTE[EDI+2] = ')'; |
//EDI+=2; |
ESI++; |
BREAK; |
} |
CASE 0xAE: // (r) |
{ |
ESWORD[EDI] = 'r('; |
ESBYTE[EDI+2] = ')'; |
EDI+=2; |
ESBYTE[EDI] = 'r'; |
//ESBYTE[EDI] = '('; |
//ESBYTE[EDI+1] = 'r'; |
//ESBYTE[EDI+2] = ')'; |
//EDI+=2; |
ESI++; |
break; |
BREAK; |
} |
} |
/programs/network/htmlv/lib/strings.h |
---|
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 |
} |
char buffer[11]; |
inline fastcall dword IntToStr( ESI) |
inline fastcall dword itoa( ESI) |
{ |
$mov edi, #buffer |
$mov ecx, 10 |
91,9 → 91,10 |
} |
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 upcase( ESI) |
inline fastcall strupr( ESI) |
{ |
do{ |
AL=DSBYTE[ESI]; |
150,7 → 151,7 |
}while(AL!=0); |
} |
inline fastcall lowcase( ESI) |
inline fastcall strlwr( ESI) |
{ |
do{ |
$LODSB |
200,4 → 201,44 |
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; |
} |