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 "TWB.h"
#include "include\menu_rmb.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() void main()
{ {
@ -58,7 +87,7 @@ void main()
mem_Init(); mem_Init();
if (load_dll2(libio, #libio_init,1)!=0) debug("Íå óäàëîñü ïîäêëþ÷èòü áèáëèîòåêó libio"w); 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(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); load_dll2(#abox_lib, #boxlib_init,0);
if (load_dll2(libtruetype, #truetype,0)!=0) {debug("Íå óäàëîñü ïîäêëþ÷èòü áèáëèîòåêó TrueType"w); use_truetype = 2;} 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 05.11.12 - 0.97.5
Переключалка на шрифты TrueType из меню ПКМ. Переключалка на шрифты TrueType из меню ПКМ.

View File

@ -8,7 +8,7 @@ dword
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.97.5"; char version[]=" Text-based Browser 0.97.6";
struct TWebBrowser { struct TWebBrowser {
@ -122,8 +122,7 @@ void TWebBrowser::Scan(int id)
case 005: //truetype case 005: //truetype
if (use_truetype == 2) if (use_truetype == 2)
{ {
debug("Не удалось подключить библиотеку TrueType"); RunProgram("@notify", "Library does not exists /rd/1/lib/truetype.obj"w);
debug("/rd/1/lib/truetype.obj не обнаружен или имеет неправильный формат");
return; return;
} }
if (use_truetype == 1) use_truetype=0; else use_truetype=1; 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); //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); text_out stdcall (#line, -1, 17, text_colors[text_color_index], start_x, start_y-3);
Pause(10);
} }
else else
{ {
@ -780,7 +778,7 @@ void TWebBrowser::WhatTextStyle(int left1, top1, width1) {
if (!chTag("img")) if (!chTag("img"))
{ {
//if (GetFileInfo(#libimg)<>0) return; //если библиотеки нет if (GetFileInfo(libimg)<>0) return; //åñëè áèáëèîòåêè íåò
IMG_TAG: IMG_TAG:
if (!strcmp(#parametr,"src=")) //íàäî îáúåäèíèòü ñ GetNewUrl() if (!strcmp(#parametr,"src=")) //íàäî îáúåäèíèòü ñ GetNewUrl()
{ {
@ -806,21 +804,13 @@ void TWebBrowser::WhatTextStyle(int left1, top1, width1) {
GOTO IMG_TAG; GOTO IMG_TAG;
} }
if (!image) if (!image) return;
{
//debug(#tag);
return;
}
if (w>width1) w=width1; if (w>width1) w=width1;
if (stroka==0) DrawBar(left, top, width-15, 15, bg_color); //çàêðàøèâàåì ïåðâóþ ñòðîêó if (stroka==0) DrawBar(left, top, width-15, 15, bg_color); //çàêðàøèâàåì ïåðâóþ ñòðîêó
stroka+=h/10; 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) //åñëè ÷àñòü èçîáðàæåíèÿ ñâåðõó if (top1<WB1.top) //åñëè ÷àñòü èçîáðàæåíèÿ ñâåðõó
{ {
DrawBar(left, top, width-15, 10, bg_color); //çàêðàøèâàåì ïåðâóþ ñòðîêó DrawBar(left, top, width-15, 10, bg_color); //çàêðàøèâàåì ïåðâóþ ñòðîêó
@ -828,22 +818,16 @@ void TWebBrowser::WhatTextStyle(int left1, top1, width1) {
h=h-img_lines_first; h=h-img_lines_first;
top1=WB1.top; top1=WB1.top;
} }
if (top1>WB1.top+WB1.height-h-15) //åñëè ÷àñòü èçîáðàæåíèÿ ñíèçó
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;
if (anchor) return; if (anchor) return;
img_draw stdcall (image,left1-5,top1+10,w, h,0,img_lines_first); 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) DefineButton(left1 - 5, top1+10, w, h, blink + BT_HIDE, 0xB5BFC9);
{
DefineButton(left1 - 5, top1+10, w, h, blink + BT_HIDE, 0xB5BFC9);
}
return; return;
} }

View File

@ -46,7 +46,7 @@ f70 run_file_70;
// Ńîçäŕíčĺ ďŕďęč // // Ńîçäŕíčĺ ďŕďęč //
/////////////////////////// ///////////////////////////
f70 create_dir_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.func = 9;
create_dir_70.param1 = create_dir_70.param1 =
@ -186,4 +186,18 @@ void ReadAttributes(dword read_buffer, file_path)
$mov eax,70 $mov eax,70
$mov ebx,#read_file_70.func $mov ebx,#read_file_70.func
$int 0x40 $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 $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) inline fastcall MoveSize( EBX,ECX,EDX,ESI)
{ {
$mov eax, 67 $mov eax, 67

View File

@ -26,13 +26,6 @@ dword mem_Alloc(dword size)
} }
//mem.ReAlloc //mem.ReAlloc
inline fastcall dword mem_ReAllocR( ECX, EDX)
{
$mov eax, 68
$mov ebx, 20
$int 0x40
}
stdcall dword mem_ReAlloc(dword mptr, size) stdcall dword mem_ReAlloc(dword mptr, size)
{ {
$push ebx $push ebx
@ -72,30 +65,30 @@ void mem_Free(dword mptr)
inline fastcall mem_Move( EDI, ESI, ECX) inline fastcall mem_Move( EDI, ESI, ECX)
{ {
asm { asm {
mov eax, ecx MOV EAX, ECX
cmp edi, esi CMP EDI, ESI
jg l1 JG L1
je l2 JE L2
sar ecx, 2 SAR ECX, 2
js l2 JS L2
rep movsd REP MOVSD
mov ecx, eax MOV ECX, EAX
and ecx, 3 AND ECX, 3
rep movsb REP MOVSB
jmp short l2 JMP SHORT L2
l1: lea esi, dsdword[ esi+ecx-4] L1: LEA ESI, DSDWORD[ ESI+ECX-4]
lea edi, dsdword[ edi+ecx-4] LEA EDI, DSDWORD[ EDI+ECX-4]
sar ecx, 2 SAR ECX, 2
js l2 JS L2
std STD
rep movsd REP MOVSD
mov ecx, eax MOV ECX, EAX
and ecx, 3 AND ECX, 3
add esi, 3 ADD ESI, 3
add edi, 3 ADD EDI, 3
rep movsb REP MOVSB
cld CLD
l2: L2:
} }
} }

View File

@ -203,6 +203,8 @@ inline fastcall strupr( ESI)
do{ do{
AL=DSBYTE[ESI]; AL=DSBYTE[ESI];
IF(AL>='a')IF(AL<='z')DSBYTE[ESI]=AL&0x5f; 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++; ESI++;
}while(AL!=0); }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 { asm {
mov edi, edx MOV EDI, EDX
xor ecx, ecx XOR ECX, ECX
xor eax, eax XOR EAX, EAX
dec ecx DEC ECX
repne scasb REPNE SCASB
not ecx NOT ECX
dec ecx DEC ECX
je ls2 JE LS2
mov esi, ecx MOV ESI, ECX
xor ecx, ecx XOR ECX, ECX
mov edi, ebx MOV EDI, EBX
dec ecx DEC ECX
repne scasb REPNE SCASB
not ecx NOT ECX
sub ecx, esi SUB ECX, ESI
jbe ls2 JBE LS2
mov edi, ebx MOV EDI, EBX
lea ebx, DSDWORD[ esi-1] LEA EBX, DSDWORD[ ESI-1]
ls1: mov esi, edx LS1: MOV ESI, EDX
lodsb LODSB
repne scasb REPNE SCASB
jne ls2 JNE LS2
mov eax, ecx MOV EAX, ECX
push edi PUSH EDI
mov ecx, ebx MOV ECX, EBX
repe cmpsb REPE CMPSB
pop edi POP EDI
mov ecx, eax MOV ECX, EAX
jne ls1 JNE LS1
lea eax, DSDWORD[ edi-1] LEA EAX, DSDWORD[ EDI-1]
jmp short ls3 JMP SHORT LS3
ls2: xor eax, eax LS2: XOR EAX, EAX
ls3: LS3:
} }
} }
@ -298,7 +300,7 @@ divs -
не 0, если слово скопировано в dest (передайте это значение не 0, если слово скопировано в dest (передайте это значение
в качестве src для последующего поиска) */ в качестве src для последующего поиска) */
dword fastcall strtok( EDX, ESI, EBX) inline fastcall dword strtok( EDX, ESI, EBX)
{ {
asm { asm {
XOR ECX, ECX XOR ECX, ECX