/programs/fs/Eolite/trunk/Eolite.c-- |
---|
20,7 → 20,7 |
#define ONLY_OPEN 2 |
//ïåðåìåííûå |
#define title "Eolite File Manager v1.35" |
#define title "Eolite File Manager v1.36" |
dword selection_col = 0x94AECE; |
dword lpanel_col = 0x00699C; |
224,8 → 224,9 |
IF (show_actions==1) show_actions=0; ELSE show_actions=1; |
Actions(); |
break; |
case 78: |
IF (show_dev_name==1) show_dev_name=0; ELSE show_dev_name=1; |
case 78: //rescan devices |
Tip(56, "Devices", 78, "-"); |
Pause(10); |
GetSystemDiscs(); |
Open_Dir(#path,WITH_REDRAW); |
DrawSystemDiscs(); |
522,40 → 523,7 |
TVScroll(); |
} |
/*#include "def_file.txt" |
#define CELL_SIZE 58 |
void List_ReDraw() |
{ |
int i, |
po_gor, po_ver, |
on_xx, name_len; |
po_gor=onLeft(22,197)/CELL_SIZE; |
po_ver=onTop(57,6)/CELL_SIZE; |
for (j=0; j<po_ver; j++;) for (i=0; i<po_gor; i++;) |
{ |
if (j*po_gor+i+za_kadrom>=count) |
{ |
DrawBar(i*CELL_SIZE+192,j*CELL_SIZE+57,CELL_SIZE,CELL_SIZE,0xFFFFFF); |
continue; |
} |
DefineButton(i*CELL_SIZE+192,j*CELL_SIZE+57,CELL_SIZE,CELL_SIZE,j*po_gor+i+201+BT_HIDE,0xFFFFFF); |
DrawBar(i*CELL_SIZE+192,j*CELL_SIZE+57,CELL_SIZE,CELL_SIZE,0xFFFFFF); |
off=file_mas[j*po_gor+i+za_kadrom]*304 + buf+72; |
name_len=strlen(off); |
if (name_len>9) name_len=9; |
on_xx=-name_len*3+29; |
WriteText(i*CELL_SIZE+193+on_xx,j*CELL_SIZE+57+CELL_SIZE-16,0,0,off,name_len); |
if (!TestBit(ESDWORD[off-40], 4)) |
PutImage(#file32,32,32,i*CELL_SIZE+197+9,j*CELL_SIZE+57+5); |
else |
PutImage(#folder32,32,32,i*CELL_SIZE+197+9,j*CELL_SIZE+57+5); |
} |
TVScroll(); |
}*/ |
void Line_ReDraw(dword color, filenum){ |
dword text_col=0, name_len, |
y=filenum*BUTTON_HEIGHT+57; //ïîëîæåíèå òåêñòà ïî Y |
/programs/fs/Eolite/trunk/History.txt |
---|
1,3 → 1,10 |
15.11.12 -- v1.36 |
- óñòðàíåíà óòå÷êà ïàìÿòè ïðè ñêàíèðîâàíèè óñòðîéñòâ; |
- ÷àñòè÷íî óñòðàí¸í âûëåò ïðîãðàììû íà áîëüøèõ ïàïêàõ (ñïàñèáî SoUrcerer çà |
òî, ÷òî íàó÷èë ïîëüçîâàòüñÿ îòëàä÷èêîì); |
- îãðàíè÷åíèå íà êîëè÷åñâî óñòðîéñòâ èçìåíåíî ñ 10 íà 20; |
- îáíîâëåíèå êîäà. |
12.11.12 -- v1.35 |
- òåïåðü îêíî íå îáðàáàòûâàåò êëàâèøè åñëè ñâ¸ðíóòî â çàãîëîâîê; |
- ôèêñ äëÿ ñòðîêè àäðåñà; |
/programs/fs/Eolite/trunk/compile.bat |
---|
1,5 → 1,5 |
del Eolite |
@..\C--\c-- Eolite.c-- |
@..\C--\c-- Eolite.c-- /lst |
rename Eolite.com Eolite |
rem ..\C--\kpack Eolite |
del warning.txt |
/programs/fs/Eolite/trunk/include/about_dialog.h |
---|
39,7 → 39,7 |
DefineAndDrawWindow(600,150,181,256,0x34,0x10EFEBEF,"About Eolite"); |
DrawBar(0,0,172,50,0x8494C4); //ãîëóáîå ñçàäè |
PutPaletteImage(#logo,85,85,43,7,#logo_pal); |
WriteText(46,100,0x90,0xBF40BF,"Eolite v1.34",0); |
WriteText(46,100,0x90,0xBF40BF,"Eolite v1.36",0); |
$add ebx, 1<<16 |
$int 0x40 |
WriteText(55,120,0x80,0,"Developers:",0); |
/programs/fs/Eolite/trunk/include/devices.h |
---|
2,17 → 2,17 |
path_string disk_list[20]; |
int disc_num; |
dword devbuf; |
void GetSystemDiscs() |
{ |
char dev_name[10], sys_discs[10]; |
int i1, j1, dev_num, dev_disc_num; |
dword devbuf; |
unsigned char dev_name[10], sys_discs[10]; |
unsigned int i1, j1, dev_num, dev_disc_num; |
disc_num=0; |
if (devbuf) free(devbuf); |
devbuf= malloc(3112); //áóôåð ãäå-òî íà 10 äåâàéñîâ â ëåâîé ïàíåëè |
ReadDir(10, devbuf, "/"); |
ReadDir(19, devbuf, "/"); |
dev_num = EBX; |
for (i1=0; i1<dev_num; i1++) |
{ |
46,23 → 46,47 |
DrawBar(2,56,15,onTop(21,41),lpanel_col); //ñèíèé ïðÿìîóãîëüíèê - ñëåâà |
DrawBar(177,56,15,onTop(21,41),lpanel_col); //ñèíèé ïðÿìîóãîëüíèê - ñïðàâà |
//ñïèñîê äèñêîâ |
if (show_dev_name) Tip(56, "Devices", 78, "="); |
else Tip(56, "Devices", 78, "-"); |
Tip(56, "Devices", 78, "="); |
for (i=0;i<disc_num;i++) |
{ |
DrawBar(17,i*16+74,160,17,0xFFFFFF); //áåëîå |
DrawBar(17,i*16+74,160,17,0xFFFFFF); //ôîí |
DefineButton(17,i*16+74,159,16,100+i+BT_HIDE,0xFFFFFF); //ñîçäà¸ì êíîïêè, à ïîòîì âûâîäèì íàçâàíèÿ äèñêîâ |
copystr("Unknown ",#disc_name); //èçíà÷àëüíî íåèçâåñíûé íîñèòåëü |
dev_icon=3; //ïî-óìîë÷àíèþ óñòðîéñòâî âûãëÿäèò êàê æåñòÿê |
copystr(#disk_list[i].Item, #dev_name); |
dev_name[strlen(#dev_name)-1]=''; |
IF (dev_name[1]=='r') { dev_icon=0; copystr("RAM disk ",#disc_name); } |
IF (dev_name[1]=='c') { dev_icon=1; copystr("CD-ROM ",#disc_name); } |
IF (dev_name[1]=='f') { dev_icon=2; copystr("Floppy disk ",#disc_name); } |
IF (dev_name[1]=='t') { dev_icon=4; copystr("Virtual disk ",#disc_name); } |
IF (dev_name[1]=='h') || (dev_name[1]=='b') copystr("Hard disk ",#disc_name); |
copystr(#dev_name,#disc_name+strlen(#disc_name)); |
// |
strcpy(#dev_name, #disk_list[i].Item); |
dev_name[strlen(#dev_name)-1]=NULL; |
switch(dev_name[1]) |
{ |
case 'r': |
dev_icon=0; |
strcpy(#disc_name, "RAM disk "); |
break; |
case 'c': |
dev_icon=1; |
strcpy(#disc_name, "CD-ROM "); |
break; |
case 'f': |
dev_icon=2; |
strcpy(#disc_name, "Floppy disk "); |
break; |
case 'h': |
case 'b': |
dev_icon=3; |
strcpy(#disc_name, "Hard disk "); |
break; |
case 't': |
dev_icon=4; |
strcpy(#disc_name, "RAM disk "); |
//temp[0]=dev_name[4]; //àõóåòü ñèñòåìà |
//temp[1]=NULL; |
//DefineButton(17+143,i*16+74,16,16,StrToInt(#temp)+130+BT_HIDE+BT_NOFRAME,0xFFFFFF); |
//WriteText(45+121,i*16+79,0x80,0xAC0000,"-",0); |
//WriteText(45+121,i*16+79+1,0x80,0xAC0000,"-",0); |
break; |
default: |
dev_icon=3; //ïî-óìîë÷àíèþ óñòðîéñòâî âûãëÿäèò êàê æåñòÿê íî ýòî íåïðàâèëüíî |
strcpy(#disc_name, "Unknown "); |
} |
strcat(#disc_name, #dev_name); |
if (show_dev_name) WriteText(45,i*16+79,0x80,0,#disc_name,0); |
else WriteText(45,i*16+79,0x80,0,#dev_name,0); |
PutImage(dev_icon*14*13*3+#devices,14,13,21,i*16+76); |
/programs/fs/Eolite/trunk/include/icons_f.h |
---|
61,6 → 61,9 |
"jpeg",19, |
"raw", 19, |
"psd", 19, |
"wbmp",19, |
"tiff",19, |
"tif", 19, |
"ico", 20, |
"cur", 20, |
"ani", 20, |
/programs/fs/Eolite/trunk/include/ini.h |
---|
6,7 → 6,7 |
#define PARAM 2 |
#define OPTION 3 |
char NOTIFY_PATH[7]="@notify"; |
#define NOTIFY_PATH "@notify"; |
unsigned char *ERROR_TEXT[]={ |
"Code #0 - No error", |
43,7 → 43,7 |
ReadFile(0, 12000, buff, "/sys/File managers/Eolite.ini"); |
IF (EAX<>6) //åñëè ôàéëà ñ íàñòðîéêàìè òóïî íåò ïå÷àëüêà |
{ |
IF (onload==1) RunProgram(#NOTIFY_PATH, "Eolite.ini not found. Defaults will be used."); |
IF (onload==1) RunProgram(NOTIFY_PATH, "Eolite.ini not found. Defaults will be used."); |
IF (onload==0) goto RUN_AS_PROGRAM; |
} |
fsize=EBX; |
120,7 → 120,7 |
} |
if (curbtn>=0) Line_ReDraw(0xFF0000, curbtn); |
Pause(5); |
RunProgram(#NOTIFY_PATH, #error); |
RunProgram(NOTIFY_PATH, #error); |
//DrawBar(192,onTop(0, BUTTON_HEIGHT+7),onLeft(27,192),BUTTON_HEIGHT,0xFF0000); |
//WriteText(205,onTop(-5, BUTTON_HEIGHT+7),0x80,0xFFFFFF,#error,0); |
} |
/programs/fs/Eolite/trunk/include/some_code.h |
---|
14,24 → 14,24 |
dword ConvertSize(dword bytes) |
{ |
byte size_prefix[8], temp[3]; |
IF (bytes>=1073741824) copystr(" Gb",#temp); |
ELSE IF (bytes>=1048576) copystr(" Mb",#temp); |
ELSE IF (bytes>=1024) copystr(" Kb",#temp); |
ELSE copystr(" b ",#temp); |
WHILE (bytes>1023) bytes/=1024; |
unsigned char size_prefix[8], size_nm[4]; |
if (bytes>=1073741824) copystr(" Gb",#size_nm); |
else if (bytes>=1048576) copystr(" Mb",#size_nm); |
else if (bytes>=1024) copystr(" Kb",#size_nm); |
else copystr(" b ",#size_nm); |
while (bytes>1023) bytes/=1024; |
copystr(IntToStr(bytes),#size_prefix); |
copystr(#temp,#size_prefix+strlen(#size_prefix)); |
EAX=#size_prefix; |
copystr(#size_nm,#size_prefix+strlen(#size_prefix)); |
return #size_prefix; |
} |
inline fastcall void TVScroll() { //Ïðîêðóòêà |
dword on_y; |
IF (count<=0) {DrawFlatButton(onLeft(27,0),57,16,onTop(22,58),0,0xE4DFE1,""); return;} |
if (count<=0) {DrawFlatButton(onLeft(27,0),57,16,onTop(22,58),0,0xE4DFE1,""); return;} |
on_y = za_kadrom * onTop(22,57) / count +57; |
scroll_size=onTop(22,57) * but_num - but_num / count; |
IF (scroll_size<20) scroll_size = 20; //óñòàíàâëèâàåì ìèíèìàëüíûé ðàçìåð ñêðîëëà |
IF (scroll_size>onTop(22,57)-on_y+56) || (za_kadrom+but_num>=count) on_y=onTop(23+scroll_size,0); //äëÿ áîëüøîãî ñïèñêà |
if (scroll_size<20) scroll_size = 20; //óñòàíàâëèâàåì ìèíèìàëüíûé ðàçìåð ñêðîëëà |
if (scroll_size>onTop(22,57)-on_y+56) || (za_kadrom+but_num>=count) on_y=onTop(23+scroll_size,0); //äëÿ áîëüøîãî ñïèñêà |
DrawFlatButton(onLeft(27,0),on_y,16,scroll_size,0,0xE4DFE1,"");//ïîëçóíîê |
DrawBar(onLeft(26,0),57,15,on_y-57,0xCED0D0);//ïîëå äî ïîëçóíêà |
DrawBar(onLeft(26,0),on_y+scroll_size+1,15,onTop(22,57)-scroll_size-on_y+56,0xCED0D0); //ïîëå ïîñëå ïîëçóíêà |
/programs/fs/Eolite/trunk/include/sorting.h |
---|
2,53 → 2,52 |
void Sort_by_Size(int a, b) // äëÿ ïåðâîãî âûçîâà: a = 0, b = <ýëåìåíòîâ â ìàññèâå> - 1 |
{ |
int i = a; |
int iss = a; |
IF (a >= b) return; |
FOR (j = a; j <= b; j++) |
IF (ESDWORD[file_mas[j]*304 + buf+64] <= ESDWORD[file_mas[b]*304 + buf+64]) |
{ file_mas[i] >< file_mas[j]; i++;} |
Sort_by_Size (a, i-2); |
Sort_by_Size (i, b); |
IF (ESDWORD[file_mas[j]*304 + buf+64] <= ESDWORD[file_mas[b]*304 + buf+64]) { file_mas[iss] >< file_mas[j]; iss++;} |
Sort_by_Size (a, iss-2); |
Sort_by_Size (iss, b); |
} |
void Sort_by_Name(int a, b) // äëÿ ïåðâîãî âûçîâà: a = 0, b = <ýëåìåíòîâ â ìàññèâå> - 1 |
{ |
int i = a; |
int isn = a; |
IF (a >= b) return; |
FOR (j = a; j <= b; j++) |
IF (strcmp(file_mas[j]*304 + buf+72, file_mas[b]*304 + buf+72)<=0) { file_mas[i] >< file_mas[j]; i++;} |
Sort_by_Name(a, i-2); |
Sort_by_Name(i, b); |
IF (strcmp(file_mas[j]*304 + buf+72, file_mas[b]*304 + buf+72)<=0) { file_mas[isn] >< file_mas[j]; isn++;} |
Sort_by_Name(a, isn-2); |
Sort_by_Name(isn, b); |
} |
void Sort_by_Type(int a, b) // äëÿ ïåðâîãî âûçîâà: a = 0, b = <ýëåìåíòîâ â ìàññèâå> - 1 |
{ |
int i=a; |
int jst, ist=a; |
int n; |
dword offset=buf+72; |
byte filename1[256], filename2[256]; |
unsigned char filename1[256], filename2[256]; |
unsigned char ext1[256], ext2[256]; |
IF (a >= b) return; |
for (j = a; j <= b; j++) |
for (jst = a; jst <= b; jst++) |
{ |
// |
copystr(file_mas[j]*304 + offset, #filename1); |
copystr(file_mas[b]*304 + offset, #filename2); |
ext1[0]=ext2[0]=filename1[0]=filename2[0]=NULL; |
copystr(file_mas[jst]*304 + buf+72, #filename1); |
copystr(file_mas[b]*304 + buf+72, #filename2); |
n=strlen(#filename1)-1; |
WHILE (filename1[n]<>'.') && (n>0) n--; |
IF (n) copystr(#filename1+n+1, #filename1); |
IF (n) copystr(#filename1+n+1, #ext1); |
n=strlen(#filename2)-1; |
WHILE (filename2[n]<>'.') && (n>0) n--; |
IF (n) copystr(#filename2+n+1, #filename2); |
// |
n=strcmp(#filename1, #filename2); |
IF (n<0) { file_mas[i] >< file_mas[j]; i++;} |
IF (n==0) && (strcmp(file_mas[j]*304 + offset, file_mas[b]*304 + offset)<=0) { file_mas[i] >< file_mas[j]; i++;} |
IF (n) copystr(#filename2+n+1, #ext2); |
n=strcmp(#ext1, #ext2); |
IF (n<0) { file_mas[ist] >< file_mas[jst]; ist++;} |
IF (n==0) && (strcmp(#filename1, #filename2)<=0) { file_mas[ist] >< file_mas[jst]; ist++;} |
} |
Sort_by_Type(a, i-2); |
Sort_by_Type(i, b); |
Sort_by_Type(a, ist-2); |
Sort_by_Type(ist, b); |
} |
/programs/fs/Eolite/trunk/lib/file_system.h |
---|
28,8 → 28,8 |
//////////////////////////// |
// Ñîçäàòü ôàéë // |
//////////////////////////// |
/*f70 create_file_70; |
void CreateFile(dword file_size, read_buffer, file_path) |
f70 create_file_70; |
int CreateFile(dword file_size, read_buffer, file_path) |
{ |
create_file_70.func = 2; |
create_file_70.param1 = 0; |
41,13 → 41,13 |
$mov eax,70 |
$mov ebx,#create_file_70.func |
$int 0x40 |
} */ |
} |
//////////////////////////// |
// Ïðî÷èòàòü ôàéë // |
//////////////////////////// |
f70 read_file_70; |
void ReadFile(dword pos, file_size, read_buffer, file_path) |
int ReadFile(dword pos, file_size, read_buffer, file_path) |
{ |
read_file_70.func = 0; |
read_file_70.param1 = pos; |
/programs/fs/Eolite/trunk/lib/kolibri.h |
---|
15,6 → 15,7 |
char param[4096]; |
char program_path[4096]; |
#include "lib\strings.h" |
//Events |
#define evMouse 6 |
212,153 → 213,6 |
} |
//------------------------------------------------------------------------------ |
inline fastcall dword strlen( EDI) |
{ |
asm { |
xor ecx, ecx |
xor eax, eax |
dec ecx |
repne scasb |
sub eax, 2 |
sub eax, ecx |
} |
} |
inline fastcall copystr( ESI,EDI) |
{ |
$cld |
l1: |
$lodsb |
$stosb |
$test al,al |
$jnz l1 |
} |
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; |
} |
dword StrToCol(char* htmlcolor) |
{ |
dword j, color=0; |
char ch=0x00; |
FOR (j=0; j<6; j++) |
{ |
ch=ESBYTE[htmlcolor+j]; |
IF ((ch>='0') && (ch<='9')) ch -= '0'; |
IF ((ch>='A') && (ch<='F')) ch -= 'A'-10; |
IF ((ch>='a') && (ch<='f')) ch -= 'a'-10; |
color = color*0x10 + ch; |
} |
return color; |
} |
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 signed int strncmp( ESI, EDI, ECX) |
{ |
asm { |
MOV EBX, EDI |
XOR EAX, EAX |
MOV EDX, ECX |
OR ECX, ECX |
JE L1 |
REPNE SCASB |
SUB EDX, ECX |
MOV ECX, EDX |
MOV EDI, EBX |
XOR EBX, EBX |
REPE CMPSB |
MOV AL, DSBYTE[ ESI-1] |
MOV BL, DSBYTE[ EDI-1] |
SUB EAX, EBX |
L1: |
} |
} |
inline fastcall unsigned int strchr(ESI,BL) |
{ |
int jj=0, last=-1; |
do{ |
jj++; |
$lodsb |
IF(AL==BL) last=jj; |
} while(AL!=0); |
return last; |
} |
inline fastcall TitleCase( EDX) |
{ |
AL=DSBYTE[EDX]; |
IF(AL>='a')&&(AL<='z')DSBYTE[EDX]=AL&0x5f; |
IF (AL>=160) && (AL<=175) DSBYTE[EDX] = AL - 32; //à-ï |
IF (AL>=224) && (AL<=239) DSBYTE[EDX] = AL - 80; //à-ï |
do{ |
EDX++; |
AL=DSBYTE[EDX]; |
IF(AL>='A')&&(AL<='Z'){DSBYTE[EDX]=AL|0x20; CONTINUE;} |
IF(AL>='')&&(AL<='')DSBYTE[EDX]=AL|0x20; // -¯ |
IF (AL>=144) && (AL<=159) DSBYTE[EDX] = AL + 80; //à-ï |
}while(AL!=0); |
} |
//------------------------------------------------------------------------------ |
inline fastcall void PutPixel( EBX,ECX,EDX) |
{ |
EAX=1; |
438,9 → 292,6 |
//------------------------------------------------------------------------------ |
inline fastcall void debug( EDX) |
{ |
$push eax |
$push ebx |
$push ecx |
$mov eax, 63 |
$mov ebx, 1 |
next_char: |
455,7 → 306,4 |
$int 0x40 |
$mov cl, 10 |
$int 0x40 |
$pop eax |
$pop ebx |
$pop ecx |
} |
/programs/fs/Eolite/trunk/lib/strings.h |
---|
0,0 → 1,167 |
//CODED by Veliant, Leency 2008-2012. GNU GPL licence. |
inline fastcall dword strlen( EDI) |
{ |
asm { |
xor ecx, ecx |
xor eax, eax |
dec ecx |
repne scasb |
sub eax, 2 |
sub eax, ecx |
} |
} |
inline fastcall copystr( ESI,EDI) |
{ |
$cld |
l1: |
$lodsb |
$stosb |
$test al,al |
$jnz l1 |
} |
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; |
} |
dword StrToCol(char* htmlcolor) |
{ |
dword j, color=0; |
char ch=0x00; |
FOR (j=0; j<6; j++) |
{ |
ch=ESBYTE[htmlcolor+j]; |
IF ((ch>='0') && (ch<='9')) ch -= '0'; |
IF ((ch>='A') && (ch<='F')) ch -= 'A'-10; |
IF ((ch>='a') && (ch<='f')) ch -= 'a'-10; |
color = color*0x10 + ch; |
} |
return color; |
} |
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 strchr(ESI,BL) |
{ |
int jj=0, last=-1; |
do{ |
jj++; |
$lodsb |
IF(AL==BL) last=jj; |
} while(AL!=0); |
return last; |
} |
inline fastcall TitleCase( EDX) |
{ |
AL=DSBYTE[EDX]; |
IF(AL>='a')&&(AL<='z')DSBYTE[EDX]=AL&0x5f; |
IF (AL>=160) && (AL<=175) DSBYTE[EDX] = AL - 32; //à-ï |
IF (AL>=224) && (AL<=239) DSBYTE[EDX] = AL - 80; //à-ï |
do{ |
EDX++; |
AL=DSBYTE[EDX]; |
IF(AL>='A')&&(AL<='Z'){DSBYTE[EDX]=AL|0x20; CONTINUE;} |
IF(AL>='')&&(AL<='')DSBYTE[EDX]=AL|0x20; // -¯ |
IF (AL>=144) && (AL<=159) DSBYTE[EDX] = AL + 80; //à-ï |
}while(AL!=0); |
} |
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 |
} |
} |