forked from KolibriOS/kolibrios
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:
parent
591d811406
commit
650e2989bd
@ -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;}
|
||||||
|
|
||||||
|
@ -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 из меню ПКМ.
|
||||||
|
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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 =
|
||||||
@ -187,3 +187,17 @@ void ReadAttributes(dword read_buffer, file_path)
|
|||||||
$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
|
||||||
|
}
|
@ -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
|
||||||
|
@ -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:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user