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
This commit is contained in:
Kirill Lipatov (Leency) 2012-11-10 01:49:08 +00:00
parent 591d811406
commit 650e2989bd
7 changed files with 131 additions and 93 deletions

View File

@ -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;}

View File

@ -1,3 +1,10 @@
10.11.12 - 0.97.6
- нормальный запуск программы даже без библиотеки lib_img;
- оповещение если box_lib не найдена;
- исправлена ошибка приводящая к торможению при отображении
TrueType шрифтов;
- обновление библиотек.
05.11.12 - 0.97.5
Переключалка на шрифты TrueType из меню ПКМ.

View File

@ -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+h<WB1.top) || (top1>WB1.top+WB1.height-10) //если ВСЁ изображение ушло ВЕРХ или ВНИЗ
return;
if (top1+h<WB1.top) || (top1>WB1.top+WB1.height-10) return; //åñëè ÂѨ èçîáðàæåíèå óøëî ÂÅÐÕ èëè ÂÍÈÇ
if (top1<WB1.top) //åñëè ÷àñòü èçîáðàæåíèÿ ñâåðõó
{
DrawBar(left, top, width-15, 10, bg_color); //çàêðàøèâàåì ïåðâóþ ñòðîêó
@ -828,22 +818,16 @@ void TWebBrowser::WhatTextStyle(int left1, top1, width1) {
h=h-img_lines_first;
top1=WB1.top;
}
if (top1>WB1.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;
}

View File

@ -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
}

View File

@ -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

View File

@ -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:
}
}

View File

@ -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