HTMLv 0.94e: kolibri.h cleaning, and forking strings.h

git-svn-id: svn://kolibrios.org@2825 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Kirill Lipatov (Leency) 2012-06-25 14:14:43 +00:00
parent 7567859abf
commit 4b416faa6e
5 changed files with 243 additions and 195 deletions

View File

@ -4,6 +4,7 @@
//home icon - rachel fu, GPL licence
#include "..\lib\kolibri.h"
#include "..\lib\strings.h"
#include "..\lib\encoding.h"
#include "..\lib\file_system.h"
#include "..\lib\mem.h"
@ -18,6 +19,8 @@
#include "img\toolbar_icons.c"
#include "img\URLgoto.txt";
#define DEBUG_ON 0
//ïåðåìåííûå
char URL[4096],
@ -76,8 +79,8 @@ void main()
//break;
};*/
btn=GetSlot(Form.ID);
IF (btn<>ActiveProcess()) break; //если окно не активно на события мыши не реагируем
btn=GetProcessSlot(Form.ID);
IF (btn<>GetActiveProcess()) break; //если окно не активно на события мыши не реагируем
edit_box_mouse stdcall (#edit1);

View File

@ -9,7 +9,7 @@ int i;
char download_path[]="/rd/1/.download";
char search_path[]="http://nigma.ru/index.php?s=";
char version[]=" Text-based Browser 0.94d";
char version[]=" Text-based Browser 0.94e";
struct TWebBrowser {
@ -39,7 +39,7 @@ int stroka,
stolbec,
tab_len;
char line[330],
char line[500],
tag[100],
tagparam[10000],
parametr[1200],
@ -318,7 +318,9 @@ void TWebBrowser::ParseHTML(dword bword){
if (!strcmp(#URL + strlen(#URL) - 4, ".txt")) pre_text = 1;
if (!strcmp(#URL + strlen(#URL) - 4, ".mht")) ignor_text = 1;
debug("Start parsing");
#ifdef DEBUG_ON
debug("Start parsing");
#endif
for ( ; buf+filesize > bword; bword++;) {//ESBYTE[bword]
bukva = ESBYTE[bword];
@ -463,7 +465,9 @@ void TWebBrowser::ParseHTML(dword bword){
ParseHTML(buf);
}
debug("End parsing");
#ifdef DEBUG_ON
debug("End parsing");
#endif
DrawScroller(); //ðèñóåì ñêðîëë
}
@ -472,9 +476,9 @@ char oldtag[100];
void TWebBrowser::WhatTextStyle(int left1, top1, width1) {
dword hr_color;
dword image=0;
dword image;
char temp[4096];
int w, h, img_lines_first=0;
int w, h, img_lines_first, line_length;
//ïðîâåðÿåì òåã îòêðûâàåòñÿ èëè çàêðûâàåòñÿ
IF(tag[0] == '/')
@ -513,15 +517,17 @@ void TWebBrowser::WhatTextStyle(int left1, top1, width1) {
DrawBar(left, top, width-15, 15, bg_color); //çàêðàøèâàåì ïåðâóþ ñòðîêó
first_line_drawed=1;
}
line_length=strlen(#line)*6;
WriteText(stolbec * 6 + left1, top1, 0x80, text_colors[text_color_index], #line, 0); //ìîæåò òóò ðèñîâàòü áåëóþ ñòðîêó?
//text_out stdcall (#line, -1, 16, text_colors[text_color_index], stolbec * 6 + left1, top1);
//line_length = get_length stdcall (#line,-1,16,line_length);
//text_out stdcall (#line, -1, 17, text_colors[text_color_index], stolbec * 6 + left1, top1-2);
IF (b_text) { $add ebx, 1<<16 $int 0x40 }
IF (i_text) Skew(stolbec * 6 + left1, top1, strlen(#line)+1*6, 10); //íàêëîííûé òåêñò
IF (s_text) DrawBar(stolbec * 6 + left1, top1 + 4, strlen(#line) * 6, 1, text_colors[text_color_index]); //çà÷¸ðêíóòûé
IF (u_text) DrawBar(stolbec * 6 + left1, top1 + 8, strlen(#line) * 6, 1, text_colors[text_color_index]); //ïîä÷¸ðêíóòûé
IF (i_text) Skew(stolbec * 6 + left1, top1, line_length+6, 10); //íàêëîííûé òåêñò
IF (s_text) DrawBar(stolbec * 6 + left1, top1 + 4, line_length, 1, text_colors[text_color_index]); //çà÷¸ðêíóòûé
IF (u_text) DrawBar(stolbec * 6 + left1, top1 + 8, line_length, 1, text_colors[text_color_index]); //ïîä÷¸ðêíóòûé
IF (link) {
DefineButton(stolbec * 6 + left1 - 2, top1, strlen(#line) * 6 + 3, 9, blink + BT_HIDE, 0xB5BFC9); //
DrawBar(stolbec * 6 + left1, top1 + 8, strlen(#line) * 6, 1, text_colors[text_color_index]);
DefineButton(stolbec * 6 + left1 - 2, top1, line_length + 3, 9, blink + BT_HIDE, 0xB5BFC9); //
DrawBar(stolbec * 6 + left1, top1 + 8, line_length, 1, text_colors[text_color_index]);
}
}

View File

@ -29,8 +29,8 @@ void menu_rmb()
mm.get();
GetProcessInfo(#MenuForm, SelfInfo);
id1=GetSlot(MenuForm.ID);
if (id1<>ActiveProcess()) ExitProcess();
id1=GetProcessSlot(MenuForm.ID);
if (id1<>GetActiveProcess()) ExitProcess();
id1=mm.y/ITEM_HEIGHT;
if (id1<0) || (id1+1>items_num) || (mm.x<0) || (mm.x>ITEM_WIDTH) break;

View File

@ -141,8 +141,6 @@ inline fastcall Pause( EBX)
$int 0x40
}
//------------------------------------------------------------------------------
inline fastcall word GetButtonID()
{
$mov eax,17
@ -171,14 +169,14 @@ void GetProcessInfo( EBX, ECX)
$int 0x40
}
int GetProcessSlot( ECX) //ECX = process ID
inline fastcall int GetProcessSlot( ECX)
{
EAX = 18;
EBX = 21;
$int 0x40;
$int 0x40
}
inline fastcall int ActiveProcess()
inline fastcall int GetActiveProcess()
{
EAX = 18;
EBX = 7;
@ -209,13 +207,6 @@ inline fastcall int GetSystemLanguage()
$int 0x40
}
inline fastcall void DrawTitle( ECX)
{
EAX = 71;
EBX = 1;
$int 0x40;
}
inline fastcall dword GetSkinWidth()
{
$push ebx
@ -225,7 +216,8 @@ inline fastcall dword GetSkinWidth()
$pop ebx
}
inline fastcall void SetSystemSkin(ECX){
inline fastcall void SetSystemSkin( ECX)
{
EAX = 48;
EBX = 8;
$int 0x40
@ -240,12 +232,6 @@ inline fastcall dword GetScreenWidth()
$and eax,0x0000FFFF
}
inline fastcall MoveSize( EBX,ECX,EDX,ESI)
{
EAX = 67;
$int 0x40
}
inline fastcall dword LoadLibrary( ECX)
{
$mov eax, 68
@ -253,153 +239,15 @@ inline fastcall dword LoadLibrary( ECX)
$int 0x40
}
//------------------------------------------------------------------------------
inline fastcall dword strlen( EDI)
{
EAX=0;
ECX=-1;
$REPNE $SCASB
EAX-=2+ECX;
}
inline fastcall strcpy( EDI, ESI)
{
$cld
l2:
$lodsb
$stosb
$test al,al
$jnz l2
}
inline fastcall strcat( EDI, ESI)
{
asm {
MOV EBX, EDI
XOR ECX, ECX
XOR EAX, EAX
DEC ECX
REPNE SCASB
DEC EDI
MOV EDX, EDI
MOV EDI, ESI
XOR ECX, ECX
XOR EAX, EAX
DEC ECX
REPNE SCASB
XOR ECX, 0FFFFFFFFH
MOV EDI, EDX
MOV EDX, ECX
MOV EAX, EDI
SHR ECX, 2
REP MOVSD
MOV ECX, EDX
AND ECX, 3
REP MOVSB
MOV EAX, EBX
}
}
char buffer[11]="";
inline fastcall dword IntToStr( ESI)
{
$mov edi, #buffer
$mov ecx, 10
$test esi, esi
$jns f1
$mov al, '-'
$stosb
$neg esi
f1:
$mov eax, esi
$push -'0'
f2:
$xor edx, edx
$div ecx
$push edx
$test eax, eax
$jnz f2
f3:
$pop eax
$add al, '0'
$stosb
$jnz f3
$mov eax, #buffer
$ret
}
inline fastcall dword StrToInt()
{
ESI=EDI=EAX;
IF(DSBYTE[ESI]=='-')ESI++;
EAX=0;
BH=AL;
do{
BL=DSBYTE[ESI]-'0';
EAX=EAX*10+EBX;
ESI++;
}while(DSBYTE[ESI]>0);
IF(DSBYTE[EDI]=='-') -EAX;
}
inline fastcall int strcmp( ESI, EDI)
{
loop()
{
IF (DSBYTE[ESI]<DSBYTE[EDI]) RETURN -1;
IF (DSBYTE[ESI]>DSBYTE[EDI]) RETURN 1;
IF (DSBYTE[ESI]=='\0') RETURN 0;
ESI++;
EDI++;
}
}
inline fastcall unsigned int find_symbol( ESI,BL)
{
int jj=0, last=-1;
do{
jj++;
$lodsb
IF(AL==BL) last=jj;
} while(AL!=0);
return last;
}
inline fastcall dword upcase( ESI)
{
do{
AL=DSBYTE[ESI];
IF(AL>='a')IF(AL<='z')DSBYTE[ESI]=AL&0x5f;
ESI++;
}while(AL!=0);
}
inline fastcall lowcase( ESI)
{
do{
$LODSB
IF(AL>='A')&&(AL<='Z'){
AL+=0x20;
DSBYTE[ESI-1]=AL;
CONTINUE;
}
}while(AL!=0);
}
byte fastcall TestBit( EAX, CL)
{
$shr eax,cl
$and eax,1
}
//------------------------------------------------------------------------------
void DefineAndDrawWindow(dword x,y,sizeX,sizeY,byte mainAreaType,dword mainAreaColour,byte headerType,dword headerColour,EDI)
{
EAX = 12; // function 12:tell os about windowdraw
@ -418,6 +266,18 @@ void DefineAndDrawWindow(dword x,y,sizeX,sizeY,byte mainAreaType,dword mainAreaC
$int 0x40
}
inline fastcall MoveSize( EBX,ECX,EDX,ESI)
{
EAX = 67;
$int 0x40
}
inline fastcall void DrawTitle( ECX)
{
EAX = 71;
EBX = 1;
$int 0x40;
}
inline fastcall int CreateThread( ECX,EDX)
{
@ -426,21 +286,6 @@ inline fastcall int CreateThread( ECX,EDX)
$int 0x40
}
inline fastcall int GetSlot( ECX)
{
EAX = 18;
EBX = 21;
$int 0x40
}
inline fastcall int GetActiveProcess()
{
EAX = 18;
EBX = 7;
$int 0x40
}
void WriteText(dword x,y,byte fontType, dword color, EDX, ESI)
{
EAX = 4;
@ -503,7 +348,10 @@ inline fastcall void DeleteButton( EDX)
$int 0x40;
}
:void DrawRegion(dword x,y,width,height,color1)
//------------------------------------------------------------------------------
void DrawRegion(dword x,y,width,height,color1)
{
DrawBar(x,y,width,1,color1); //¯®«®á  £®à ᢥàåã
DrawBar(x,y+height,width,1,color1); //¯®«®á  £®à á­¨§ã
@ -511,7 +359,7 @@ inline fastcall void DeleteButton( EDX)
DrawBar(x+width,y,1,height+1,color1); //¯®«®á  ¢¥àåã á¯à ¢ 
}
:void DrawRegion_3D(dword x,y,width,height,color1,color2)
void DrawRegion_3D(dword x,y,width,height,color1,color2)
{
DrawBar(x,y,width+1,1,color1); //¯®«®á  £®à ᢥàåã
DrawBar(x,y+1,1,height-1,color1); //¯®«®á  á«¥¢ 
@ -525,12 +373,14 @@ void DrawFlatButton(dword x,y,width,height,id,color,text)
DrawRegion_3D(x+1,y+1,width-2,height-2,0xFFFFFF,0xC7C7C7);
DrawBar(x+2,y+2,width-3,height-3,color); //§ «¨¢ª 
IF (id<>0) DefineButton(x,y,width,height,id+BT_HIDE,0xEFEBEF); //ª­®¯ª 
WriteText(-strlen(text)*6+width/2+x+1,height/2-3+y,0x80,0,text,0);
//WriteText(-strlen(text)*6+width/2+x+1,height/2-3+y,0x80,0,text,0);
WriteText(width/2+x+1,height/2-3+y,0x80,0,text,0);
}
:void DrawCircle(int x, y, r)
void DrawCircle(int x, y, r)
{
int i; float px=0, py=r, ii = r * 3.1415926 * 2;
int i;
float px=0, py=r, ii = r * 3.1415926 * 2;
FOR (i = 0; i < ii; i++)
{
PutPixel(px + x, y - py, 0);

View File

@ -0,0 +1,189 @@
//------------------------------------------------------------------------------
// strlen( EDI)
// strcpy( EDI, ESI)
// strcat( EDI, ESI)
// IntToStr( ESI)
// StrToInt()
// strcmp( ESI, EDI)
// find_symbol( ESI,BL)
// upcase( ESI)
// lowcase( ESI)
// strstr( EBX, EDX)
//------------------------------------------------------------------------------
inline fastcall unsigned int strlen( EDI)
{
$xor eax, eax
$mov ecx, -1
$REPNE $SCASB
EAX-=2+ECX;
}
inline fastcall strcpy( EDI, ESI)
{
$cld
l2:
$lodsb
$stosb
$test al,al
$jnz l2
}
inline fastcall strcat( EDI, ESI)
{
asm {
mov ebx, edi
xor ecx, ecx
xor eax, eax
dec ecx
repne scasb
dec edi
mov edx, edi
mov edi, esi
xor ecx, ecx
xor eax, eax
dec ecx
repne scasb
xor ecx, 0ffffffffh
mov edi, edx
mov edx, ecx
mov eax, edi
shr ecx, 2
rep movsd
mov ecx, edx
and ecx, 3
rep movsb
mov eax, ebx
}
}
char buffer[11]="";
inline fastcall dword IntToStr( ESI)
{
$mov edi, #buffer
$mov ecx, 10
$test esi, esi
$jns f1
$mov al, '-'
$stosb
$neg esi
f1:
$mov eax, esi
$push -'0'
f2:
$xor edx, edx
$div ecx
$push edx
$test eax, eax
$jnz f2
f3:
$pop eax
$add al, '0'
$stosb
$jnz f3
$mov eax, #buffer
$ret
}
inline fastcall dword StrToInt()
{
ESI=EDI=EAX;
IF(DSBYTE[ESI]=='-')ESI++;
EAX=0;
BH=AL;
do{
BL=DSBYTE[ESI]-'0';
EAX=EAX*10+EBX;
ESI++;
}while(DSBYTE[ESI]>0);
IF(DSBYTE[EDI]=='-') -EAX;
}
inline fastcall signed int strcmp( ESI, EDI)
{
loop()
{
IF (DSBYTE[ESI]<DSBYTE[EDI]) RETURN -1;
IF (DSBYTE[ESI]>DSBYTE[EDI]) RETURN 1;
IF (DSBYTE[ESI]=='\0') RETURN 0;
ESI++;
EDI++;
}
}
inline fastcall unsigned int find_symbol( ESI,BL)
{
int jj=0, last=-1;
do{
jj++;
$lodsb
IF(AL==BL) last=jj;
} while(AL!=0);
return last;
}
inline fastcall upcase( ESI)
{
do{
AL=DSBYTE[ESI];
IF(AL>='a')IF(AL<='z')DSBYTE[ESI]=AL&0x5f;
ESI++;
}while(AL!=0);
}
inline fastcall lowcase( ESI)
{
do{
$LODSB
IF(AL>='A')&&(AL<='Z'){
AL+=0x20;
DSBYTE[ESI-1]=AL;
CONTINUE;
}
}while(AL!=0);
}
inline fastcall unsigned int 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:
}
}