From 650e2989bd7f6e8d8736fd0c2d552000aa5971f6 Mon Sep 17 00:00:00 2001 From: "Kirill Lipatov (Leency)" Date: Sat, 10 Nov 2012 01:49:08 +0000 Subject: [PATCH] Text-based Browser 0.97.6: fixed stupid bug with TryeType fonts (no it will will be more faster), some small futures git-svn-id: svn://kolibrios.org@3020 a494cfbc-eb01-0410-851d-a64ba20cac60 --- programs/network/htmlv/browser/HTMLv.c | 31 +++++++++- programs/network/htmlv/browser/History.txt | 7 +++ programs/network/htmlv/browser/TWB.h | 34 +++------- programs/network/htmlv/lib/file_system.h | 16 ++++- programs/network/htmlv/lib/kolibri.h | 9 +++ programs/network/htmlv/lib/mem.h | 55 ++++++++--------- programs/network/htmlv/lib/strings.h | 72 +++++++++++----------- 7 files changed, 131 insertions(+), 93 deletions(-) diff --git a/programs/network/htmlv/browser/HTMLv.c b/programs/network/htmlv/browser/HTMLv.c index 1512801ac6..b06123946a 100644 --- a/programs/network/htmlv/browser/HTMLv.c +++ b/programs/network/htmlv/browser/HTMLv.c @@ -47,6 +47,35 @@ mouse m; #include "TWB.h" #include "include\menu_rmb.h" +/*void tre() +{ + char *font_picture; + char text[12]; + int width=600; + int height=40; + char palette[256*4]; + int x; + + + strcpy(#text, "hello world\0"); + + get_width stdcall (#text, -1, height); + width=EAX; + + font_picture=mem_Alloc(width*height); + truetype stdcall (#text, -1, font_picture, width, height); + + for (x=0;x<256;x++) { + palette[x*4]=255-x; + palette[x*4+1]=255-x; + palette[x*4+2]=255-x; + palette[x*4+3]=0; + } + + PutPaletteImage(font_picture,width,height,0,0,8,#palette); + mem_Free(font_picture); +};*/ + void main() { @@ -58,7 +87,7 @@ void main() mem_Init(); if (load_dll2(libio, #libio_init,1)!=0) debug("Не удалось подключить библиотеку libio"w); if (load_dll2(libimg, #libimg_init,1)!=0) debug("Не удалось подключить библиотеку libimg"w); - if (load_dll2(boxlib, #edit_box_draw,0)!=0) debug("Не удалось подключить библиотеку boxlib"w); + if (load_dll2(boxlib, #edit_box_draw,0)!=0) {RunProgram("@notify", "System Error: library doesn't exists /rd/1/lib/box_lib.obj"); ExitProcess();} load_dll2(#abox_lib, #boxlib_init,0); if (load_dll2(libtruetype, #truetype,0)!=0) {debug("Не удалось подключить библиотеку TrueType"w); use_truetype = 2;} diff --git a/programs/network/htmlv/browser/History.txt b/programs/network/htmlv/browser/History.txt index c81a34be97..4c2fd93b87 100644 --- a/programs/network/htmlv/browser/History.txt +++ b/programs/network/htmlv/browser/History.txt @@ -1,3 +1,10 @@ +10.11.12 - 0.97.6 +- нормальный запуск программы даже без библиотеки lib_img; +- оповещение если box_lib не найдена; +- исправлена ошибка приводящая к торможению при отображении + TrueType шрифтов; +- обновление библиотек. + 05.11.12 - 0.97.5 Переключалка на шрифты TrueType из меню ПКМ. diff --git a/programs/network/htmlv/browser/TWB.h b/programs/network/htmlv/browser/TWB.h index 3639f26e66..06fbf7021a 100644 --- a/programs/network/htmlv/browser/TWB.h +++ b/programs/network/htmlv/browser/TWB.h @@ -8,7 +8,7 @@ dword char download_path[]="/rd/1/.download"; char search_path[]="http://nigma.ru/index.php?s="; -char version[]=" Text-based Browser 0.97.5"; +char version[]=" Text-based Browser 0.97.6"; struct TWebBrowser { @@ -122,8 +122,7 @@ void TWebBrowser::Scan(int id) case 005: //truetype if (use_truetype == 2) { - debug("Не удалось подключить библиотеку TrueType"); - debug("/rd/1/lib/truetype.obj не обнаружен или имеет неправильный формат"); + RunProgram("@notify", "Library does not exists /rd/1/lib/truetype.obj"w); return; } if (use_truetype == 1) use_truetype=0; else use_truetype=1; @@ -550,7 +549,6 @@ void TWebBrowser::DrawPage() // { //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-3); - Pause(10); } else { @@ -780,7 +778,7 @@ void TWebBrowser::WhatTextStyle(int left1, top1, width1) { if (!chTag("img")) { - //if (GetFileInfo(#libimg)<>0) return; //если библиотеки нет + if (GetFileInfo(libimg)<>0) return; //если библиотеки нет IMG_TAG: if (!strcmp(#parametr,"src=")) //надо объединить с GetNewUrl() { @@ -806,21 +804,13 @@ void TWebBrowser::WhatTextStyle(int left1, top1, width1) { GOTO IMG_TAG; } - if (!image) - { - //debug(#tag); - return; - } - + if (!image) return; + if (w>width1) w=width1; - + if (stroka==0) DrawBar(left, top, width-15, 15, bg_color); //закрашиваем первую строку - stroka+=h/10; - - if (top1+hWB1.top+WB1.height-10) //если ВСЁ изображение ушло ВЕРХ или ВНИЗ - return; - + if (top1+hWB1.top+WB1.height-10) return; //если ВСЁ изображение ушло ВЕРХ или ВНИЗ if (top1WB1.top+WB1.height-h-15) //если часть изображения снизу IF (stroka - 2 < lines.visible) + if (top1>WB1.top+WB1.height-h-15) //если часть изображения снизу { h=WB1.top+WB1.height-top1-15; } - 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); - IF (link) - { - DefineButton(left1 - 5, top1+10, w, h, blink + BT_HIDE, 0xB5BFC9); - } - + IF (link) DefineButton(left1 - 5, top1+10, w, h, blink + BT_HIDE, 0xB5BFC9); return; } diff --git a/programs/network/htmlv/lib/file_system.h b/programs/network/htmlv/lib/file_system.h index 8162c65886..05cba0fc76 100644 --- a/programs/network/htmlv/lib/file_system.h +++ b/programs/network/htmlv/lib/file_system.h @@ -46,7 +46,7 @@ f70 run_file_70; // Создание папки // /////////////////////////// f70 create_dir_70; -:int CreateFolder(dword new_folder_path) +:int CreateDir(dword new_folder_path) { create_dir_70.func = 9; create_dir_70.param1 = @@ -186,4 +186,18 @@ void ReadAttributes(dword read_buffer, file_path) $mov eax,70 $mov ebx,#read_file_70.func $int 0x40 +} + +inline fastcall void SetCurDir( ECX) +{ + $mov eax,30 + $mov ebx,1 + $int 0x40 +} + +inline fastcall void GetCurDir( ECX, EDX) +{ + $mov eax,30 + $mov ebx,2 + $int 0x40 } \ No newline at end of file diff --git a/programs/network/htmlv/lib/kolibri.h b/programs/network/htmlv/lib/kolibri.h index ee3d4ea88d..f15e4753de 100644 --- a/programs/network/htmlv/lib/kolibri.h +++ b/programs/network/htmlv/lib/kolibri.h @@ -306,6 +306,15 @@ void DefineAndDrawWindow(dword x,y, sizeX,sizeY, byte WindowType,dword WindowAre $int 0x40 } +inline fastcall DeleteAllButtons() +{ + EAX = 12; // function 12:tell os about windowdraw + EBX = 1; + $int 0x40 + EBX = 2; + $int 0x40 +} + inline fastcall MoveSize( EBX,ECX,EDX,ESI) { $mov eax, 67 diff --git a/programs/network/htmlv/lib/mem.h b/programs/network/htmlv/lib/mem.h index f8848815fe..06fcc894db 100644 --- a/programs/network/htmlv/lib/mem.h +++ b/programs/network/htmlv/lib/mem.h @@ -26,13 +26,6 @@ dword mem_Alloc(dword size) } //mem.ReAlloc -inline fastcall dword mem_ReAllocR( ECX, EDX) -{ - $mov eax, 68 - $mov ebx, 20 - $int 0x40 -} - stdcall dword mem_ReAlloc(dword mptr, size) { $push ebx @@ -72,30 +65,30 @@ void mem_Free(dword mptr) inline fastcall mem_Move( EDI, ESI, ECX) { asm { - mov eax, ecx - cmp edi, esi - jg l1 - je l2 - sar ecx, 2 - js l2 - rep movsd - mov ecx, eax - and ecx, 3 - rep movsb - jmp short l2 -l1: lea esi, dsdword[ esi+ecx-4] - lea edi, dsdword[ edi+ecx-4] - sar ecx, 2 - js l2 - std - rep movsd - mov ecx, eax - and ecx, 3 - add esi, 3 - add edi, 3 - rep movsb - cld -l2: + MOV EAX, ECX + CMP EDI, ESI + JG L1 + JE L2 + SAR ECX, 2 + JS L2 + REP MOVSD + MOV ECX, EAX + AND ECX, 3 + REP MOVSB + JMP SHORT L2 +L1: LEA ESI, DSDWORD[ ESI+ECX-4] + LEA EDI, DSDWORD[ EDI+ECX-4] + SAR ECX, 2 + JS L2 + STD + REP MOVSD + MOV ECX, EAX + AND ECX, 3 + ADD ESI, 3 + ADD EDI, 3 + REP MOVSB + CLD +L2: } } diff --git a/programs/network/htmlv/lib/strings.h b/programs/network/htmlv/lib/strings.h index c6f12b574c..aa33f4c809 100644 --- a/programs/network/htmlv/lib/strings.h +++ b/programs/network/htmlv/lib/strings.h @@ -203,6 +203,8 @@ inline fastcall strupr( ESI) do{ AL=DSBYTE[ESI]; IF(AL>='a')IF(AL<='z')DSBYTE[ESI]=AL&0x5f; + IF (AL>=160) && (AL<=175) DSBYTE[ESI] = AL - 32; //а-п + IF (AL>=224) && (AL<=239) DSBYTE[ESI] = AL - 80; //а-п ESI++; }while(AL!=0); } @@ -236,42 +238,42 @@ inline fastcall strttl( EDX) -inline fastcall unsigned int strstr( EBX, EDX) +inline fastcall dword strstr( EBX, EDX) { asm { - mov edi, edx - xor ecx, ecx - xor eax, eax - dec ecx - repne scasb - not ecx - dec ecx - je ls2 - mov esi, ecx - xor ecx, ecx - mov edi, ebx - dec ecx - repne scasb - not ecx - sub ecx, esi - jbe ls2 - mov edi, ebx - lea ebx, DSDWORD[ esi-1] -ls1: mov esi, edx - lodsb - repne scasb - jne ls2 - mov eax, ecx - push edi - mov ecx, ebx - repe cmpsb - pop edi - mov ecx, eax - jne ls1 - lea eax, DSDWORD[ edi-1] - jmp short ls3 -ls2: xor eax, eax -ls3: + MOV EDI, EDX + XOR ECX, ECX + XOR EAX, EAX + DEC ECX + REPNE SCASB + NOT ECX + DEC ECX + JE LS2 + MOV ESI, ECX + XOR ECX, ECX + MOV EDI, EBX + DEC ECX + REPNE SCASB + NOT ECX + SUB ECX, ESI + JBE LS2 + MOV EDI, EBX + LEA EBX, DSDWORD[ ESI-1] +LS1: MOV ESI, EDX + LODSB + REPNE SCASB + JNE LS2 + MOV EAX, ECX + PUSH EDI + MOV ECX, EBX + REPE CMPSB + POP EDI + MOV ECX, EAX + JNE LS1 + LEA EAX, DSDWORD[ EDI-1] + JMP SHORT LS3 +LS2: XOR EAX, EAX +LS3: } } @@ -298,7 +300,7 @@ divs - не 0, если слово скопировано в dest (передайте это значение в качестве src для последующего поиска) */ -dword fastcall strtok( EDX, ESI, EBX) +inline fastcall dword strtok( EDX, ESI, EBX) { asm { XOR ECX, ECX