Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 2843 → Rev 2844

/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 '&': //îáðàáîòêà òåãîâ òèïà &nbsp;
case '&': //&nbsp; 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
òàáû. Êîå-êàêèå ñèìâîëû: &quot; &amp; &lt; &gt; &#149; &nbsp; &copy; &reg; &bdquo; &ldquo; &#151; ¯æà÷îê ³íøîãî áîêó ð. ªâôðàò ç'¿â ´ðóíò òà ºâðåéñüêèé ´åðáàëàéô.
<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;
}