forked from KolibriOS/kolibrios
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:
parent
7567859abf
commit
4b416faa6e
@ -4,6 +4,7 @@
|
|||||||
//home icon - rachel fu, GPL licence
|
//home icon - rachel fu, GPL licence
|
||||||
|
|
||||||
#include "..\lib\kolibri.h"
|
#include "..\lib\kolibri.h"
|
||||||
|
#include "..\lib\strings.h"
|
||||||
#include "..\lib\encoding.h"
|
#include "..\lib\encoding.h"
|
||||||
#include "..\lib\file_system.h"
|
#include "..\lib\file_system.h"
|
||||||
#include "..\lib\mem.h"
|
#include "..\lib\mem.h"
|
||||||
@ -18,6 +19,8 @@
|
|||||||
#include "img\toolbar_icons.c"
|
#include "img\toolbar_icons.c"
|
||||||
#include "img\URLgoto.txt";
|
#include "img\URLgoto.txt";
|
||||||
|
|
||||||
|
#define DEBUG_ON 0
|
||||||
|
|
||||||
|
|
||||||
//ïåðåìåííûå
|
//ïåðåìåííûå
|
||||||
char URL[4096],
|
char URL[4096],
|
||||||
@ -76,8 +79,8 @@ void main()
|
|||||||
//break;
|
//break;
|
||||||
};*/
|
};*/
|
||||||
|
|
||||||
btn=GetSlot(Form.ID);
|
btn=GetProcessSlot(Form.ID);
|
||||||
IF (btn<>ActiveProcess()) break; //если окно не активно на события мыши не реагируем
|
IF (btn<>GetActiveProcess()) break; //если окно не активно на события мыши не реагируем
|
||||||
|
|
||||||
edit_box_mouse stdcall (#edit1);
|
edit_box_mouse stdcall (#edit1);
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@ int i;
|
|||||||
|
|
||||||
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.94d";
|
char version[]=" Text-based Browser 0.94e";
|
||||||
|
|
||||||
|
|
||||||
struct TWebBrowser {
|
struct TWebBrowser {
|
||||||
@ -39,7 +39,7 @@ int stroka,
|
|||||||
stolbec,
|
stolbec,
|
||||||
tab_len;
|
tab_len;
|
||||||
|
|
||||||
char line[330],
|
char line[500],
|
||||||
tag[100],
|
tag[100],
|
||||||
tagparam[10000],
|
tagparam[10000],
|
||||||
parametr[1200],
|
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, ".txt")) pre_text = 1;
|
||||||
if (!strcmp(#URL + strlen(#URL) - 4, ".mht")) ignor_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]
|
for ( ; buf+filesize > bword; bword++;) {//ESBYTE[bword]
|
||||||
bukva = ESBYTE[bword];
|
bukva = ESBYTE[bword];
|
||||||
@ -462,8 +464,10 @@ void TWebBrowser::ParseHTML(dword bword){
|
|||||||
lines.first=anchor_line_num;
|
lines.first=anchor_line_num;
|
||||||
ParseHTML(buf);
|
ParseHTML(buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
debug("End parsing");
|
#ifdef DEBUG_ON
|
||||||
|
debug("End parsing");
|
||||||
|
#endif
|
||||||
DrawScroller(); //ðèñóåì ñêðîëë
|
DrawScroller(); //ðèñóåì ñêðîëë
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -472,9 +476,9 @@ char oldtag[100];
|
|||||||
void TWebBrowser::WhatTextStyle(int left1, top1, width1) {
|
void TWebBrowser::WhatTextStyle(int left1, top1, width1) {
|
||||||
dword hr_color;
|
dword hr_color;
|
||||||
|
|
||||||
dword image=0;
|
dword image;
|
||||||
char temp[4096];
|
char temp[4096];
|
||||||
int w, h, img_lines_first=0;
|
int w, h, img_lines_first, line_length;
|
||||||
|
|
||||||
//ïðîâåðÿåì òåã îòêðûâàåòñÿ èëè çàêðûâàåòñÿ
|
//ïðîâåðÿåì òåã îòêðûâàåòñÿ èëè çàêðûâàåòñÿ
|
||||||
IF(tag[0] == '/')
|
IF(tag[0] == '/')
|
||||||
@ -513,15 +517,17 @@ void TWebBrowser::WhatTextStyle(int left1, top1, width1) {
|
|||||||
DrawBar(left, top, width-15, 15, bg_color); //çàêðàøèâàåì ïåðâóþ ñòðîêó
|
DrawBar(left, top, width-15, 15, bg_color); //çàêðàøèâàåì ïåðâóþ ñòðîêó
|
||||||
first_line_drawed=1;
|
first_line_drawed=1;
|
||||||
}
|
}
|
||||||
|
line_length=strlen(#line)*6;
|
||||||
WriteText(stolbec * 6 + left1, top1, 0x80, text_colors[text_color_index], #line, 0); //ìîæåò òóò ðèñîâàòü áåëóþ ñòðîêó?
|
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 (b_text) { $add ebx, 1<<16 $int 0x40 }
|
||||||
IF (i_text) Skew(stolbec * 6 + left1, top1, strlen(#line)+1*6, 10); //íàêëîííûé òåêñò
|
IF (i_text) Skew(stolbec * 6 + left1, top1, line_length+6, 10); //íàêëîííûé òåêñò
|
||||||
IF (s_text) DrawBar(stolbec * 6 + left1, top1 + 4, strlen(#line) * 6, 1, text_colors[text_color_index]); //çà÷¸ðêíóòûé
|
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, strlen(#line) * 6, 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) {
|
IF (link) {
|
||||||
DefineButton(stolbec * 6 + left1 - 2, top1, strlen(#line) * 6 + 3, 9, blink + BT_HIDE, 0xB5BFC9); //
|
DefineButton(stolbec * 6 + left1 - 2, top1, line_length + 3, 9, blink + BT_HIDE, 0xB5BFC9); //
|
||||||
DrawBar(stolbec * 6 + left1, top1 + 8, strlen(#line) * 6, 1, text_colors[text_color_index]);
|
DrawBar(stolbec * 6 + left1, top1 + 8, line_length, 1, text_colors[text_color_index]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -29,8 +29,8 @@ void menu_rmb()
|
|||||||
mm.get();
|
mm.get();
|
||||||
|
|
||||||
GetProcessInfo(#MenuForm, SelfInfo);
|
GetProcessInfo(#MenuForm, SelfInfo);
|
||||||
id1=GetSlot(MenuForm.ID);
|
id1=GetProcessSlot(MenuForm.ID);
|
||||||
if (id1<>ActiveProcess()) ExitProcess();
|
if (id1<>GetActiveProcess()) ExitProcess();
|
||||||
|
|
||||||
id1=mm.y/ITEM_HEIGHT;
|
id1=mm.y/ITEM_HEIGHT;
|
||||||
if (id1<0) || (id1+1>items_num) || (mm.x<0) || (mm.x>ITEM_WIDTH) break;
|
if (id1<0) || (id1+1>items_num) || (mm.x<0) || (mm.x>ITEM_WIDTH) break;
|
||||||
|
@ -141,8 +141,6 @@ inline fastcall Pause( EBX)
|
|||||||
$int 0x40
|
$int 0x40
|
||||||
}
|
}
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
inline fastcall word GetButtonID()
|
inline fastcall word GetButtonID()
|
||||||
{
|
{
|
||||||
$mov eax,17
|
$mov eax,17
|
||||||
@ -171,14 +169,14 @@ void GetProcessInfo( EBX, ECX)
|
|||||||
$int 0x40
|
$int 0x40
|
||||||
}
|
}
|
||||||
|
|
||||||
int GetProcessSlot( ECX) //ECX = process ID
|
inline fastcall int GetProcessSlot( ECX)
|
||||||
{
|
{
|
||||||
EAX = 18;
|
EAX = 18;
|
||||||
EBX = 21;
|
EBX = 21;
|
||||||
$int 0x40;
|
$int 0x40
|
||||||
}
|
}
|
||||||
|
|
||||||
inline fastcall int ActiveProcess()
|
inline fastcall int GetActiveProcess()
|
||||||
{
|
{
|
||||||
EAX = 18;
|
EAX = 18;
|
||||||
EBX = 7;
|
EBX = 7;
|
||||||
@ -209,13 +207,6 @@ inline fastcall int GetSystemLanguage()
|
|||||||
$int 0x40
|
$int 0x40
|
||||||
}
|
}
|
||||||
|
|
||||||
inline fastcall void DrawTitle( ECX)
|
|
||||||
{
|
|
||||||
EAX = 71;
|
|
||||||
EBX = 1;
|
|
||||||
$int 0x40;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline fastcall dword GetSkinWidth()
|
inline fastcall dword GetSkinWidth()
|
||||||
{
|
{
|
||||||
$push ebx
|
$push ebx
|
||||||
@ -225,7 +216,8 @@ inline fastcall dword GetSkinWidth()
|
|||||||
$pop ebx
|
$pop ebx
|
||||||
}
|
}
|
||||||
|
|
||||||
inline fastcall void SetSystemSkin(ECX){
|
inline fastcall void SetSystemSkin( ECX)
|
||||||
|
{
|
||||||
EAX = 48;
|
EAX = 48;
|
||||||
EBX = 8;
|
EBX = 8;
|
||||||
$int 0x40
|
$int 0x40
|
||||||
@ -240,12 +232,6 @@ inline fastcall dword GetScreenWidth()
|
|||||||
$and eax,0x0000FFFF
|
$and eax,0x0000FFFF
|
||||||
}
|
}
|
||||||
|
|
||||||
inline fastcall MoveSize( EBX,ECX,EDX,ESI)
|
|
||||||
{
|
|
||||||
EAX = 67;
|
|
||||||
$int 0x40
|
|
||||||
}
|
|
||||||
|
|
||||||
inline fastcall dword LoadLibrary( ECX)
|
inline fastcall dword LoadLibrary( ECX)
|
||||||
{
|
{
|
||||||
$mov eax, 68
|
$mov eax, 68
|
||||||
@ -253,153 +239,15 @@ inline fastcall dword LoadLibrary( ECX)
|
|||||||
$int 0x40
|
$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)
|
byte fastcall TestBit( EAX, CL)
|
||||||
{
|
{
|
||||||
$shr eax,cl
|
$shr eax,cl
|
||||||
$and eax,1
|
$and eax,1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void DefineAndDrawWindow(dword x,y,sizeX,sizeY,byte mainAreaType,dword mainAreaColour,byte headerType,dword headerColour,EDI)
|
void DefineAndDrawWindow(dword x,y,sizeX,sizeY,byte mainAreaType,dword mainAreaColour,byte headerType,dword headerColour,EDI)
|
||||||
{
|
{
|
||||||
EAX = 12; // function 12:tell os about windowdraw
|
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
|
$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)
|
inline fastcall int CreateThread( ECX,EDX)
|
||||||
{
|
{
|
||||||
@ -426,21 +286,6 @@ inline fastcall int CreateThread( ECX,EDX)
|
|||||||
$int 0x40
|
$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)
|
void WriteText(dword x,y,byte fontType, dword color, EDX, ESI)
|
||||||
{
|
{
|
||||||
EAX = 4;
|
EAX = 4;
|
||||||
@ -503,7 +348,10 @@ inline fastcall void DeleteButton( EDX)
|
|||||||
$int 0x40;
|
$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,width,1,color1); //¯®«®á £®à ᢥàåã
|
||||||
DrawBar(x,y+height,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); //¯®«®á ¢¥àåã á¯à ¢
|
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,width+1,1,color1); //¯®«®á £®à ᢥàåã
|
||||||
DrawBar(x,y+1,1,height-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);
|
DrawRegion_3D(x+1,y+1,width-2,height-2,0xFFFFFF,0xC7C7C7);
|
||||||
DrawBar(x+2,y+2,width-3,height-3,color); //§ «¨¢ª
|
DrawBar(x+2,y+2,width-3,height-3,color); //§ «¨¢ª
|
||||||
IF (id<>0) DefineButton(x,y,width,height,id+BT_HIDE,0xEFEBEF); //ª®¯ª
|
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++)
|
FOR (i = 0; i < ii; i++)
|
||||||
{
|
{
|
||||||
PutPixel(px + x, y - py, 0);
|
PutPixel(px + x, y - py, 0);
|
||||||
|
189
programs/network/htmlv/lib/strings.h
Normal file
189
programs/network/htmlv/lib/strings.h
Normal 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:
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user