diff --git a/programs/network/htmlv/browser/HTMLv.c-- b/programs/network/htmlv/browser/HTMLv.c-- index 3cbdadf65..06061e039 100644 --- a/programs/network/htmlv/browser/HTMLv.c-- +++ b/programs/network/htmlv/browser/HTMLv.c-- @@ -21,10 +21,10 @@ char URL[4096], page_links[12000], header[512]; -int max_kolvo_strok, //lines_visible - max_kolvo_stolbcov, - count, //lines_all - za_kadrom, //lines_first +int lines_visible, + lines_all, + lines_first, + lines_column_max, mouse_dd; 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; byte key; - int scroll_size; + int half_scroll_size; mem_Init(); load_dll2(libio, #libio_init,1); @@ -50,9 +50,9 @@ void main() load_dll2(boxlib, #edit_box_draw,0); load_dll2(#abox_lib, #boxlib_init,0); - if (param) copystr(#param,#URL); - else copystr("/sys/index.htm",#URL); - copystr(#URL,#editURL); + if (param) strcpy(#URL, #param); + else strcpy(#URL, "/sys/index.htm"); + strcpy(#editURL, #URL); OpenPage(); @@ -64,9 +64,9 @@ void main() { CASE evMouse: /*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); //break; };*/ @@ -85,33 +85,32 @@ void main() IF (m.vert==65535) //прокрутка колёсиком { - IF (za_kadrom==0) break; - IF (za_kadrom>3) za_kadrom-=2; ELSE za_kadrom=1; + IF (lines_first==0) break; + IF (lines_first>3) lines_first-=2; ELSE lines_first=1; WB1.Scan(ID1); break; } 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 { - za_kadrom+=2; + lines_first+=2; WB1.Scan(ID2); } break; } - IF (count=WB1.width-14) && (m.x<=WB1.width+6) && (m.y>WB1.top+16) && (m.ymax_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; //если курсор над окном - btn=za_kadrom; //сохраняем старое количество - j= scroll_size/2; - za_kadrom = m.y -j -WB1.top * count / WB1.height; - IF (max_kolvo_strok+za_kadrom>count) za_kadrom=count-max_kolvo_strok; - IF (btn<>za_kadrom) WB1.ParseHTML(buf, filesize); //чтоб лишний раз не перерисовывать + IF (half_scroll_size/2+WB1.top>m.y) || (m.y<0) || (m.y>4000) m.y=half_scroll_size/2+WB1.top; //если курсор над окном + btn=lines_first; //сохраняем старое количество + lines_first = m.y -half_scroll_size -WB1.top * lines_all / WB1.height; + IF (lines_visible+lines_first>lines_all) lines_first=lines_all-lines_visible; + IF (btn<>lines_first) WB1.ParseHTML(buf, filesize); //чтоб лишний раз не перерисовывать m.get(); } @@ -147,10 +146,10 @@ void main() { if (GetProcessSlot(downloader_id)<>0) break; downloader_id=0; + lines_first = lines_all = 0; ReadHtml(); if (filesize) wintodos(buf); Draw_Window(); - //WB1.ShowPage(#URL); } } } @@ -159,16 +158,17 @@ void main() void Draw_Window() { + int j; DefineAndDrawWindow(215,100,640,480,0x73,0x00E4DFE1,0,0,0); GetProcessInfo(#Form, SelfInfo); - IF (Form.status_window>2) //если свернуто в заголовок, ничего не рисуем + if (Form.status_window>2) //если свернуто в заголовок, ничего не рисуем { DrawTitle(#header); return; } - IF (Form.height<120) MoveSize(OLD,OLD,OLD,120); - IF (Form.width<280) MoveSize(OLD,OLD,280,OLD); + if (Form.height<120) MoveSize(OLD,OLD,OLD,120); + if (Form.width<280) MoveSize(OLD,OLD,280,OLD); PutPaletteImage(#toolbar,200,42,0,0,8,#toolbar_pal); 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(0,42,onLeft(5,4),1,0xE2DBDC); //выпуклость 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); DefineButton(onLeft(37,0),15, 18, 16, GOTOURL+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.width=Form.width-13; WB1.height=onTop(43,5); - max_kolvo_stolbcov = WB1.width - 30 / 6; - max_kolvo_strok = WB1.height - 3 / 10 - 2; + lines_column_max = WB1.width - 30 / 6; + lines_visible = WB1.height - 3 / 10 - 2; WB1.ShowPage(#URL); } diff --git a/programs/network/htmlv/browser/TWB.h b/programs/network/htmlv/browser/TWB.h index 3f05816f3..2ecf5e835 100644 --- a/programs/network/htmlv/browser/TWB.h +++ b/programs/network/htmlv/browser/TWB.h @@ -1,15 +1,15 @@ int downloader_id; -dword j, +dword buf, filesize, - blink = 400; + blink; int i; char download_path[]="/rd/1/.download"; 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 { @@ -60,20 +60,18 @@ void TWebBrowser::Scan(int id) //#1 if (URL[0] == '#') { - copystr(#URL+find_symbol(#URL, '#'), #anchor); + strcpy(#anchor, #URL+find_symbol(#URL, '#')); - copystr(BrowserHistory.CurrentUrl(), #URL); - //copystr(#editURL, #URL + strlen(#URL)); - //copystr(#URL, #editURL); + strcpy(#URL, BrowserHistory.CurrentUrl()); - za_kadrom=count-max_kolvo_strok; + lines_first=lines_all-lines_visible; ShowPage(#URL); return; } //liner.ru#1 if (find_symbol(#URL, '#')<>-1) { - copystr(#URL+find_symbol(#URL, '#'), #anchor); + strcpy(#anchor, #URL+find_symbol(#URL, '#')); 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")) { RunProgram("/sys/media/kiv", #URL); - copystr(BrowserHistory.CurrentUrl(), #URL); + strcpy(#URL, BrowserHistory.CurrentUrl()); return; } @@ -90,7 +88,7 @@ void TWebBrowser::Scan(int id) return; } - IF(count < max_kolvo_strok) SWITCH(id) //если мало строк игнорируем некоторые кнопки + IF(lines_all < lines_visible) SWITCH(id) //если мало строк игнорируем некоторые кнопки { CASE 183: CASE 184: CASE 180: CASE 181: return; } switch (id) @@ -127,7 +125,7 @@ void TWebBrowser::Scan(int id) Draw_Window(); return; } - anchor_line_num=za_kadrom; //весёлый костыль :Р + anchor_line_num=lines_first; //весёлый костыль :Р anchor[0]='|'; OpenPage(); return; @@ -139,44 +137,44 @@ void TWebBrowser::Scan(int id) return; case HOME: - copystr("http://kolibri-os.narod.ru", #editURL); + strcpy(#editURL, "http://kolibri-os.narod.ru"); case GOTOURL: case 0x0D: //enter - copystr(#editURL, #URL); + strcpy(#URL, #editURL); OpenPage(); return; case 173: //ctrl+enter case SEARCHWEB: - copystr(#search_path, #URL); - copystr(#editURL, #URL + strlen(#URL)); + strcpy(#URL, #search_path); + strcat(#URL, #editURL); OpenPage(); return; case ID1: //мотаем вверх - IF(za_kadrom <= 0) return; - za_kadrom--; + IF(lines_first <= 0) return; + lines_first--; break; case ID2: //мотаем вниз - IF(max_kolvo_strok + za_kadrom >= count) return; - za_kadrom++; + IF(lines_visible + lines_first >= lines_all) return; + lines_first++; break; case 183: //PgDown - IF(za_kadrom == count - max_kolvo_strok) return; - za_kadrom += max_kolvo_strok + 2; - IF(max_kolvo_strok + za_kadrom > count) za_kadrom = count - max_kolvo_strok; + IF(lines_first == lines_all - lines_visible) return; + lines_first += lines_visible + 2; + IF(lines_visible + lines_first > lines_all) lines_first = lines_all - lines_visible; BREAK; case 184: //PgUp - IF(za_kadrom == 0) RETURN; - za_kadrom -= max_kolvo_strok - 2; - IF(za_kadrom < 0) za_kadrom = 0; + IF(lines_first == 0) RETURN; + lines_first -= lines_visible - 2; + IF(lines_first < 0) lines_first = 0; BREAK; case 180: //home - IF(za_kadrom == 0) RETURN; - za_kadrom = 0; + IF(lines_first == 0) RETURN; + lines_first = 0; BREAK; case 181: //end - IF (za_kadrom == count - max_kolvo_strok) RETURN; - za_kadrom = count - max_kolvo_strok; + IF (lines_first == lines_all - lines_visible) RETURN; + lines_first = lines_all - lines_visible; BREAK; default: RETURN; @@ -187,12 +185,12 @@ void TWebBrowser::Scan(int id) 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] <> '/') && (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: @@ -203,14 +201,14 @@ void GetNewUrl(){ IF (!strcmp(get_URL_part(3),"../")) //на уровень вверх { - copystr(#URL+3,#URL); + strcpy(#URL,#URL+3); editURL[find_symbol(#editURL, '/')-1] = 0x00; //обрезаем её урл до последнего / goto _CUT_ST_LEVEL_MARK; } - if (editURL[strlen(#editURL)-1]<>'/') copystr("/", #editURL + strlen(#editURL)); - copystr(#URL, #editURL + strlen(#editURL)); //клеим новый адрес - copystr(#editURL, #URL); + if (editURL[strlen(#editURL)-1]<>'/') strcat(#editURL, "/"); + strcat(#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); KillProcess(downloader_id); - copystr(#URL, #editURL); + strcpy(#editURL, #URL); BrowserHistory.AddUrl(); - za_kadrom = count = 0; if (!strcmp(get_URL_part(5),"http:"))) { - copystr(#version, #header); KillProcess(downloader_id); //убиваем старый процесс DeleteFile(#download_path); IF (URL[strlen(#URL)-1]=='/') URL[strlen(#URL)-1]=''; @@ -262,6 +258,7 @@ void OpenPage() Draw_Window(); return; } + lines_first = lines_all = 0; ReadHtml(); if (filesize) wintodos(buf); WB1.ShowPage(#URL); @@ -294,25 +291,29 @@ void TWebBrowser::ShowPage(dword adress) void TWebBrowser::ParseHTML(dword bword, fsize){ word bukva[1]; + int j; byte ignor_param = 0; char temp[768]; - stroka = -za_kadrom; + + stroka = -lines_first; 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 = li_text = link = ignor_text = text_color_index = text_colors[0] = li_tab = 0; //обнуляем теги link_color = 0x0000FF; bg_color = 0xFFFFFF; - blink = 400; line = ''; - copystr("|", #page_links); - copystr(#version, #header); - IF(!strcmp(#URL + strlen(#URL) - 4, ".txt")) + strcpy(#page_links,"|"); + strcpy(#header,#version); + if (!strcmp(#URL + strlen(#URL) - 4, ".txt")) { DrawBar(left, top, width-15, 15, bg_color); //закрашиваем первую строку 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++;) { bukva = ESBYTE[bword]; switch (bukva) { @@ -328,7 +329,7 @@ void TWebBrowser::ParseHTML(dword bword, fsize){ tab_len=strlen(#line)/8; tab_len=tab_len*8; tab_len=8+tab_len-strlen(#line); - for (i=0; i, дерзко + if (ESBYTE[bword] == '!') //фильтрация внутри , дерзко { bword++; - IF(ESBYTE[bword] == '-') { + if (ESBYTE[bword] == '-') { HH_: do { bword++; IF(bword >= buf + fsize) break 1; } while (ESBYTE[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]; - IF(bukva == '\9') || (bukva == '\x0a') || (bukva == '\x0d') bukva = ' '; - IF(!ignor_param) && (bukva <>' ') copystr(#bukva, #tag + strlen(#tag)); - ELSE { + if (bukva == '\9') || (bukva == '\x0a') || (bukva == '\x0d') bukva = ' '; + if (!ignor_param) && (bukva <>' ') strcat(#tag, #bukva); + else + { ignor_param = true; - copystr(#bukva, #tagparam + strlen(#tagparam)); + strcat(#tagparam, #bukva); } bword++; } lowcase(#tag); lowcase(#tagparam); - IF (tag[strlen(#tag)-1]=='/') tag[strlen(#tag)-1]=''; //небольшой фикс для работы с XHTML-тегами типа br/ - IF(strlen(#tagparam) > 0) && (strlen(#tagparam) < 4000) GetNextParam(); + if (tag[strlen(#tag)-1]=='/') tag[strlen(#tag)-1]=''; //небольшой фикс для работы с XHTML-тегами типа br/ + if (strlen(#tagparam) > 0) && (strlen(#tagparam) < 4000) GetNextParam(); WhatTextStyle(left + 5, stroka * 10 + top + 5, width - 20); //обработка тегов line = tag = parametr = tagparam = ignor_param = 0; //всё обнуляем break; 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++; bukva=ESBYTE[bword]; - copystr(#bukva, #temp); + strcpy(#temp,#bukva); bword++; bukva=ESBYTE[bword]; - copystr(#bukva, #temp + strlen(#temp)); + strcat(#temp,#bukva); bukva=Hex2Symb(#temp); - IF (bukva) goto DEFAULT_MARK; + if (bukva) goto DEFAULT_MARK; break; case '&': //обработка тегов типа   - IF(ignor_text) break; + if (ignor_text) break; bword++; tag=''; - FOR (j=0; (ESBYTE[bword] <>';') && (j < 7); j++; bword++;) + for (j=0; (ESBYTE[bword] <>';') && (j < 7); j++, 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; } } 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]; GOTO DEFAULT_MARK; //обрабатываем букву } - //WriteDebug(#tag); //тэг не найден - выводим на доску отладки - copystr(#tag, #line + strlen(#line)); //выводим на экран необработанный тег, так браузеры зачем-то делают + //debug(#tag); //тэг не найден - выводим на доску отладки + strcat(#line,#tag); //выводим на экран необработанный тег, так браузеры зачем-то делают break; default: DEFAULT_MARK: 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; - 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); //вывод строки 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; - copystr(#bukva, #line + strlen(#line)); + if (!pre_text) && (bukva == ' ') && (!stolbec) && (!line) CONTINUE; + 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); //закрашиваем первую строку если какой-то рахит не создал тег боди - if (max_kolvo_strok * 10 + 25 <= height) - DrawBar(left, max_kolvo_strok * 10 + top + 25, width - 15, -max_kolvo_strok * 10 + height - 25, bg_color); + if (lines_visible * 10 + 25 <= height) + DrawBar(left, lines_visible * 10 + top + 25, width - 15, -lines_visible * 10 + height - 25, bg_color); if (stroka * 10 + 15 <= height) 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) { - anchor[0]=''; - za_kadrom=anchor_line_num; + anchor=''; + lines_first=anchor_line_num; ParseHTML(buf, filesize); } @@ -466,15 +469,15 @@ void GetNextParam() IF (kavichki) { i=find_symbol(#tagparam, kavichki); - copystr(#tagparam + i, #options); + strcpy(#options, #tagparam + i); } ELSE { WHILE((i > 0) && (tagparam[i] <>'=')) i--; //i=find_symbol(#tagparam, '=')+1; i++; - copystr(#tagparam + i, #options); //копируем опцию - WHILE (options[0] == ' ') copystr(#options + 1, #options); + strcpy(#options, #tagparam + i); //копируем опцию + WHILE (options[0] == ' ') strcpy(#options, #options+1); } tagparam[i] = 0x00; @@ -487,7 +490,7 @@ void GetNextParam() } } - copystr(#tagparam + i + 1, #parametr); //копируем параметр + strcpy(#parametr, #tagparam + i + 1); //копируем параметр tagparam[i] = 0x00; } @@ -499,13 +502,13 @@ void TWebBrowser::WhatTextStyle(int left1, top1, width1) { dword image=0; char temp[4096]; - int w, h, img_za_kadrom=0; + int w, h, img_lines_first=0; //проверяем тег открывается или закрывается IF(tag[0] == '/') { rez = 0; - copystr(#tag + 1, #tag); + strcpy(#tag, #tag+1); } ELSE rez = 1; @@ -519,9 +522,9 @@ void TWebBrowser::WhatTextStyle(int left1, top1, width1) { if(!chTag("title")) && (!rez) { - copystr(#line, #header); - copystr(" -", #header + strlen(#header)); - copystr(#version, #header + strlen(#header)); + strcpy(#header, #line); + strcat(#header, " -"); + strcat(#header, #version); if (stroka==0) DrawTitle(#header); 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); //может тут рисовать белую строку? IF (b_text) { $add ebx, 1<<16 $int 0x40 } @@ -553,7 +556,7 @@ void TWebBrowser::WhatTextStyle(int left1, top1, width1) { { 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: 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--; //если какой-то долбоёб не закрыл тэг link = 1; blink++; text_color_index++; text_colors[text_color_index] = link_color; - copystr(#options, #page_links + strlen(#page_links)); - copystr("|", #page_links + strlen(#page_links)); + strcat(#page_links, #options); + strcat(#page_links, "|"); } if (anchor) && (!strcmp(#parametr, "name=")) { if (!strcmp(#anchor, #options)) { - anchor_line_num=za_kadrom+stroka; + anchor_line_num=lines_first+stroka; } } if (tagparam) @@ -623,7 +626,7 @@ void TWebBrowser::WhatTextStyle(int left1, top1, width1) { ///////////////////////// if (!chTag("font")) { - IF (stroka - 1 > max_kolvo_strok) return; + IF (stroka - 1 > lines_visible) return; COL_MARK: if (strcmp(#parametr, "color=") == 0) //&& (parametr[1] == '#') { @@ -638,34 +641,37 @@ void TWebBrowser::WhatTextStyle(int left1, top1, width1) { return; } ////////////////////////// - IF(!chTag("tr")) || (!chTag("br")) { + if(!chTag("tr")) || (!chTag("br")) { TextGoDown(left1, top1, width1); return; } - IF(!chTag("div")) { + if (!chTag("div")) { IF(oldtag[0] <>'h') TextGoDown(left1, top1, width1); return; } - IF(!chTag("p")) { + if (!chTag("p")) { IF(oldtag[0] == 'h') return; TextGoDown(left1, top1, width1); IF(rez) TextGoDown(left1, top1 + 10, width1); return; } //////////////////////////// - IF(!chTag("h1")) || (!chTag("h2")) || (!chTag("h3")) || (!chTag("h4")) { + if (!chTag("h1")) || (!chTag("h2")) || (!chTag("h3")) || (!chTag("h4")) { TextGoDown(left1, top1, width1); IF(rez) TextGoDown(left1, top1 + 10, width1); b_text = rez; - copystr(#tag, #oldtag); + strcpy(#oldtag, #tag); return; - } ELSE copystr("", #oldtag); - IF(!chTag("b")) || (!chTag("strong")) || (!chTag("big")) { + } + else + oldtag=''; + + if (!chTag("b")) || (!chTag("strong")) || (!chTag("big")) { b_text = rez; return; } //////////////////////////// - IF(!chTag("i")) || (!chTag("em")) || (!chTag("subtitle")) { + if(!chTag("i")) || (!chTag("em")) || (!chTag("subtitle")) { i_text = rez; return; } @@ -683,7 +689,7 @@ void TWebBrowser::WhatTextStyle(int left1, top1, width1) { li_text = rez; IF(rez == 0) return; 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; } //////////////////////////// @@ -711,9 +717,9 @@ void TWebBrowser::WhatTextStyle(int left1, top1, width1) { IMG_TAG: IF (strcmp(#parametr,"src=")==0) //надо объединить с GetNewUrl() { - copystr(BrowserHistory.CurrentUrl(), #temp); //достаём адрес текущей страницы + strcpy(#temp, BrowserHistory.CurrentUrl()); //достаём адрес текущей страницы temp[find_symbol(#temp, '/')] = 0x00; //обрезаем её урл до последнего / - copystr(#options,#temp+strlen(#temp)); + strcat(#temp, #options); image=load_image(#temp); w=DSWORD[image+4]; @@ -735,19 +741,19 @@ void TWebBrowser::WhatTextStyle(int left1, top1, width1) { if (top1WB1.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; } 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); IF (link) { @@ -767,7 +773,7 @@ void TWebBrowser::WhatTextStyle(int left1, top1, width1) { META: 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")) { @@ -784,7 +790,7 @@ void TWebBrowser::WhatTextStyle(int left1, top1, width1) { ReadHtml(); } } - IF(tagparam) + if (tagparam) { GetNextParam(); goto META; @@ -800,16 +806,16 @@ void TextGoDown(int left1, top1, width1) IF(blq_text == 1) stolbec = 8; ELSE stolbec = 0; 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() //не оптимальная отрисовка, но зато в одном месте { - scroll1.max_area = count; - scroll1.cur_area = max_kolvo_strok; - scroll1.position = za_kadrom; + scroll1.max_area = lines_all; + scroll1.cur_area = lines_visible; + scroll1.position = lines_first; scroll1.all_redraw=1; scroll1.start_x=Form.width-28; //left + width - 15 diff --git a/programs/network/htmlv/browser/include/history.h b/programs/network/htmlv/browser/include/history.h index dd3e48a1b..8e4b6f99a 100644 --- a/programs/network/htmlv/browser/include/history.h +++ b/programs/network/htmlv/browser/include/history.h @@ -30,11 +30,11 @@ void UrlsHistory::AddUrl() // history_current/=2; for (i=0; i'|'); } page_links[j] = 0x00; - copystr(#page_links[find_symbol(#page_links, '|')], #URL); + strcpy(#URL, #page_links[find_symbol(#page_links, '|')]); } diff --git a/programs/network/htmlv/lib/kolibri.h-- b/programs/network/htmlv/lib/kolibri.h-- index d69a0eb76..5587de843 100644 --- a/programs/network/htmlv/lib/kolibri.h-- +++ b/programs/network/htmlv/lib/kolibri.h-- @@ -30,9 +30,10 @@ char program_path[4096]; #define false 0 //------------------------------------------------------------------------- -struct mouse{ - dword x,y,lkm,pkm,hor,vert; - void get(); +struct mouse +{ + dword x,y,lkm,pkm,hor,vert; + void 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; void get(); }; + void system_colors::get() { EAX = 48; @@ -80,22 +83,25 @@ void system_colors::get() //------------------------------------------------------------------------------ -inline fastcall dword WaitEvent(){ +inline fastcall dword WaitEvent() +{ $mov eax,10 $int 0x40 } -inline fastcall dword CheckEvent(){ +inline fastcall dword CheckEvent() +{ $mov eax,11 $int 0x40 } -inline fastcall dword WaitEventTimeout(dword EBX){ +inline fastcall dword WaitEventTimeout( EBX) +{ $mov eax,23 $int 0x40 } -inline fastcall SetEventMask(dword EBX) +inline fastcall SetEventMask( EBX) { $mov eax,40 $int 0x40 @@ -109,7 +115,8 @@ inline fastcall ScancodesGeting(){ } -inline fastcall word GetKey(){ //Gluk fix +inline fastcall word GetKey() //+Gluk fix +{ $push edx @getkey: $mov eax,2 @@ -127,21 +134,24 @@ inline fastcall word GetKey(){ //Gluk fix } -inline fastcall Pause(dword EBX) -{ //Џ г§ , ў б®вле ¤®«пе ᥪ㭤л EBX = value +inline fastcall Pause( EBX) +{ $mov eax, 5 $int 0x40 } -//================================================================== +//------------------------------------------------------------------------------ -inline fastcall word GetButtonID(){ +inline fastcall word GetButtonID() +{ $mov eax,17 $int 0x40 $shr eax,8 } -struct proc_info{ +struct proc_info +{ + #define SelfInfo -1 dword use_cpu; word pos_in_stack,num_slot,rezerv1; char name[11]; @@ -150,18 +160,17 @@ struct proc_info{ word status_slot,rezerv3; dword work_left,work_top,work_width,work_height; char status_window; - void GetInfo(dword ECX); + void GetInfo( ECX); byte reserved[1024-71]; -#define SelfInfo -1 }; -void GetProcessInfo(dword EBX, ECX) +void GetProcessInfo( EBX, ECX) { $mov eax,9; $int 0x40 } -int GetProcessSlot(ECX) //ECX = process ID +int GetProcessSlot( ECX) //ECX = process ID { EAX = 18; EBX = 21; @@ -176,28 +185,30 @@ inline fastcall int ActiveProcess() } -inline fastcall ExitProcess(){ +inline fastcall ExitProcess() +{ $mov eax,-1; $int 0x40 } -inline fastcall int KillProcess(dword ECX){ +inline fastcall int KillProcess( ECX) +{ $mov eax,18; $mov ebx,18; $int 0x40 } -//================================================================== +//------------------------------------------------------------------------------ //eax = язык системы (1=eng, 2=fi, 3=ger, 4=rus) -inline fastcall int GetSystemLanguage(){ - EAX = 26; - EBX = 5; - $int 0x40 - RETURN EAX; +inline fastcall int GetSystemLanguage() +{ + EAX = 26; + EBX = 5; + $int 0x40 } -inline fastcall void DrawTitle(dword ECX) +inline fastcall void DrawTitle( ECX) { EAX = 71; EBX = 1; @@ -228,13 +239,13 @@ inline fastcall dword GetScreenWidth() $and eax,0x0000FFFF } -inline fastcall MoveSize(dword EBX,ECX,EDX,ESI) +inline fastcall MoveSize( EBX,ECX,EDX,ESI) { EAX = 67; $int 0x40 } -inline fastcall dword LoadLibrary(dword ECX) +inline fastcall dword LoadLibrary( ECX) { $mov eax, 68 $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; ECX=-1; $REPNE $SCASB EAX-=2+ECX; } -inline fastcall copystr(dword ESI,EDI) + +inline fastcall strcpy( EDI, ESI) { $cld -l1: +l2: $lodsb $stosb $test al,al - $jnz l1 + $jnz l2 } - -byte fastcall TestBit(EAX, CL) +inline fastcall strcat( EDI, ESI) { - $shr eax,cl - $and eax,1 + asm { + 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]=""; -inline fastcall dword IntToStr(dword ESI) +inline fastcall dword IntToStr( ESI) { $mov edi, #buffer $mov ecx, 10 @@ -310,7 +344,7 @@ inline fastcall dword StrToInt() } -inline fastcall int strcmp(ESI, EDI) +inline fastcall int strcmp( ESI, EDI) { 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; 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{ AL=DSBYTE[ESI]; @@ -343,7 +377,7 @@ inline fastcall dword upcase(dword ESI) }while(AL!=0); } -inline fastcall lowcase(ESI) +inline fastcall lowcase( ESI) { do{ $LODSB @@ -355,6 +389,15 @@ inline fastcall lowcase(ESI) }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) { @@ -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; EBX = 1; $int 0x40 } -inline fastcall int GetSlot(dword ECX) +inline fastcall int GetSlot( ECX) { EAX = 18; EBX = 21; @@ -430,7 +473,8 @@ void PutPaletteImage(dword EBX,w,h,x,y,ESI,EDI) $int 0x40 } -inline fastcall void PutPixel(dword EBX,ECX,EDX){ +inline fastcall void PutPixel( EBX,ECX,EDX) +{ EAX=1; $int 0x40 } @@ -455,7 +499,7 @@ void DefineButton(dword x,y,w,h,EDX,ESI) $int 0x40 } -inline fastcall void DeleteButton(dword EDX) +inline fastcall void DeleteButton( EDX) { EAX = 8; 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 ecx