HTMLv 0.94: general code update

git-svn-id: svn://kolibrios.org@2810 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Kirill Lipatov (Leency) 2012-06-20 17:22:56 +00:00
parent b409bc1b4a
commit e50cde95f6
5 changed files with 255 additions and 205 deletions

View File

@ -21,10 +21,10 @@ char URL[4096],
page_links[12000], page_links[12000],
header[512]; header[512];
int max_kolvo_strok, //lines_visible int lines_visible,
max_kolvo_stolbcov, lines_all,
count, //lines_all lines_first,
za_kadrom, //lines_first lines_column_max,
mouse_dd; 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};
@ -42,7 +42,7 @@ void main()
{ {
int btn; int btn;
byte key; byte key;
int scroll_size; int half_scroll_size;
mem_Init(); mem_Init();
load_dll2(libio, #libio_init,1); load_dll2(libio, #libio_init,1);
@ -50,9 +50,9 @@ void main()
load_dll2(boxlib, #edit_box_draw,0); load_dll2(boxlib, #edit_box_draw,0);
load_dll2(#abox_lib, #boxlib_init,0); load_dll2(#abox_lib, #boxlib_init,0);
if (param) copystr(#param,#URL); if (param) strcpy(#URL, #param);
else copystr("/sys/index.htm",#URL); else strcpy(#URL, "/sys/index.htm");
copystr(#URL,#editURL); strcpy(#editURL, #URL);
OpenPage(); OpenPage();
@ -64,9 +64,9 @@ void main()
{ {
CASE evMouse: CASE evMouse:
/*scrollbar_v_mouse (#scroll1); //êîí÷åíûé ñêðîëë ïðèòîðìàæèìàåò, èä¸ì "ñâîèì ïóò¸ì" /*scrollbar_v_mouse (#scroll1); //êîí÷åíûé ñêðîëë ïðèòîðìàæèìàåò, èä¸ì "ñâîèì ïóò¸ì"
if (za_kadrom <> scroll1.position) if (lines_first <> scroll1.position)
{ {
za_kadrom = scroll1.position; lines_first = scroll1.position;
WB1.ParseHTML(buf, filesize); WB1.ParseHTML(buf, filesize);
//break; //break;
};*/ };*/
@ -85,33 +85,32 @@ void main()
IF (m.vert==65535) //ïðîêðóòêà êîë¸ñèêîì IF (m.vert==65535) //ïðîêðóòêà êîë¸ñèêîì
{ {
IF (za_kadrom==0) break; IF (lines_first==0) break;
IF (za_kadrom>3) za_kadrom-=2; ELSE za_kadrom=1; IF (lines_first>3) lines_first-=2; ELSE lines_first=1;
WB1.Scan(ID1); WB1.Scan(ID1);
break; break;
} }
IF (m.vert==1) IF (m.vert==1)
{ {
IF(max_kolvo_strok+za_kadrom+3>=count) WB1.Scan(181); IF(lines_visible+lines_first+3>=lines_all) WB1.Scan(181);
ELSE { ELSE {
za_kadrom+=2; lines_first+=2;
WB1.Scan(ID2); WB1.Scan(ID2);
} }
break; break;
} }
IF (count<max_kolvo_strok) break; IF (lines_all<lines_visible) break;
scroll_size = WB1.height - 16 * max_kolvo_strok / count - 3; half_scroll_size = WB1.height - 16 * lines_visible / lines_all - 3 /2;
if (m.x>=WB1.width-14) && (m.x<=WB1.width+6) if (m.x>=WB1.width-14) && (m.x<=WB1.width+6)
&& (m.y>WB1.top+16) && (m.y<WB1.top+WB1.height-16) && (m.y>WB1.top+16) && (m.y<WB1.top+WB1.height-16)
&& (count>max_kolvo_strok) while (m.lkm) && (lines_all>lines_visible) while (m.lkm)
{ {
IF (scroll_size/2+WB1.top>m.y) || (m.y<0) || (m.y>4000) m.y=scroll_size/2+WB1.top; //åñëè êóðñîð íàä îêíîì IF (half_scroll_size/2+WB1.top>m.y) || (m.y<0) || (m.y>4000) m.y=half_scroll_size/2+WB1.top; //åñëè êóðñîð íàä îêíîì
btn=za_kadrom; //ñîõðàíÿåì ñòàðîå êîëè÷åñòâî btn=lines_first; //ñîõðàíÿåì ñòàðîå êîëè÷åñòâî
j= scroll_size/2; lines_first = m.y -half_scroll_size -WB1.top * lines_all / WB1.height;
za_kadrom = m.y -j -WB1.top * count / WB1.height; IF (lines_visible+lines_first>lines_all) lines_first=lines_all-lines_visible;
IF (max_kolvo_strok+za_kadrom>count) za_kadrom=count-max_kolvo_strok; IF (btn<>lines_first) WB1.ParseHTML(buf, filesize); //÷òîá ëèøíèé ðàç íå ïåðåðèñîâûâàòü
IF (btn<>za_kadrom) WB1.ParseHTML(buf, filesize); //÷òîá ëèøíèé ðàç íå ïåðåðèñîâûâàòü
m.get(); m.get();
} }
@ -147,10 +146,10 @@ void main()
{ {
if (GetProcessSlot(downloader_id)<>0) break; if (GetProcessSlot(downloader_id)<>0) break;
downloader_id=0; downloader_id=0;
lines_first = lines_all = 0;
ReadHtml(); ReadHtml();
if (filesize) wintodos(buf); if (filesize) wintodos(buf);
Draw_Window(); Draw_Window();
//WB1.ShowPage(#URL);
} }
} }
} }
@ -159,16 +158,17 @@ void main()
void Draw_Window() void Draw_Window()
{ {
int j;
DefineAndDrawWindow(215,100,640,480,0x73,0x00E4DFE1,0,0,0); DefineAndDrawWindow(215,100,640,480,0x73,0x00E4DFE1,0,0,0);
GetProcessInfo(#Form, SelfInfo); GetProcessInfo(#Form, SelfInfo);
IF (Form.status_window>2) //åñëè ñâåðíóòî â çàãîëîâîê, íè÷åãî íå ðèñóåì if (Form.status_window>2) //åñëè ñâåðíóòî â çàãîëîâîê, íè÷åãî íå ðèñóåì
{ {
DrawTitle(#header); DrawTitle(#header);
return; return;
} }
IF (Form.height<120) MoveSize(OLD,OLD,OLD,120); if (Form.height<120) MoveSize(OLD,OLD,OLD,120);
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); if (GetProcessSlot(downloader_id)<>0) PutImage(#stop_btn,24,24,88,10);
@ -176,7 +176,7 @@ void Draw_Window()
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); //âûïóêëîñòü
FOR (j=0; j<5; j++) DefineButton(j*37+11, 7, 29, 29, 300+j+BT_HIDE, 0x00E4DFE1); for (j=0; j<5; j++) DefineButton(j*37+11, 7, 29, 29, 300+j+BT_HIDE, 0x00E4DFE1);
PutImage(#URLgoto,40,19,onLeft(57,0),14); PutImage(#URLgoto,40,19,onLeft(57,0),14);
DefineButton(onLeft(37,0),15, 18, 16, GOTOURL+BT_HIDE, 0xE4DFE1); DefineButton(onLeft(37,0),15, 18, 16, GOTOURL+BT_HIDE, 0xE4DFE1);
DefineButton(onLeft(56,0),15, 17, 16, SEARCHWEB+BT_HIDE, 0xE4DFE1); DefineButton(onLeft(56,0),15, 17, 16, SEARCHWEB+BT_HIDE, 0xE4DFE1);
@ -187,8 +187,8 @@ void Draw_Window()
WB1.top=44; WB1.top=44;
WB1.width=Form.width-13; WB1.width=Form.width-13;
WB1.height=onTop(43,5); WB1.height=onTop(43,5);
max_kolvo_stolbcov = WB1.width - 30 / 6; lines_column_max = WB1.width - 30 / 6;
max_kolvo_strok = WB1.height - 3 / 10 - 2; lines_visible = WB1.height - 3 / 10 - 2;
WB1.ShowPage(#URL); WB1.ShowPage(#URL);
} }

View File

@ -1,15 +1,15 @@
int downloader_id; int downloader_id;
dword j, dword
buf, buf,
filesize, filesize,
blink = 400; blink;
int i; 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.93e"; char version[]=" Text-based Browser 0.94";
struct TWebBrowser { struct TWebBrowser {
@ -60,20 +60,18 @@ void TWebBrowser::Scan(int id)
//#1 //#1
if (URL[0] == '#') if (URL[0] == '#')
{ {
copystr(#URL+find_symbol(#URL, '#'), #anchor); strcpy(#anchor, #URL+find_symbol(#URL, '#'));
copystr(BrowserHistory.CurrentUrl(), #URL); strcpy(#URL, BrowserHistory.CurrentUrl());
//copystr(#editURL, #URL + strlen(#URL));
//copystr(#URL, #editURL);
za_kadrom=count-max_kolvo_strok; lines_first=lines_all-lines_visible;
ShowPage(#URL); ShowPage(#URL);
return; return;
} }
//liner.ru#1 //liner.ru#1
if (find_symbol(#URL, '#')<>-1) if (find_symbol(#URL, '#')<>-1)
{ {
copystr(#URL+find_symbol(#URL, '#'), #anchor); strcpy(#anchor, #URL+find_symbol(#URL, '#'));
URL[find_symbol(#URL, '#')-1] = 0x00; //çàãëóøêà URL[find_symbol(#URL, '#')-1] = 0x00; //çàãëóøêà
} }
@ -82,7 +80,7 @@ void TWebBrowser::Scan(int id)
if (!strcmp(#URL + strlen(#URL) - 4, ".gif")) || (!strcmp(#URL + strlen(#URL) - 4, ".png")) || (!strcmp(#URL + strlen(#URL) - 4, ".jpg")) if (!strcmp(#URL + strlen(#URL) - 4, ".gif")) || (!strcmp(#URL + strlen(#URL) - 4, ".png")) || (!strcmp(#URL + strlen(#URL) - 4, ".jpg"))
{ {
RunProgram("/sys/media/kiv", #URL); RunProgram("/sys/media/kiv", #URL);
copystr(BrowserHistory.CurrentUrl(), #URL); strcpy(#URL, BrowserHistory.CurrentUrl());
return; return;
} }
@ -90,7 +88,7 @@ void TWebBrowser::Scan(int id)
return; return;
} }
IF(count < max_kolvo_strok) SWITCH(id) //åñëè ìàëî ñòðîê èãíîðèðóåì íåêîòîðûå êíîïêè IF(lines_all < lines_visible) SWITCH(id) //åñëè ìàëî ñòðîê èãíîðèðóåì íåêîòîðûå êíîïêè
{ CASE 183: CASE 184: CASE 180: CASE 181: return; } { CASE 183: CASE 184: CASE 180: CASE 181: return; }
switch (id) switch (id)
@ -127,7 +125,7 @@ void TWebBrowser::Scan(int id)
Draw_Window(); Draw_Window();
return; return;
} }
anchor_line_num=za_kadrom; //âåñ¸ëûé êîñòûëü :Ð anchor_line_num=lines_first; //âåñ¸ëûé êîñòûëü :Ð
anchor[0]='|'; anchor[0]='|';
OpenPage(); OpenPage();
return; return;
@ -139,44 +137,44 @@ void TWebBrowser::Scan(int id)
return; return;
case HOME: case HOME:
copystr("http://kolibri-os.narod.ru", #editURL); strcpy(#editURL, "http://kolibri-os.narod.ru");
case GOTOURL: case GOTOURL:
case 0x0D: //enter case 0x0D: //enter
copystr(#editURL, #URL); strcpy(#URL, #editURL);
OpenPage(); OpenPage();
return; return;
case 173: //ctrl+enter case 173: //ctrl+enter
case SEARCHWEB: case SEARCHWEB:
copystr(#search_path, #URL); strcpy(#URL, #search_path);
copystr(#editURL, #URL + strlen(#URL)); strcat(#URL, #editURL);
OpenPage(); OpenPage();
return; return;
case ID1: //ìîòàåì ââåðõ case ID1: //ìîòàåì ââåðõ
IF(za_kadrom <= 0) return; IF(lines_first <= 0) return;
za_kadrom--; lines_first--;
break; break;
case ID2: //ìîòàåì âíèç case ID2: //ìîòàåì âíèç
IF(max_kolvo_strok + za_kadrom >= count) return; IF(lines_visible + lines_first >= lines_all) return;
za_kadrom++; lines_first++;
break; break;
case 183: //PgDown case 183: //PgDown
IF(za_kadrom == count - max_kolvo_strok) return; IF(lines_first == lines_all - lines_visible) return;
za_kadrom += max_kolvo_strok + 2; lines_first += lines_visible + 2;
IF(max_kolvo_strok + za_kadrom > count) za_kadrom = count - max_kolvo_strok; IF(lines_visible + lines_first > lines_all) lines_first = lines_all - lines_visible;
BREAK; BREAK;
case 184: //PgUp case 184: //PgUp
IF(za_kadrom == 0) RETURN; IF(lines_first == 0) RETURN;
za_kadrom -= max_kolvo_strok - 2; lines_first -= lines_visible - 2;
IF(za_kadrom < 0) za_kadrom = 0; IF(lines_first < 0) lines_first = 0;
BREAK; BREAK;
case 180: //home case 180: //home
IF(za_kadrom == 0) RETURN; IF(lines_first == 0) RETURN;
za_kadrom = 0; lines_first = 0;
BREAK; BREAK;
case 181: //end case 181: //end
IF (za_kadrom == count - max_kolvo_strok) RETURN; IF (lines_first == lines_all - lines_visible) RETURN;
za_kadrom = count - max_kolvo_strok; lines_first = lines_all - lines_visible;
BREAK; BREAK;
default: default:
RETURN; RETURN;
@ -187,12 +185,12 @@ void TWebBrowser::Scan(int id)
void GetNewUrl(){ void GetNewUrl(){
IF (!strcmp(get_URL_part(2),"./")) copystr(#URL+2,#URL); //èãíîðèì :) IF (!strcmp(get_URL_part(2),"./")) strcpy(#URL, #URL+2); //èãíîðèì :)
if (URL[0] <> '/') if (URL[0] <> '/')
&& (strcmp(get_URL_part(5),"http:")<>0) && (strcmp(get_URL_part(5),"mailt")<>0) && (strcmp(get_URL_part(5),"ftp:/")<>0) && (strcmp(get_URL_part(5),"http:")<>0) && (strcmp(get_URL_part(5),"mailt")<>0) && (strcmp(get_URL_part(5),"ftp:/")<>0)
{ {
copystr(BrowserHistory.CurrentUrl(), #editURL); //äîñòà¸ì àäðåñ òåêóùåé ñòðàíèöû strcpy(#editURL, BrowserHistory.CurrentUrl()); //äîñòà¸ì àäðåñ òåêóùåé ñòðàíèöû
_CUT_ST_LEVEL_MARK: _CUT_ST_LEVEL_MARK:
@ -203,14 +201,14 @@ void GetNewUrl(){
IF (!strcmp(get_URL_part(3),"../")) //íà óðîâåíü ââåðõ IF (!strcmp(get_URL_part(3),"../")) //íà óðîâåíü ââåðõ
{ {
copystr(#URL+3,#URL); strcpy(#URL,#URL+3);
editURL[find_symbol(#editURL, '/')-1] = 0x00; //îáðåçàåì å¸ óðë äî ïîñëåäíåãî / editURL[find_symbol(#editURL, '/')-1] = 0x00; //îáðåçàåì å¸ óðë äî ïîñëåäíåãî /
goto _CUT_ST_LEVEL_MARK; goto _CUT_ST_LEVEL_MARK;
} }
if (editURL[strlen(#editURL)-1]<>'/') copystr("/", #editURL + strlen(#editURL)); if (editURL[strlen(#editURL)-1]<>'/') strcat(#editURL, "/");
copystr(#URL, #editURL + strlen(#editURL)); //êëåèì íîâûé àäðåñ strcat(#editURL, #URL); //êëåèì íîâûé àäðåñ
copystr(#editURL, #URL); strcpy(#URL, #editURL);
} }
} }
@ -239,12 +237,10 @@ void OpenPage()
{ {
if (GetProcessSlot(downloader_id)<>0) PutPaletteImage(#toolbar,200,42,0,0,8,#toolbar_pal); if (GetProcessSlot(downloader_id)<>0) PutPaletteImage(#toolbar,200,42,0,0,8,#toolbar_pal);
KillProcess(downloader_id); KillProcess(downloader_id);
copystr(#URL, #editURL); strcpy(#editURL, #URL);
BrowserHistory.AddUrl(); BrowserHistory.AddUrl();
za_kadrom = count = 0;
if (!strcmp(get_URL_part(5),"http:"))) if (!strcmp(get_URL_part(5),"http:")))
{ {
copystr(#version, #header);
KillProcess(downloader_id); //óáèâàåì ñòàðûé ïðîöåññ 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]='';
@ -262,6 +258,7 @@ void OpenPage()
Draw_Window(); Draw_Window();
return; return;
} }
lines_first = lines_all = 0;
ReadHtml(); ReadHtml();
if (filesize) wintodos(buf); if (filesize) wintodos(buf);
WB1.ShowPage(#URL); WB1.ShowPage(#URL);
@ -294,25 +291,29 @@ void TWebBrowser::ShowPage(dword adress)
void TWebBrowser::ParseHTML(dword bword, fsize){ void TWebBrowser::ParseHTML(dword bword, fsize){
word bukva[1]; word bukva[1];
int j;
byte ignor_param = 0; byte ignor_param = 0;
char temp[768]; char temp[768];
stroka = -za_kadrom;
stroka = -lines_first;
stolbec = 0; stolbec = 0;
FOR(j = 400; j < blink + 1; j++;) DeleteButton(j);
for (j = 400; j < blink + 1; j++;) DeleteButton(j);
blink = 400;
b_text = i_text = u_text = s_text = pre_text = blq_text = body_present = b_text = i_text = u_text = s_text = pre_text = blq_text = body_present =
li_text = link = ignor_text = text_color_index = text_colors[0] = li_tab = 0; //îáíóëÿåì òåãè li_text = link = ignor_text = text_color_index = text_colors[0] = li_tab = 0; //îáíóëÿåì òåãè
link_color = 0x0000FF; link_color = 0x0000FF;
bg_color = 0xFFFFFF; bg_color = 0xFFFFFF;
blink = 400;
line = ''; line = '';
copystr("|", #page_links); strcpy(#page_links,"|");
copystr(#version, #header); strcpy(#header,#version);
IF(!strcmp(#URL + strlen(#URL) - 4, ".txt")) if (!strcmp(#URL + strlen(#URL) - 4, ".txt"))
{ {
DrawBar(left, top, width-15, 15, bg_color); //çàêðàøèâàåì ïåðâóþ ñòðîêó DrawBar(left, top, width-15, 15, bg_color); //çàêðàøèâàåì ïåðâóþ ñòðîêó
pre_text = 1; //çà÷¸òíîå îòîáðàæåíèå òåêñòà pre_text = 1; //çà÷¸òíîå îòîáðàæåíèå òåêñòà
} }
IF(!strcmp(#URL + strlen(#URL) - 4, ".mht")) ignor_text = 1; if (!strcmp(#URL + strlen(#URL) - 4, ".mht")) ignor_text = 1;
for (bword = buf; buf + fsize > bword; bword++;) { for (bword = buf; buf + fsize > bword; bword++;) {
bukva = ESBYTE[bword]; bukva = ESBYTE[bword];
switch (bukva) { switch (bukva) {
@ -328,7 +329,7 @@ void TWebBrowser::ParseHTML(dword bword, fsize){
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++;) copystr(" ", #line + strlen(#line)); for (i=0; i<tab_len; i++;) strcat(#line," ");
break; break;
} }
case 0x0d: case 0x0d:
@ -336,114 +337,116 @@ void TWebBrowser::ParseHTML(dword bword, fsize){
goto DEFAULT_MARK; goto DEFAULT_MARK;
case '<': case '<':
bword++; //ïðîìîòàåì ñèìâîë < bword++; //ïðîìîòàåì ñèìâîë <
IF(ESBYTE[bword] == '!') //ôèëüòðàöèÿ âíóòðè <!-- -->, äåðçêî if (ESBYTE[bword] == '!') //ôèëüòðàöèÿ âíóòðè <!-- -->, äåðçêî
{ {
bword++; bword++;
IF(ESBYTE[bword] == '-') { if (ESBYTE[bword] == '-') {
HH_: do { HH_: do {
bword++; bword++;
IF(bword >= buf + fsize) break 1; IF(bword >= buf + fsize) break 1;
} while (ESBYTE[bword] <>'-'); } while (ESBYTE[bword] <>'-');
bword++; bword++;
IF(ESBYTE[bword] <>'-') GOTO HH_; if (ESBYTE[bword] <>'-') goto HH_;
} }
} }
WHILE (ESBYTE[bword] <>'>') && (bword < buf + fsize) //ïîëó÷àåì òåã è åãî ïàðàìåòðû while (ESBYTE[bword] <>'>') && (bword < buf + fsize) //ïîëó÷àåì òåã è åãî ïàðàìåòðû
{ {
bukva = ESBYTE[bword]; bukva = ESBYTE[bword];
IF(bukva == '\9') || (bukva == '\x0a') || (bukva == '\x0d') bukva = ' '; if (bukva == '\9') || (bukva == '\x0a') || (bukva == '\x0d') bukva = ' ';
IF(!ignor_param) && (bukva <>' ') copystr(#bukva, #tag + strlen(#tag)); if (!ignor_param) && (bukva <>' ') strcat(#tag, #bukva);
ELSE { else
{
ignor_param = true; ignor_param = true;
copystr(#bukva, #tagparam + strlen(#tagparam)); strcat(#tagparam, #bukva);
} }
bword++; bword++;
} }
lowcase(#tag); lowcase(#tag);
lowcase(#tagparam); lowcase(#tagparam);
IF (tag[strlen(#tag)-1]=='/') tag[strlen(#tag)-1]=''; //íåáîëüøîé ôèêñ äëÿ ðàáîòû ñ XHTML-òåãàìè òèïà br/ if (tag[strlen(#tag)-1]=='/') tag[strlen(#tag)-1]=''; //íåáîëüøîé ôèêñ äëÿ ðàáîòû ñ XHTML-òåãàìè òèïà br/
IF(strlen(#tagparam) > 0) && (strlen(#tagparam) < 4000) GetNextParam(); if (strlen(#tagparam) > 0) && (strlen(#tagparam) < 4000) GetNextParam();
WhatTextStyle(left + 5, stroka * 10 + top + 5, width - 20); //îáðàáîòêà òåãîâ WhatTextStyle(left + 5, stroka * 10 + top + 5, width - 20); //îáðàáîòêà òåãîâ
line = tag = parametr = tagparam = ignor_param = 0; //âñ¸ îáíóëÿåì line = 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;
bword++; bword++;
bukva=ESBYTE[bword]; bukva=ESBYTE[bword];
copystr(#bukva, #temp); strcpy(#temp,#bukva);
bword++; bword++;
bukva=ESBYTE[bword]; bukva=ESBYTE[bword];
copystr(#bukva, #temp + strlen(#temp)); strcat(#temp,#bukva);
bukva=Hex2Symb(#temp); bukva=Hex2Symb(#temp);
IF (bukva) goto DEFAULT_MARK; if (bukva) goto DEFAULT_MARK;
break; break;
case '&': //îáðàáîòêà òåãîâ òèïà &nbsp; case '&': //îáðàáîòêà òåãîâ òèïà &nbsp;
IF(ignor_text) break; if (ignor_text) break;
bword++; bword++;
tag=''; tag='';
FOR (j=0; (ESBYTE[bword] <>';') && (j < 7); j++; bword++;) for (j=0; (ESBYTE[bword] <>';') && (j < 7); j++, bword++;)
{ {
bukva = ESBYTE[bword]; bukva = ESBYTE[bword];
copystr(#bukva, #tag + strlen(#tag)); strcat(#tag, #bukva);
} }
FOR (j=0; unicode_tags[j]!=0; j+=2;) for (j=0; unicode_tags[j]!=0; j+=2;)
{ {
IF(!strcmp(#tag, unicode_tags[j])) if (!strcmp(#tag, unicode_tags[j]))
{ {
copystr(unicode_tags[j+1], #line + strlen(#line)); strcat(#line, unicode_tags[j+1]);
break 1; break 1;
} }
} }
rez = StrToInt(#tag + 1) - 1040; rez = StrToInt(#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; //îáðàáàòûâàåì áóêâó
} }
//WriteDebug(#tag); //òýã íå íàéäåí - âûâîäèì íà äîñêó îòëàäêè //debug(#tag); //òýã íå íàéäåí - âûâîäèì íà äîñêó îòëàäêè
copystr(#tag, #line + strlen(#line)); //âûâîäèì íà ýêðàí íåîáðàáîòàííûé òåã, òàê áðàóçåðû çà÷åì-òî äåëàþò strcat(#line,#tag); //âûâîäèì íà ýêðàí íåîáðàáîòàííûé òåã, òàê áðàóçåðû çà÷åì-òî äåëàþò
break; break;
default: default:
DEFAULT_MARK: DEFAULT_MARK:
IF(ignor_text) break; IF(ignor_text) break;
IF(pre_text == 0) && (bukva == ' ') && (strcmp(#line + strlen(#line) - 1, " ") == 0) continue; IF(!pre_text) && (bukva == ' ') && (!strcmp(#line + strlen(#line) - 1, " ")) continue;
// //
if (stolbec + strlen(#line) > max_kolvo_stolbcov) if (stolbec + strlen(#line) >lines_column_max)
{ {
copystr(#line + find_symbol(#line, ' '), #temp); //ïåðåíîñ ïî ñëîâàì strcpy(#temp, #line + find_symbol(#line, ' ')); //ïåðåíîñ ïî ñëîâàì
line[find_symbol(#line, ' ')] = 0x00; line[find_symbol(#line, ' ')] = 0x00;
NEXT_MARK: IF(stroka - 1 > max_kolvo_strok) && (za_kadrom <>0) break 1; //óõîäèì... NEXT_MARK:
IF(stroka - 1 > lines_visible) && (lines_first <>0) break 1; //óõîäèì...
WhatTextStyle(left + 5, stroka * 10 + top + 5, width - 20); //âûâîä ñòðîêè WhatTextStyle(left + 5, stroka * 10 + top + 5, width - 20); //âûâîä ñòðîêè
TextGoDown(left + 5, stroka * 10 + top + 5, width - 20); //çàêðàøèâàåì ñëåäóùóþ ñòðîêó TextGoDown(left + 5, stroka * 10 + top + 5, width - 20); //çàêðàøèâàåì ñëåäóùóþ ñòðîêó
copystr(#temp, #line); strcpy(#line, #temp);
} }
IF(pre_text == 0) && (bukva == ' ') && (stolbec == 0) && (strlen(#line) == 0) CONTINUE; if (!pre_text) && (bukva == ' ') && (!stolbec) && (!line) CONTINUE;
copystr(#bukva, #line + strlen(#line)); strcat(#line, #bukva);
} }
} }
if (strcmp(#URL + strlen(#URL) - 4, ".txt")<>0) && (body_present==0) if (strcmp(#URL + strlen(#URL) - 4, ".txt")<>0) && (!body_present)
DrawBar(left, top, width-15, 15, bg_color); //çàêðàøèâàåì ïåðâóþ ñòðîêó åñëè êàêîé-òî ðàõèò íå ñîçäàë òåã áîäè DrawBar(left, top, width-15, 15, bg_color); //çàêðàøèâàåì ïåðâóþ ñòðîêó åñëè êàêîé-òî ðàõèò íå ñîçäàë òåã áîäè
if (max_kolvo_strok * 10 + 25 <= height) if (lines_visible * 10 + 25 <= height)
DrawBar(left, max_kolvo_strok * 10 + top + 25, width - 15, -max_kolvo_strok * 10 + height - 25, bg_color); DrawBar(left, lines_visible * 10 + top + 25, width - 15, -lines_visible * 10 + height - 25, bg_color);
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 (za_kadrom == 0) count = stroka; if (lines_first == 0) lines_all = stroka;
if (anchor) if (anchor)
{ {
anchor[0]=''; anchor='';
za_kadrom=anchor_line_num; lines_first=anchor_line_num;
ParseHTML(buf, filesize); ParseHTML(buf, filesize);
} }
@ -466,15 +469,15 @@ void GetNextParam()
IF (kavichki) IF (kavichki)
{ {
i=find_symbol(#tagparam, kavichki); i=find_symbol(#tagparam, kavichki);
copystr(#tagparam + i, #options); strcpy(#options, #tagparam + i);
} }
ELSE ELSE
{ {
WHILE((i > 0) && (tagparam[i] <>'=')) i--; //i=find_symbol(#tagparam, '=')+1; WHILE((i > 0) && (tagparam[i] <>'=')) i--; //i=find_symbol(#tagparam, '=')+1;
i++; i++;
copystr(#tagparam + i, #options); //êîïèðóåì îïöèþ strcpy(#options, #tagparam + i); //êîïèðóåì îïöèþ
WHILE (options[0] == ' ') copystr(#options + 1, #options); WHILE (options[0] == ' ') strcpy(#options, #options+1);
} }
tagparam[i] = 0x00; tagparam[i] = 0x00;
@ -487,7 +490,7 @@ void GetNextParam()
} }
} }
copystr(#tagparam + i + 1, #parametr); //êîïèðóåì ïàðàìåòð strcpy(#parametr, #tagparam + i + 1); //êîïèðóåì ïàðàìåòð
tagparam[i] = 0x00; tagparam[i] = 0x00;
} }
@ -499,13 +502,13 @@ void TWebBrowser::WhatTextStyle(int left1, top1, width1) {
dword image=0; dword image=0;
char temp[4096]; char temp[4096];
int w, h, img_za_kadrom=0; int w, h, img_lines_first=0;
//ïðîâåðÿåì òåã îòêðûâàåòñÿ èëè çàêðûâàåòñÿ //ïðîâåðÿåì òåã îòêðûâàåòñÿ èëè çàêðûâàåòñÿ
IF(tag[0] == '/') IF(tag[0] == '/')
{ {
rez = 0; rez = 0;
copystr(#tag + 1, #tag); strcpy(#tag, #tag+1);
} }
ELSE ELSE
rez = 1; rez = 1;
@ -519,9 +522,9 @@ void TWebBrowser::WhatTextStyle(int left1, top1, width1) {
if(!chTag("title")) && (!rez) if(!chTag("title")) && (!rez)
{ {
copystr(#line, #header); strcpy(#header, #line);
copystr(" -", #header + strlen(#header)); strcat(#header, " -");
copystr(#version, #header + strlen(#header)); strcat(#header, #version);
if (stroka==0) DrawTitle(#header); if (stroka==0) DrawTitle(#header);
return; return;
} }
@ -530,10 +533,10 @@ void TWebBrowser::WhatTextStyle(int left1, top1, width1) {
// //
// //
IF(!chTag("q")) copystr("\"", #line + strlen(#line)); IF(!chTag("q")) strcat(#line, "\"");
//âûâîä íà ýêðàí //âûâîä íà ýêðàí
if (stroka >= 0) && (stroka - 2 < max_kolvo_strok) && (line) && (!anchor) if (stroka >= 0) && (stroka - 2 < lines_visible) && (line) && (!anchor)
{ {
WriteText(stolbec * 6 + left1, top1, 0x80, text_colors[text_color_index], #line, 0); //ìîæåò òóò ðèñîâàòü áåëóþ ñòðîêó? WriteText(stolbec * 6 + left1, top1, 0x80, text_colors[text_color_index], #line, 0); //ìîæåò òóò ðèñîâàòü áåëóþ ñòðîêó?
IF (b_text) { $add ebx, 1<<16 $int 0x40 } IF (b_text) { $add ebx, 1<<16 $int 0x40 }
@ -553,7 +556,7 @@ void TWebBrowser::WhatTextStyle(int left1, top1, width1) {
{ {
if (!strcmp(#anchor, #options)) if (!strcmp(#anchor, #options))
{ {
anchor_line_num=za_kadrom+stroka; anchor_line_num=lines_first+stroka;
} }
} }
@ -592,20 +595,20 @@ void TWebBrowser::WhatTextStyle(int left1, top1, width1) {
_A_MARK: _A_MARK:
if (!strcmp(#parametr, "href=")) if (!strcmp(#parametr, "href="))
{ {
if (stroka - 1 > max_kolvo_strok) || (stroka < -2) return; if (stroka - 1 > lines_visible) || (stroka < -2) return;
if (link == 1) text_color_index--; //åñëè êàêîé-òî äîëáî¸á íå çàêðûë òýã if (link == 1) text_color_index--; //åñëè êàêîé-òî äîëáî¸á íå çàêðûë òýã
link = 1; link = 1;
blink++; blink++;
text_color_index++; text_color_index++;
text_colors[text_color_index] = link_color; text_colors[text_color_index] = link_color;
copystr(#options, #page_links + strlen(#page_links)); strcat(#page_links, #options);
copystr("|", #page_links + strlen(#page_links)); strcat(#page_links, "|");
} }
if (anchor) && (!strcmp(#parametr, "name=")) if (anchor) && (!strcmp(#parametr, "name="))
{ {
if (!strcmp(#anchor, #options)) if (!strcmp(#anchor, #options))
{ {
anchor_line_num=za_kadrom+stroka; anchor_line_num=lines_first+stroka;
} }
} }
if (tagparam) if (tagparam)
@ -623,7 +626,7 @@ void TWebBrowser::WhatTextStyle(int left1, top1, width1) {
///////////////////////// /////////////////////////
if (!chTag("font")) if (!chTag("font"))
{ {
IF (stroka - 1 > max_kolvo_strok) return; IF (stroka - 1 > lines_visible) return;
COL_MARK: COL_MARK:
if (strcmp(#parametr, "color=") == 0) //&& (parametr[1] == '#') if (strcmp(#parametr, "color=") == 0) //&& (parametr[1] == '#')
{ {
@ -638,34 +641,37 @@ void TWebBrowser::WhatTextStyle(int left1, top1, width1) {
return; return;
} }
////////////////////////// //////////////////////////
IF(!chTag("tr")) || (!chTag("br")) { if(!chTag("tr")) || (!chTag("br")) {
TextGoDown(left1, top1, width1); TextGoDown(left1, top1, width1);
return; return;
} }
IF(!chTag("div")) { if (!chTag("div")) {
IF(oldtag[0] <>'h') TextGoDown(left1, top1, width1); IF(oldtag[0] <>'h') TextGoDown(left1, top1, width1);
return; return;
} }
IF(!chTag("p")) { if (!chTag("p")) {
IF(oldtag[0] == 'h') return; IF(oldtag[0] == 'h') return;
TextGoDown(left1, top1, width1); TextGoDown(left1, top1, width1);
IF(rez) TextGoDown(left1, top1 + 10, width1); IF(rez) TextGoDown(left1, top1 + 10, width1);
return; return;
} }
//////////////////////////// ////////////////////////////
IF(!chTag("h1")) || (!chTag("h2")) || (!chTag("h3")) || (!chTag("h4")) { if (!chTag("h1")) || (!chTag("h2")) || (!chTag("h3")) || (!chTag("h4")) {
TextGoDown(left1, top1, width1); TextGoDown(left1, top1, width1);
IF(rez) TextGoDown(left1, top1 + 10, width1); IF(rez) TextGoDown(left1, top1 + 10, width1);
b_text = rez; b_text = rez;
copystr(#tag, #oldtag); strcpy(#oldtag, #tag);
return; return;
} ELSE copystr("", #oldtag); }
IF(!chTag("b")) || (!chTag("strong")) || (!chTag("big")) { else
oldtag='';
if (!chTag("b")) || (!chTag("strong")) || (!chTag("big")) {
b_text = rez; b_text = rez;
return; return;
} }
//////////////////////////// ////////////////////////////
IF(!chTag("i")) || (!chTag("em")) || (!chTag("subtitle")) { if(!chTag("i")) || (!chTag("em")) || (!chTag("subtitle")) {
i_text = rez; i_text = rez;
return; return;
} }
@ -683,7 +689,7 @@ void TWebBrowser::WhatTextStyle(int left1, top1, width1) {
li_text = rez; li_text = rez;
IF(rez == 0) return; IF(rez == 0) return;
TextGoDown(left1, top1, width1); TextGoDown(left1, top1, width1);
IF(stroka > -1) && (stroka - 2 < max_kolvo_strok) DrawBar(li_tab * 5 * 6 + left1 - 5, top1 + 12, 2, 2, 0); IF(stroka > -1) && (stroka - 2 < lines_visible) DrawBar(li_tab * 5 * 6 + left1 - 5, top1 + 12, 2, 2, 0);
return; return;
} }
//////////////////////////// ////////////////////////////
@ -711,9 +717,9 @@ void TWebBrowser::WhatTextStyle(int left1, top1, width1) {
IMG_TAG: IMG_TAG:
IF (strcmp(#parametr,"src=")==0) //íàäî îáúåäèíèòü ñ GetNewUrl() IF (strcmp(#parametr,"src=")==0) //íàäî îáúåäèíèòü ñ GetNewUrl()
{ {
copystr(BrowserHistory.CurrentUrl(), #temp); //äîñòà¸ì àäðåñ òåêóùåé ñòðàíèöû strcpy(#temp, BrowserHistory.CurrentUrl()); //äîñòà¸ì àäðåñ òåêóùåé ñòðàíèöû
temp[find_symbol(#temp, '/')] = 0x00; //îáðåçàåì å¸ óðë äî ïîñëåäíåãî / temp[find_symbol(#temp, '/')] = 0x00; //îáðåçàåì å¸ óðë äî ïîñëåäíåãî /
copystr(#options,#temp+strlen(#temp)); strcat(#temp, #options);
image=load_image(#temp); image=load_image(#temp);
w=DSWORD[image+4]; w=DSWORD[image+4];
@ -735,19 +741,19 @@ void TWebBrowser::WhatTextStyle(int left1, top1, width1) {
if (top1<WB1.top) //åñëè ÷àñòü èçîáðàæåíèÿ ñâåðõó if (top1<WB1.top) //åñëè ÷àñòü èçîáðàæåíèÿ ñâåðõó
{ {
img_za_kadrom=WB1.top-top1; img_lines_first=WB1.top-top1;
h=h-img_za_kadrom; h=h-img_lines_first;
top1=WB1.top; top1=WB1.top;
} }
if (top1>WB1.top+WB1.height-h-15) //åñëè ÷àñòü èçîáðàæåíèÿ ñíèçó IF (stroka - 2 < max_kolvo_strok) if (top1>WB1.top+WB1.height-h-15) //åñëè ÷àñòü èçîáðàæåíèÿ ñíèçó IF (stroka - 2 < lines_visible)
{ {
h=WB1.top+WB1.height-top1-15; h=WB1.top+WB1.height-top1-15;
} }
IF (h<=0) return; IF (h<=0) return;
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_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);
IF (link) IF (link)
{ {
@ -767,7 +773,7 @@ void TWebBrowser::WhatTextStyle(int left1, top1, width1) {
META: META:
if (!strcmp(#parametr, "charset=")) || (!strcmp(#parametr, "content=")) || (!strcmp(#parametr, "encoding=")) if (!strcmp(#parametr, "charset=")) || (!strcmp(#parametr, "content=")) || (!strcmp(#parametr, "encoding="))
{ {
copystr(#options[find_symbol(#options, '=')],#options); //ïîèñê â content= strcpy(#options, #options[find_symbol(#options, '=')]); //ïîèñê â content=
IF (!strcmp(#options,"utf-8")) || (!strcmp(#options,"utf8")) IF (!strcmp(#options,"utf-8")) || (!strcmp(#options,"utf8"))
{ {
@ -784,7 +790,7 @@ void TWebBrowser::WhatTextStyle(int left1, top1, width1) {
ReadHtml(); ReadHtml();
} }
} }
IF(tagparam) if (tagparam)
{ {
GetNextParam(); GetNextParam();
goto META; goto META;
@ -800,16 +806,16 @@ void TextGoDown(int left1, top1, width1)
IF(blq_text == 1) stolbec = 8; IF(blq_text == 1) stolbec = 8;
ELSE stolbec = 0; ELSE stolbec = 0;
IF(li_text == 1) stolbec = li_tab * 5; IF(li_text == 1) stolbec = li_tab * 5;
IF(stroka >= 0) && (stroka - 2 < max_kolvo_strok) && (!anchor) DrawBar(left1 - 5, top1 + 10, width1 + 5, 10, bg_color); IF(stroka >= 0) && (stroka - 2 < lines_visible) && (!anchor) DrawBar(left1 - 5, top1 + 10, width1 + 5, 10, bg_color);
} }
//ñêðîëë //ñêðîëë
void TWebBrowser::DrawScroller() //íå îïòèìàëüíàÿ îòðèñîâêà, íî çàòî â îäíîì ìåñòå void TWebBrowser::DrawScroller() //íå îïòèìàëüíàÿ îòðèñîâêà, íî çàòî â îäíîì ìåñòå
{ {
scroll1.max_area = count; scroll1.max_area = lines_all;
scroll1.cur_area = max_kolvo_strok; scroll1.cur_area = lines_visible;
scroll1.position = za_kadrom; scroll1.position = lines_first;
scroll1.all_redraw=1; scroll1.all_redraw=1;
scroll1.start_x=Form.width-28; //left + width - 15 scroll1.start_x=Form.width-28; //left + width - 15

View File

@ -30,11 +30,11 @@ void UrlsHistory::AddUrl() //
history_current/=2; history_current/=2;
for (i=0; i<history_current; i++;) for (i=0; i<history_current; i++;)
{ {
copystr(#history_list[MAX_HISTORY_NUM-i].Item, #history_list[i].Item); strcpy(#history_list[i].Item, #history_list[MAX_HISTORY_NUM-i].Item);
} }
} }
history_current++; history_current++;
copystr(#URL,#history_list[history_current].Item); strcpy(#history_list[history_current].Item, #URL);
history_num=history_current; history_num=history_current;
} }
@ -44,7 +44,7 @@ byte UrlsHistory::GoBack()
if (history_current<=1) return 0; if (history_current<=1) return 0;
history_current--; history_current--;
copystr(#history_list[history_current].Item,#URL); strcpy(#URL, #history_list[history_current].Item);
return 1; return 1;
} }
@ -53,6 +53,6 @@ byte UrlsHistory::GoForward()
{ {
if (history_current==history_num) return 0; if (history_current==history_num) return 0;
history_current++; history_current++;
copystr(#history_list[history_current].Item,#URL); strcpy(#URL, #history_list[history_current].Item);
return 1; return 1;
} }

View File

@ -17,7 +17,7 @@
dword get_URL_part(byte len) { dword get_URL_part(byte len) {
char temp1[1000]; char temp1[1000];
copystr(#URL, #temp1); strcpy(#temp1, #URL);
temp1[len] = 0x00; temp1[len] = 0x00;
return #temp1; return #temp1;
} }
@ -27,14 +27,14 @@ inline byte chTag(dword text) {return strcmp(#tag,text);}
void GetURLfromPageLinks(int id) void GetURLfromPageLinks(int id)
{ {
j = 0; int j = 0;
for (i = 0; i <= id - 401; i++) for (i = 0; i <= id - 401; i++)
{ {
do j++; do j++;
while (page_links[j] <>'|'); while (page_links[j] <>'|');
} }
page_links[j] = 0x00; page_links[j] = 0x00;
copystr(#page_links[find_symbol(#page_links, '|')], #URL); strcpy(#URL, #page_links[find_symbol(#page_links, '|')]);
} }

View File

@ -30,9 +30,10 @@ char program_path[4096];
#define false 0 #define false 0
//------------------------------------------------------------------------- //-------------------------------------------------------------------------
struct mouse{ struct mouse
dword x,y,lkm,pkm,hor,vert; {
void get(); dword x,y,lkm,pkm,hor,vert;
void get();
}; };
void mouse::get() void mouse::get()
@ -65,10 +66,12 @@ void mouse::get()
} }
struct system_colors{ struct system_colors
{
dword frame,grab,grab_button,grab_button_text,grab_text,work,work_button,work_button_text,work_text,work_graph; dword frame,grab,grab_button,grab_button_text,grab_text,work,work_button,work_button_text,work_text,work_graph;
void get(); void get();
}; };
void system_colors::get() void system_colors::get()
{ {
EAX = 48; EAX = 48;
@ -80,22 +83,25 @@ void system_colors::get()
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
inline fastcall dword WaitEvent(){ inline fastcall dword WaitEvent()
{
$mov eax,10 $mov eax,10
$int 0x40 $int 0x40
} }
inline fastcall dword CheckEvent(){ inline fastcall dword CheckEvent()
{
$mov eax,11 $mov eax,11
$int 0x40 $int 0x40
} }
inline fastcall dword WaitEventTimeout(dword EBX){ inline fastcall dword WaitEventTimeout( EBX)
{
$mov eax,23 $mov eax,23
$int 0x40 $int 0x40
} }
inline fastcall SetEventMask(dword EBX) inline fastcall SetEventMask( EBX)
{ {
$mov eax,40 $mov eax,40
$int 0x40 $int 0x40
@ -109,7 +115,8 @@ inline fastcall ScancodesGeting(){
} }
inline fastcall word GetKey(){ //Gluk fix inline fastcall word GetKey() //+Gluk fix
{
$push edx $push edx
@getkey: @getkey:
$mov eax,2 $mov eax,2
@ -127,21 +134,24 @@ inline fastcall word GetKey(){ //Gluk fix
} }
inline fastcall Pause(dword EBX) inline fastcall Pause( EBX)
{ //<2F> ã§ , ¢ á®âëå ¤®«ïå ᥪ㭤ë EBX = value {
$mov eax, 5 $mov eax, 5
$int 0x40 $int 0x40
} }
//================================================================== //------------------------------------------------------------------------------
inline fastcall word GetButtonID(){ inline fastcall word GetButtonID()
{
$mov eax,17 $mov eax,17
$int 0x40 $int 0x40
$shr eax,8 $shr eax,8
} }
struct proc_info{ struct proc_info
{
#define SelfInfo -1
dword use_cpu; dword use_cpu;
word pos_in_stack,num_slot,rezerv1; word pos_in_stack,num_slot,rezerv1;
char name[11]; char name[11];
@ -150,18 +160,17 @@ struct proc_info{
word status_slot,rezerv3; word status_slot,rezerv3;
dword work_left,work_top,work_width,work_height; dword work_left,work_top,work_width,work_height;
char status_window; char status_window;
void GetInfo(dword ECX); void GetInfo( ECX);
byte reserved[1024-71]; byte reserved[1024-71];
#define SelfInfo -1
}; };
void GetProcessInfo(dword EBX, ECX) void GetProcessInfo( EBX, ECX)
{ {
$mov eax,9; $mov eax,9;
$int 0x40 $int 0x40
} }
int GetProcessSlot(ECX) //ECX = process ID int GetProcessSlot( ECX) //ECX = process ID
{ {
EAX = 18; EAX = 18;
EBX = 21; EBX = 21;
@ -176,28 +185,30 @@ inline fastcall int ActiveProcess()
} }
inline fastcall ExitProcess(){ inline fastcall ExitProcess()
{
$mov eax,-1; $mov eax,-1;
$int 0x40 $int 0x40
} }
inline fastcall int KillProcess(dword ECX){ inline fastcall int KillProcess( ECX)
{
$mov eax,18; $mov eax,18;
$mov ebx,18; $mov ebx,18;
$int 0x40 $int 0x40
} }
//================================================================== //------------------------------------------------------------------------------
//eax = ÿçûê ñèñòåìû (1=eng, 2=fi, 3=ger, 4=rus) //eax = ÿçûê ñèñòåìû (1=eng, 2=fi, 3=ger, 4=rus)
inline fastcall int GetSystemLanguage(){ inline fastcall int GetSystemLanguage()
EAX = 26; {
EBX = 5; EAX = 26;
$int 0x40 EBX = 5;
RETURN EAX; $int 0x40
} }
inline fastcall void DrawTitle(dword ECX) inline fastcall void DrawTitle( ECX)
{ {
EAX = 71; EAX = 71;
EBX = 1; EBX = 1;
@ -228,13 +239,13 @@ inline fastcall dword GetScreenWidth()
$and eax,0x0000FFFF $and eax,0x0000FFFF
} }
inline fastcall MoveSize(dword EBX,ECX,EDX,ESI) inline fastcall MoveSize( EBX,ECX,EDX,ESI)
{ {
EAX = 67; EAX = 67;
$int 0x40 $int 0x40
} }
inline fastcall dword LoadLibrary(dword ECX) inline fastcall dword LoadLibrary( ECX)
{ {
$mov eax, 68 $mov eax, 68
$mov ebx, 19 $mov ebx, 19
@ -242,32 +253,55 @@ inline fastcall dword LoadLibrary(dword ECX)
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
inline fastcall dword strlen(dword EDI){ inline fastcall dword strlen( EDI)
{
EAX=0; EAX=0;
ECX=-1; ECX=-1;
$REPNE $SCASB $REPNE $SCASB
EAX-=2+ECX; EAX-=2+ECX;
} }
inline fastcall copystr(dword ESI,EDI)
inline fastcall strcpy( EDI, ESI)
{ {
$cld $cld
l1: l2:
$lodsb $lodsb
$stosb $stosb
$test al,al $test al,al
$jnz l1 $jnz l2
} }
inline fastcall strcat( EDI, ESI)
byte fastcall TestBit(EAX, CL)
{ {
$shr eax,cl asm {
$and eax,1 MOV EBX, EDI
XOR ECX, ECX
XOR EAX, EAX
DEC ECX
REPNE SCASB
DEC EDI
MOV EDX, EDI
MOV EDI, ESI
XOR ECX, ECX
XOR EAX, EAX
DEC ECX
REPNE SCASB
XOR ECX, 0FFFFFFFFH
MOV EDI, EDX
MOV EDX, ECX
MOV EAX, EDI
SHR ECX, 2
REP MOVSD
MOV ECX, EDX
AND ECX, 3
REP MOVSB
MOV EAX, EBX
}
} }
char buffer[11]=""; char buffer[11]="";
inline fastcall dword IntToStr(dword ESI) inline fastcall dword IntToStr( ESI)
{ {
$mov edi, #buffer $mov edi, #buffer
$mov ecx, 10 $mov ecx, 10
@ -310,7 +344,7 @@ inline fastcall dword StrToInt()
} }
inline fastcall int strcmp(ESI, EDI) inline fastcall int strcmp( ESI, EDI)
{ {
loop() loop()
{ {
@ -322,7 +356,7 @@ inline fastcall int strcmp(ESI, EDI)
} }
} }
inline fastcall unsigned int find_symbol(ESI,BL) inline fastcall unsigned int find_symbol( ESI,BL)
{ {
int jj=0, last=-1; int jj=0, last=-1;
do{ do{
@ -334,7 +368,7 @@ inline fastcall unsigned int find_symbol(ESI,BL)
} }
inline fastcall dword upcase(dword ESI) inline fastcall dword upcase( ESI)
{ {
do{ do{
AL=DSBYTE[ESI]; AL=DSBYTE[ESI];
@ -343,7 +377,7 @@ inline fastcall dword upcase(dword ESI)
}while(AL!=0); }while(AL!=0);
} }
inline fastcall lowcase(ESI) inline fastcall lowcase( ESI)
{ {
do{ do{
$LODSB $LODSB
@ -355,6 +389,15 @@ inline fastcall lowcase(ESI)
}while(AL!=0); }while(AL!=0);
} }
byte fastcall TestBit( EAX, CL)
{
$shr eax,cl
$and eax,1
}
//------------------------------------------------------------------------------
void DefineAndDrawWindow(dword x,y,sizeX,sizeY,byte mainAreaType,dword mainAreaColour,byte headerType,dword headerColour,EDI) void DefineAndDrawWindow(dword x,y,sizeX,sizeY,byte mainAreaType,dword mainAreaColour,byte headerType,dword headerColour,EDI)
{ {
@ -375,14 +418,14 @@ void DefineAndDrawWindow(dword x,y,sizeX,sizeY,byte mainAreaType,dword mainAreaC
} }
inline fastcall int CreateThread(dword ECX,EDX) inline fastcall int CreateThread( ECX,EDX)
{ {
EAX = 51; EAX = 51;
EBX = 1; EBX = 1;
$int 0x40 $int 0x40
} }
inline fastcall int GetSlot(dword ECX) inline fastcall int GetSlot( ECX)
{ {
EAX = 18; EAX = 18;
EBX = 21; EBX = 21;
@ -430,7 +473,8 @@ void PutPaletteImage(dword EBX,w,h,x,y,ESI,EDI)
$int 0x40 $int 0x40
} }
inline fastcall void PutPixel(dword EBX,ECX,EDX){ inline fastcall void PutPixel( EBX,ECX,EDX)
{
EAX=1; EAX=1;
$int 0x40 $int 0x40
} }
@ -455,7 +499,7 @@ void DefineButton(dword x,y,w,h,EDX,ESI)
$int 0x40 $int 0x40
} }
inline fastcall void DeleteButton(dword EDX) inline fastcall void DeleteButton( EDX)
{ {
EAX = 8; EAX = 8;
EDX += BT_DEL; EDX += BT_DEL;
@ -500,7 +544,7 @@ void DrawFlatButton(dword x,y,width,height,id,color,text)
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
inline fastcall void debug(dword EDX) inline fastcall void debug( EDX)
{ {
$push ebx $push ebx
$push ecx $push ecx