diff --git a/programs/network/htmlv/browser/HTMLv.c b/programs/network/htmlv/browser/HTMLv.c index 3d96830e60..2bb0e2ff8f 100644 --- a/programs/network/htmlv/browser/HTMLv.c +++ b/programs/network/htmlv/browser/HTMLv.c @@ -13,20 +13,18 @@ #include "..\lib\libio_lib.h" #include "..\lib\libimg_lib.h" #include "..\lib\edit_box_lib.h" -#include "..\lib\scroll_bar\scroll_lib.h" +#include "..\lib\scroll_lib.h" #include "..\lib\ttf_fonts.h" //ърЁЄшэъш #include "img\toolbar_icons.c" #include "img\URLgoto.txt"; -#define DEBUG_ON 0 - //яхЁхьхээ√х char URL[4096], editURL[4096], page_links[12000], - header[512]; + header[300]; struct lines{ int visible, all, first, column_max; @@ -88,6 +86,7 @@ void main() if (m.pkm) && (m.y>WB1.top) && (m.y bword; bword++;) {//ESBYTE[bword] - bukva = ESBYTE[bword]; - switch (bukva) { + for ( ; buf+filesize > bword; bword++;) + { + bukva = ESBYTE[bword]; + if (ignor_text) && (bukva<>'<') continue; + switch (bukva) + { case 0x0a: if (pre_text) { - bukva = ''; - temp = ''; + bukva = temp = ''; goto NEXT_MARK; } case '\9': @@ -364,11 +367,14 @@ void TWebBrowser::ParseHTML(dword bword){ { bukva = ESBYTE[bword]; if (bukva == '\9') || (bukva == '\x0a') || (bukva == '\x0d') bukva = ' '; - if (!ignor_param) && (bukva <>' ') strcat(#tag, #bukva); + if (!ignor_param) && (bukva <>' ') + { + if (strlen(#tag)';') && (j < 7); j++, bword++;) @@ -431,7 +436,6 @@ void TWebBrowser::ParseHTML(dword bword){ break; default: DEFAULT_MARK: - if (ignor_text) break; if (!pre_text) && (bukva == ' ') && (line[strlen(#line)-1]==' ') break; // if (stolbec + strlen(#line) > lines.column_max) @@ -501,7 +505,7 @@ void TWebBrowser::WhatTextStyle(int left1, top1, width1) { return; } - IF (ignor_text == 1) return; + IF (ignor_text) return; IF(!chTag("q")) strcat(#line, "\""); @@ -559,7 +563,7 @@ void TWebBrowser::WhatTextStyle(int left1, top1, width1) { return; } - ////////////////////////// + if (!chTag("a")) { if (rez) @@ -597,7 +601,7 @@ void TWebBrowser::WhatTextStyle(int left1, top1, width1) { } return; } - ///////////////////////// + if (!chTag("font")) { if (rez) @@ -619,7 +623,7 @@ void TWebBrowser::WhatTextStyle(int left1, top1, width1) { if (text_color_index > 0) text_color_index--; return; } - ////////////////////////// + if(!chTag("tr")) || (!chTag("br")) { TextGoDown(left1, top1, width1); return; @@ -634,7 +638,7 @@ void TWebBrowser::WhatTextStyle(int left1, top1, width1) { IF(rez) TextGoDown(left1, top1 + 10, width1); return; } - //////////////////////////// + if (!chTag("h1")) || (!chTag("h2")) || (!chTag("h3")) || (!chTag("h4")) { TextGoDown(left1, top1, width1); IF(rez) TextGoDown(left1, top1 + 10, width1); diff --git a/programs/network/htmlv/browser/include/parce_tag.h b/programs/network/htmlv/browser/include/parce_tag.h index 28e48b8231..48923ed8c8 100644 --- a/programs/network/htmlv/browser/include/parce_tag.h +++ b/programs/network/htmlv/browser/include/parce_tag.h @@ -10,17 +10,23 @@ void GetNextParam() i--; } - IF (kavichki) + if (kavichki) { i=strrchr(#tagparam, kavichki); - strcpy(#options, #tagparam + i); + if (i>sizeof(options)) + strcpy(#options, #tagparam + sizeof(options)); + else + strcpy(#options, #tagparam + i); } - ELSE + else { WHILE((i > 0) && (tagparam[i] <>'=')) i--; //i=strrchr(#tagparam, '=')+1; i++; - - strcpy(#options, #tagparam + i); //ъюяшЁєхь юяЎш■ + if (i>sizeof(options)) + strcpy(#options, #tagparam + sizeof(options)); + else + strcpy(#options, #tagparam + i); + WHILE (options[0] == ' ') strcpy(#options, #options+1); } tagparam[i] = 0x00; @@ -31,6 +37,10 @@ void GetNextParam() tagparam[i + 1] = 0x00; } - strcpy(#parametr, #tagparam + i + 1); //ъюяшЁєхь ярЁрьхЄЁ + if (i>sizeof(parametr)) + strcpy(#parametr, #tagparam + sizeof(parametr)); + else + strcpy(#parametr, #tagparam + i + 1); + tagparam[i] = 0x00; -} +} \ No newline at end of file diff --git a/programs/network/htmlv/lib/scroll_bar/scroll_dll.h b/programs/network/htmlv/lib/scroll_bar/scroll_dll.h deleted file mode 100644 index 77477fb0b1..0000000000 --- a/programs/network/htmlv/lib/scroll_bar/scroll_dll.h +++ /dev/null @@ -1,43 +0,0 @@ -:int load_dll3(dword dllname, import_table) -{ - EAX = 68; - EBX = 19; - ECX = dllname; - $int 0x40 - IF(EAX==0) GOTO exit3; - - EDX = EAX; - ESI = import_table; - -@import_loop3: - $lodsd - IF(EAX==0) GOTO import_done3; - $push edx -@import_find3: - EBX = DSDWORD[EDX]; - IF(EBX==0) GOTO exit3; - $push eax -@next3: - CL = DSBYTE[EAX]; - $cmp CL,DSBYTE[EBX]; - $jnz import_find_next3 - IF (CL==0) GOTO import_found3; - EAX++; - EBX++; - goto next3; -@import_find_next3: - $pop eax - EDX = EDX + 8; - goto import_find3; -@import_found3: - $pop ebx - EAX = DSDWORD[EDX+4]; - DSDWORD[ESI-4] = EAX; - $pop edx - - goto import_loop3; -@import_done3: - return 0; -@exit3: - return -1; -} diff --git a/programs/network/htmlv/lib/scroll_bar/scroll_lib.h b/programs/network/htmlv/lib/scroll_bar/scroll_lib.h deleted file mode 100644 index 27e88a36a2..0000000000 --- a/programs/network/htmlv/lib/scroll_bar/scroll_lib.h +++ /dev/null @@ -1,95 +0,0 @@ -//lev -//:dword boxlib = #abox_lib; -:char abox_lib[]="/sys/lib/box_lib.obj"; - -:char aboxlib_init[] = "lib_init"; -:char aScrollbar_v_draw = "scrollbar_v_draw"; -:char aScrollbar_v_mouse = "scrollbar_v_mouse"; -:char aScrollbar_h_draw = "scrollbar_h_draw"; -:char aScrollbar_h_mouse = "scrollbar_h_mouse"; -:char aVersion_scrollbar = "version_scrollbar"; - -dword boxlib_init = #aboxlib_init; -dword scrollbar_v_draw = #aScrollbar_v_draw; -dword scrollbar_v_mouse = #aScrollbar_v_mouse; -dword scrollbar_h_draw = #aScrollbar_h_draw; -dword scrollbar_h_mouse = #aScrollbar_h_mouse; -:dword version_scrollbar = #aVersion_scrollbar; - -dword sc_am__ = 0x0; -dword sc_bm__ = 0x0; - -struct scroll_bar -{ -//scroll_bar: -word size_x,// equ [edi] -start_x,// equ [edi+2] -size_y,// equ [edi+4] -start_y;// equ [edi+6] -dword btn_height, // equ [edi+8] -type,// equ [edi+12] -max_area,// equ [edi+16] -cur_area,// equ [edi+20] -position,// equ [edi+24] -bckg_col,// equ [edi+28] -frnt_col,// equ [edi+32] -line_col,// equ [edi+36] -redraw;// equ [edi+40] -word delta,// equ [edi+44] -delta2,// equ [edi+46] -r_size_x,// equ [edi+48] -r_start_x,// equ [edi+50] -r_size_y,// equ [edi+52] -r_start_y;// equ [edi+54] -dword m_pos,// equ [edi+56] -m_pos_2,// equ [edi+60] -m_keys,// equ [edi+64] -run_size,// equ [edi+68] -position2,// equ [edi+72] -work_size,// equ [edi+76] -all_redraw,// equ [edi+80] -ar_offset;// equ [edi+84] -}; - -/*scroll_bar scroll1 = { -18,//word size_x, -200, //start_x, -398, //size_y, -44,//start_y; -18,//dword btn_height, -0,//type, -115,//max_area, (100+cur_area) -15,//cur_area, -0,//position, -0xeeeeee,//bckg_col, -0xD2CED0,//frnt_col, -0x555555,//line_col, -0,//redraw; -0,//word delta, -0,//delta2, -0,//r_size_x, -0,//r_start_x, -0,//r_size_y, -0,//r_start_y; -0,//dword m_pos, -0,//m_pos_2, -0,//m_keys, -0,//run_size, -0,//position2, -0,//work_size, -1,//all_redraw, -1//ar_offset; -};*/ - -//btn_height - высота боковых кнопок (левая и правая для гориз. и верхняя и нижняя для верт.) -//type - type - 0-1-2, остальные выглядят как 0. -//max_area - область максимальная, актуально когда не влазит в отображаемую область, т.е. случай активности компонента (весь максимальный размер документа) -//cur_area - размер бегунка//область отображаемая (какая часть документа влазит в экран) -//position - позиция бегунка изменяемая от 0 до значения (max_area-cur_area) -//bckg_col - цвет внутренний, применяется для областей между бегунком и кноками -//frnt_col - цвет наружный, применяется для областей отличных от применяемых в bckg_col -//line_col - цвет линий и стрелок на кнопках -//redraw - индикатор необходимости перерисовки управляемой области учитывая изменение position и cur_area -//delta2 - индикатор захвата фокуса скроллбаром (удержание бегунка) -//all_redraw - флаг устанавливаемый в 1 для перерисовки всего компонента, если поставить 0, то перерисовка происходит только для области бегунка. Введено для ускорения отрисовки, поскольку не во всех случаях требуется принудитеьно отрисовывать все части компонента. Когда вызывается по событию мыши всегда отрисовывается самим компонентом со значением 0. -//ar_offset - величина смещения при однократном нажатии боковой кнопки.