/programs/cmm/lib/dll.h |
---|
0,0 → 1,173 |
//Asper |
char a_libdir[43] = "/sys/lib/\0"; |
//proc dll.Load, import_table:dword |
int dll_Load(dword import_table) |
{ |
$mov esi, import_table |
@next_lib: $mov edx, DSDWORD[esi] |
$or edx,edx |
$jz exit_ |
$push esi |
$mov esi,DSDWORD[esi+4] |
$mov edi,#a_libdir |
$push edi |
$push esi |
EAX=strlen(#a_libdir); |
$pop esi |
$pop edi |
$add edi, eax //9 |
@loc01: $lodsb |
$stosb |
$or al,al |
$jnz loc01 |
//IntToStr(EBX); |
//$push edx |
//WriteDebug(#a_libdir); |
//$pop edx |
//mcall 68,19,a_libdir |
$mov eax, 68 |
$mov ebx, 19 |
$mov ecx,#a_libdir |
$int 0x40 |
$or eax,eax |
$jz fail |
//stdcall dll.Link,eax,edx |
dll_Link(EAX, EDX); |
$push eax |
$mov eax, DSDWORD [eax] |
$cmp DSDWORD [eax], 'lib_' |
$pop eax |
//$jnz loc02 |
//IntToStr(EBX); |
//$push eax |
//WriteDebug(DSDWORD[EAX]); |
//$pop eax |
//stdcall dll.Init,[eax+4] |
//dll_Init(DSDWORD[EAX]); //dll_Init(DSDWORD[EAX+4]); |
@loc02: |
$pop esi |
$add esi,8 |
$jmp next_lib |
@exit_: $xor eax,eax |
return 0; |
@fail: $add esp,4 |
$xor eax,eax |
$inc eax |
return -1; |
} |
//proc dll.Link, exp:dword,imp:dword |
void dll_Link(dword exp, imp) |
{ |
$push eax |
$mov esi, imp |
$test esi, esi |
$jz done |
@next: $lodsd |
$test eax,eax |
$jz done |
//stdcall dll.GetProcAddress,[exp],eax |
dll_GetProcAddress(exp,EAX); |
$or eax,eax |
$jz loc03 |
$mov DSDWORD[esi-4],eax |
$jmp next |
@loc03: |
$mov DSDWORD[esp],0 |
@done: $pop eax |
} |
//proc dll.Init, dllentry:dword |
void dll_Init(dword dllentry) |
{ |
$pushad |
EAX=#mem_Alloc; |
EBX=#mem_Free; |
ECX=#mem_ReAlloc; |
EDX=#dll_Load; |
DSDWORD [dllentry+4] stdcall (); |
$popad |
} |
//proc dll.GetProcAddress, exp:dword,sz_name:dword |
dword dll_GetProcAddress(dword exp, sz_name) |
{ |
$push esi |
$mov edx, exp |
$xor eax,eax |
@next: $or edx,edx |
$jz end_ |
$cmp edx,0 |
$jz end_ |
strcmp(DSDWORD[EDX],sz_name); |
$test eax,eax |
$jz ok |
$add edx,8 |
$jmp next |
@ok: |
$mov eax, DSDWORD[edx+4] |
@end_: |
$pop esi |
return EAX; |
} |
int load_dll2(dword dllname, import_table, byte need_init) |
{ |
//dword dllentry=0; |
// load DLL |
$mov eax, 68 |
$mov ebx, 19 |
ECX=dllname; |
$int 0x40 |
$test eax, eax |
$jz exit01 |
// initialize import |
$mov edx,eax |
ESI=import_table; |
@import_loop01: |
$lodsd |
$test eax,eax |
$jz import_done01 |
$push edx |
@import_find01: |
$mov ebx,DSDWORD[EDX] |
$test ebx, ebx |
$jz exit01 |
$push eax |
@nex101: |
$mov cl,DSBYTE[EAX]; |
$cmp cl,DSBYTE[EBX]; |
$jnz import_find_next01 |
$test cl,cl |
$jz import_found01 |
$inc eax |
$inc ebx |
$jmp nex101 |
@import_find_next01: |
$pop eax |
$add edx, 8 |
$jmp import_find01 |
@import_found01: |
$pop eax |
$mov eax,DSDWORD[edx+4] |
$mov DSDWORD[esi-4],eax |
$pop edx |
$jmp import_loop01 |
@import_done01: |
IF (need_init) dll_Init(EDX); |
return 0; |
@exit01: |
return -1; |
} |
/programs/cmm/lib/edit_box_lib.h |
---|
0,0 → 1,49 |
//BOX_LIB |
dword boxlib = #aEdit_box_lib; //Asper |
char aEdit_box_lib[22]="/sys/lib/box_lib.obj\0"; //Asper |
dword edit_box_draw = #aEdit_box_draw; |
dword edit_box_key = #aEdit_box_key; |
dword edit_box_mouse = #aEdit_box_mouse; |
dword version_ed = #aVersion_ed; |
dword am__ = 0x0; |
dword bm__ = 0x0; |
char aEdit_box_draw[9] = "edit_box\0"; |
char aEdit_box_key[13] = "edit_box_key\0"; |
char aEdit_box_mouse[15] = "edit_box_mouse\0"; |
char aVersion_ed[11] = "version_ed\0"; |
char aCheck_box_draw [15] = "check_box_draw\0"; |
char aCheck_box_mouse [16] = "check_box_mouse\0"; |
char aVersion_ch [11] = "version_ch\0"; |
char aOption_box_draw [16] = "option_box_draw\0"; |
char aOption_box_mouse[17] = "option_box_mouse\0"; |
char aVersion_op [11] = "version_op\0" ; |
struct edit_box{ |
dword width, left, top, color, shift_color, focus_border_color, blur_border_color, |
text_color, max, text, mouse_variable, flags, size, pos, offset, cl_curs_x, cl_curs_y, shift, shift_old; |
}; |
//ed_width equ [edi] ;è¨à¨ ª®¬¯®¥â |
//ed_left equ [edi+4] ;¯®«®¦¥¨¥ ¯® ®á¨ å |
//ed_top equ [edi+8] ;¯®«®¦¥¨¥ ¯® ®á¨ ã |
//ed_color equ [edi+12] ;梥â ä® ª®¬¯®¥â |
//shift_color equ [edi+16] ;=0x6a9480 |
//ed_focus_border_color equ [edi+20] ;梥â à ¬ª¨ ª®¬¯®¥â |
//ed_blur_border_color equ [edi+24] ;梥⠥ ªâ¨¢®£® ª®¬¯®¥â |
//ed_text_color equ [edi+28] ;梥â ⥪áâ |
//ed_max equ [edi+32] ;ª®«-¢® ᨬ¢®«®¢ ª®â®àë¥ ¬®¦® ¬ ªá¨¬ «ì® ¢¢¥á⨠|
//ed_text equ [edi+36] ;㪠§ â¥«ì ¡ãä¥à |
//ed_flags equ [edi+40] ;ä« £¨ |
//ed_size equ [edi+42] ;ª®«-¢® ᨬ¢®«®¢ |
//ed_pos equ [edi+46] ;¯®§¨æ¨ï ªãàá®à |
//ed_offset equ [edi+50] ;ᬥ饨¥ |
//cl_curs_x equ [edi+54] ;¯à¥¤ë¤ãé ï ª®®à¤¨ â ªãàá®à ¯® å |
//cl_curs_y equ [edi+58] ;¯à¥¤ë¤ãé ï ª®®à¤¨ â ªãàá®à ¯® ã |
//ed_shift_pos equ [edi+62] ;¯®«®¦¥¨¥ ªãàá®à |
//ed_shift_pos_old equ [edi+66] ;áâ ஥ ¯®«®¦¥¨¥ ªãàá®à |
/programs/cmm/lib/encoding.h |
---|
0,0 → 1,182 |
inline fastcall void wintodos( ESI) |
{ |
while (BL=ESBYTE[ESI]) |
{ |
IF (BL>=192) |
{ |
IF (BL>=240) ESBYTE[ESI] = BL - 16; |
ELSE ESBYTE[ESI] = BL - 64; |
} |
ELSE |
{ |
IF (BL==178) ESBYTE[ESI] = 73; //I |
IF (BL==179) ESBYTE[ESI] = 105; //i |
IF (BL==175) ESBYTE[ESI] = 244; //J |
IF (BL==191) ESBYTE[ESI] = 245; //j |
IF (BL==170) ESBYTE[ESI] = 242; //E |
IF (BL==186) ESBYTE[ESI] = 243; //e |
IF (BL==168) ESBYTE[ESI] = 240; //ð |
IF (BL==184) ESBYTE[ESI] = 'e'; //e |
IF (BL==180) ESBYTE[ESI] = 254; //ã |
IF ((BL==147) || (BL==148) || (BL==171) || (BL==187)) ESBYTE[ESI] = 34; |
IF ((BL==150) || (BL==151)) ESBYTE[ESI] = 45; |
} |
ESI++; |
} |
} |
byte mas[66] = "î ¡æ¤¥ä£å¨©ª«¬®¯ïàáâ㦢ìë§èíéçê "; |
inline fastcall void koitodos( EDI) |
{ |
WHILE (BL=ESBYTE[EDI]) |
{ |
IF (BL >= 0xC0) |
{ |
BL -= 0xC0; |
ESBYTE[EDI] = mas[BL]; |
} |
//IF (ESBYTE[EDI]=='\244') ESBYTE[EDI]='i'; |
EDI++; |
} |
} |
//Asper, lev |
//uncomplete |
inline fastcall void utf8rutodos( ESI) |
{ |
EDI=ESI; |
while (BL=ESBYTE[ESI]) |
{ |
IF (BL == 0xD0) || (BL == 0xD1) EDI--; |
else IF (BL == 0x81) && (ESBYTE[ESI-1]==0xD0) ESBYTE[EDI] = 0xF0; //ø |
else IF (BL == 0x91) && (ESBYTE[ESI-1]==0xD1) ESBYTE[EDI] = 0xF1; //ì |
//0xE2 0x80 - ñãðóïïèðîâàòü |
else IF (BL == 0xE2) && (ESBYTE[ESI+1]==0x80) |
SWITCH (ESBYTE[ESI+2]) |
{ |
case 0x93: //long defis |
CASE 0x94: |
{ |
ESBYTE[EDI] = '-'; |
ESI+=2; |
BREAK; |
} |
CASE 0xA2: //central point |
{ |
ESBYTE[EDI] = '*'; |
ESI+=2; |
BREAK; |
} |
CASE 0xA6: //ìíîãîòî÷èå |
{ |
ESBYTE[EDI] = ESBYTE[EDI+1] = ESBYTE[EDI+2] = '.'; |
EDI+=2; |
ESI+=2; |
break; |
} |
} |
else IF (BL == 0xC2) //òàáëèöó ïåðåêîäèðîâîê? |
SWITCH(ESBYTE[ESI+1]) { |
case 0xAB: //" |
CASE 0xBB: //" |
{ |
ESBYTE[EDI] = '\"'; |
ESI++; |
BREAK; |
} |
CASE 0xB7: // _ |
{ |
ESBYTE[EDI] = '_'; |
ESI++; |
BREAK; |
} |
CASE 0xA0: // Alt+160 - íåðàçáèâàþùèé ïðîáåë |
{ |
ESBYTE[EDI] = ' '; |
ESI++; |
BREAK; |
} |
CASE 0xB0: // ãðàäóñ |
{ |
ESBYTE[EDI] = '\29'; |
ESI++; |
BREAK; |
} |
CASE 0xA9: // (c) --- âûëåò Î_î |
{ |
ESBYTE[EDI] = 'c'; |
//ESBYTE[EDI] = '('; |
//ESBYTE[EDI+1] = 'c'; |
//ESBYTE[EDI+2] = ')'; |
//EDI+=2; |
ESI++; |
BREAK; |
} |
CASE 0xAE: // (r) |
{ |
ESBYTE[EDI] = 'r'; |
//ESBYTE[EDI] = '('; |
//ESBYTE[EDI+1] = 'r'; |
//ESBYTE[EDI+2] = ')'; |
//EDI+=2; |
ESI++; |
BREAK; |
} |
} |
ELSE IF (BL >= 0x90) && (BL <= 0xAF) |
{ |
BL -= 0x10; |
ESBYTE[EDI] = BL; |
} |
ELSE IF (BL >= 0x80) && (BL <= 0x8F) |
{ |
BL += 0x60; |
ESBYTE[EDI] = BL; |
} |
ELSE IF (BL >= 0xB0) && (BL <= 0xBF) |
{ |
BL -= 0x10; |
ESBYTE[EDI] = BL; |
} |
ELSE ESBYTE[EDI] = BL; |
ESI++; |
EDI++; |
} |
WHILE (EDI<ESI) |
{ |
ESBYTE[EDI] = ' '; |
EDI++; |
} |
} |
//------------------------------------------------------------------------------ |
dword Hex2Symb(char* htmlcolor) |
{ |
dword j=0, symbol=0; |
char ch=0x00; |
FOR (;j<2;j++) |
{ |
ch=ESBYTE[htmlcolor+j]; |
IF (ch==0x0d) || (ch=='\9') RETURN ''; |
IF ((ch>='0') && (ch<='9')) ch -= '0'; |
IF ((ch>='A') && (ch<='F')) ch -= 'A'-10; |
IF ((ch>='a') && (ch<='f')) ch -= 'a'-10; |
symbol = symbol*0x10 + ch; |
} |
wintodos(#symbol); |
AL=symbol; |
} |
/* |
int hex2char(dword c) |
{ |
if (c <=9) |
return (c+48); |
return (c - 10 + 'a'); |
}*/ |
/programs/cmm/lib/figures.h |
---|
0,0 → 1,33 |
void DrawRectangle(dword x,y,width,height,color1) |
{ |
DrawBar(x,y,width,1,color1); |
DrawBar(x,y+height,width,1,color1); |
DrawBar(x,y,1,height,color1); |
DrawBar(x+width,y,1,height+1,color1); |
} |
void DrawRectangle3D(dword x,y,width,height,color1,color2) |
{ |
DrawBar(x,y,width+1,1,color1); |
DrawBar(x,y+1,1,height-1,color1); |
DrawBar(x+width,y+1,1,height,color2); |
DrawBar(x,y+height,width,1,color2); |
} |
void DrawCaptButton(dword x,y,width,height,id,color,text,text_len) |
{ |
DefineButton(x,y,width,height,id+BT_HIDE,0xEFEBEF); |
WriteText(-text_len*6+width/2+x+1,height/2-3+y,0x80,0,text,0); |
} |
void DrawCircle(int x, y, r) |
{ |
int i; |
float px=0, py=r, ii = r * 3.1415926 * 2; |
FOR (i = 0; i < ii; i++) |
{ |
PutPixel(px + x, y - py, 0); |
px = py / r + px; |
py = -px / r + py; |
} |
} |
/programs/cmm/lib/file_system.h |
---|
0,0 → 1,208 |
struct f70{ |
dword func; |
dword param1; |
dword param2; |
dword param3; |
dword param4; |
char rezerv; |
dword name; |
}; |
struct BDVK{ |
dword attr; |
byte type_name; |
byte rez1, rez2, rez3; |
dword timecreate; |
dword datecreate; |
dword timelastaccess; |
dword datelastaccess; |
dword timelastedit; |
dword datelastedit; |
dword sizelo; |
dword sizehi; |
char name[518]; |
}; |
/////////////////////////// |
// Çàïóñê ïðîãðàììû // |
/////////////////////////// |
f70 run_file_70; |
:int RunProgram(dword run_path, run_param) |
{ |
run_file_70.func = 7; |
run_file_70.param1 = |
run_file_70.param3 = |
run_file_70.param4 = |
run_file_70.rezerv = 0; |
run_file_70.param2 = run_param; |
run_file_70.name = run_path; |
$mov eax,70 |
$mov ebx,#run_file_70.func |
$int 0x40 |
} |
/////////////////////////// |
// Ñîçäàíèå ïàïêè // |
/////////////////////////// |
f70 create_dir_70; |
:int CreateDir(dword new_folder_path) |
{ |
create_dir_70.func = 9; |
create_dir_70.param1 = |
create_dir_70.param2 = |
create_dir_70.param3 = |
create_dir_70.param4 = |
create_dir_70.rezerv = 0; |
create_dir_70.name = new_folder_path; |
$mov eax,70 |
$mov ebx,#create_dir_70.func |
$int 0x40 |
} |
//////////////////////////// |
// Óäàëåíèå ôàéëà/ïàïêè // |
//////////////////////////// |
f70 del_file_70; |
:int DeleteFile(dword del_file_path) |
{ |
del_file_70.func = 8; |
del_file_70.param1 = |
del_file_70.param2 = |
del_file_70.param3 = |
del_file_70.param4 = |
del_file_70.rezerv = 0; |
del_file_70.name = del_file_path; |
$mov eax,70 |
$mov ebx,#del_file_70.func |
$int 0x40 |
} |
//////////////////////////// |
// Ïðî÷èòàòü ôàéë // |
//////////////////////////// |
f70 read_file_70; |
:int ReadFile(dword read_pos, read_file_size, read_buffer, read_file_path) |
{ |
read_file_70.func = 0; |
read_file_70.param1 = read_pos; |
read_file_70.param2 = 0; |
read_file_70.param3 = read_file_size; |
read_file_70.param4 = read_buffer; |
read_file_70.rezerv = 0; |
read_file_70.name = read_file_path; |
$mov eax,70 |
$mov ebx,#read_file_70.func |
$int 0x40 |
} |
//////////////////////////// |
// Çàïèñàòü ôàéë // |
//////////////////////////// |
f70 write_file_70; |
:int WriteFile(dword write_file_size, write_buffer, write_file_path) |
{ |
write_file_70.func = 2; |
write_file_70.param1 = 0; |
write_file_70.param2 = 0; |
write_file_70.param3 = write_file_size; |
write_file_70.param4 = write_buffer; |
write_file_70.rezerv = 0; |
write_file_70.name = write_file_path; |
$mov eax,70 |
$mov ebx,#write_file_70.func |
$int 0x40 |
} |
/////////////////////////// |
// Ïðî÷èòàòü ïàïêó // |
/////////////////////////// |
f70 read_dir_70; |
:int ReadDir(dword file_count, read_buffer, dir_path) |
{ |
read_dir_70.func = 1; |
read_dir_70.param1 = |
read_dir_70.param2 = |
read_dir_70.rezerv = 0; |
read_dir_70.param3 = file_count; |
read_dir_70.param4 = read_buffer; |
read_dir_70.name = dir_path; |
$mov eax,70 |
$mov ebx,#read_dir_70.func |
$int 0x40 |
} |
/////////////////////////// |
// Ïàðàìåòðû ôàéëà // |
/////////////////////////// |
f70 getinfo_file_70; |
BDVK getinfo_file_info; |
:dword GetFileInfo(dword file_path) |
{ |
getinfo_file_70.func = 5; |
getinfo_file_70.param1 = |
getinfo_file_70.param2 = |
getinfo_file_70.param3 = 0; |
getinfo_file_70.param4 = #getinfo_file_info; |
getinfo_file_70.rezerv = 0; |
getinfo_file_70.name = file_path; |
$mov eax,70 |
$mov ebx,#getinfo_file_70.func |
$int 0x40 |
} |
/////////////////////////// |
// Ñêîïèðîâàòü ôàéë // |
/////////////////////////// |
:int CopyFile(dword copy_from, copy_in) |
{ |
BDVK CopyFile_atr; |
dword cBufer=0; |
if (! GetFileInfo(copy_from)) |
{ |
mem_Init(); |
cBufer = mem_Alloc(CopyFile_atr.sizelo); |
if (! ReadFile(dword 0, CopyFile_atr.sizelo, cBufer, copy_from)) |
if (! WriteFile(CopyFile_atr.sizelo, cBufer, copy_in)) return 1; |
} |
return 0; |
} |
//Asper |
void ReadAttributes(dword read_buffer, file_path) |
{ |
read_file_70.func = 5; |
read_file_70.param1 = 0; |
read_file_70.param2 = 0; |
read_file_70.param3 = 0; |
read_file_70.param4 = read_buffer; |
read_file_70.rezerv = 0; |
read_file_70.name = file_path; |
$mov eax,70 |
$mov ebx,#read_file_70.func |
$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 |
} |
void notify(dword notify_param) |
{ |
RunProgram("@notify", notify_param); |
} |
/programs/cmm/lib/kolibri.h |
---|
0,0 → 1,463 |
//CODED by Veliant, Leency, Nable. GNU GPL licence. |
#startaddress 0 |
#code32 TRUE |
char os_name[8] = {'M','E','N','U','E','T','0','1'}; |
dword os_version = 0x00000001; |
dword start_addr = #main; |
dword final_addr = #stop+32; |
dword alloc_mem = #0x00100000; |
dword x86esp_reg = #0x00100000; |
dword I_Param = #param; |
dword I_Path = #program_path; |
char param[4096]; |
char program_path[4096]; |
//Events |
#define evMouse 6 |
#define evButton 3 |
#define evKey 2 |
#define evReDraw 1 |
#define OLD -1 |
#define true 1 |
#define false 0 |
#define NULL 0 |
//Button options |
#define BT_DEL 0x80000000 |
#define BT_HIDE 0x40000000 |
#define BT_NOFRAME 0x20000000 |
//------------------------------------------------------------------------- |
struct mouse |
{ |
int x,y,lkm,pkm,hor,vert; |
void get(); |
}; |
void mouse::get() |
{ |
EAX = 37; |
EBX = 1; |
$int 0x40 |
$mov ebx, eax |
$shr eax, 16 |
$and ebx,0x0000FFFF |
x = EAX; |
y = EBX; |
EAX = 37; |
EBX = 2; |
$int 0x40 |
$mov ebx, eax |
$and eax, 0x00000001 |
$shr ebx, 1 |
$and ebx, 0x00000001 |
lkm = EAX; |
pkm = EBX; |
EAX = 37; //áªà®«« |
EBX = 7; |
$int 0x40 |
$mov ebx, eax |
$shr eax, 16 |
$and ebx,0x0000FFFF |
//hor = EAX; |
vert = EBX; |
} |
struct system_colors |
{ |
dword frame,grab,grab_button,grab_button_text,grab_text, |
work,work_button,work_button_text,work_text,work_graph; |
void get(); |
}; |
void system_colors::get() |
{ |
EAX = 48; |
EBX = 3; |
ECX = #frame; |
EDX = 40; |
$int 0x40 |
} |
//------------------------------------------------------------------------------ |
inline fastcall dword WaitEvent() |
{ |
$mov eax,10 |
$int 0x40 |
} |
inline fastcall dword CheckEvent() |
{ |
$mov eax,11 |
$int 0x40 |
} |
inline fastcall dword WaitEventTimeout( EBX) |
{ |
$mov eax,23 |
$int 0x40 |
} |
inline fastcall SetEventMask( EBX) |
{ |
$mov eax,40 |
$int 0x40 |
} |
inline fastcall ScancodesGeting(){ |
$mov eax,66 |
$mov ebx,1 |
$mov ecx,1 //᪠ª®¤ë |
$int 0x40 |
} |
inline fastcall word GetKey() //+Gluk fix |
{ |
$push edx |
@getkey: |
$mov eax,2 |
$int 0x40 |
$cmp eax,1 |
$jne getkeyi |
$mov ah,dh |
$jmp getkeyii //jz? |
@getkeyi: |
$mov dh,ah |
$jmp getkey |
@getkeyii: |
$pop edx |
$shr eax,8 |
} |
inline fastcall Pause( EBX) |
{ |
$mov eax, 5 |
$int 0x40 |
} |
inline fastcall word GetButtonID() |
{ |
$mov eax,17 |
$int 0x40 |
$shr eax,8 |
} |
//---------------------------------------- |
inline fastcall dword GetFreeRAM() |
{ |
$mov eax, 18 |
$mov ebx, 16 |
$int 0x40 |
//return eax = ðàçìåð ñâîáîäíîé ïàìÿòè â êèëîáàéòàõ |
} |
inline fastcall dword LoadDriver( ECX) //ECX - èìÿ äðàéâåðà |
{ |
$mov eax, 68 |
$mov ebx, 16 |
$int 0x40 |
//return 0 - íåóäà÷à, èíà÷å eax = õýíäë äðàéâåðà |
} |
inline fastcall dword RuleDriver( ECX) //óêàçàòåëü íà óïðàâëÿþùóþ ñòðóêòóðó |
{ |
$mov eax, 68 |
$mov ebx, 17 |
$int 0x40 |
//return eax = îïðåäåëÿåòñÿ äðàéâåðîì |
} |
struct proc_info |
{ |
#define SelfInfo -1 |
dword use_cpu; |
word pos_in_stack,num_slot,rezerv1; |
char name[11]; |
char rezerv2; |
dword adress,use_memory,ID,left,top,width,height; |
word status_slot,rezerv3; |
dword work_left,work_top,work_width,work_height; |
char status_window; |
void GetInfo( ECX); |
byte reserved[1024-71]; |
}; |
inline fastcall void GetProcessInfo( EBX, ECX) |
{ |
$mov eax,9; |
$int 0x40 |
} |
inline fastcall int GetPointOwner( EBX, ECX) //ebx=m.x, ecx=m.y |
{ |
$mov eax,34 |
$int 0x40 |
} |
inline fastcall int GetProcessSlot( ECX) |
{ |
EAX = 18; |
EBX = 21; |
$int 0x40 |
} |
inline fastcall int GetActiveProcess() |
{ |
EAX = 18; |
EBX = 7; |
$int 0x40 |
} |
inline fastcall int CreateThread( ECX,EDX) |
{ |
$mov eax,51 |
$mov ebx,1 |
$int 0x40 |
} |
inline fastcall void SwitchToAnotherThread() |
{ |
$mov eax,68 |
$mov ebx,1 |
$int 0x40 |
} |
inline fastcall int KillProcess( ECX) |
{ |
$mov eax,18; |
$mov ebx,18; |
$int 0x40 |
} |
#define TURN_OFF 2 |
#define REBOOT 3 |
#define KERNEL 4 |
inline fastcall int ExitSystem( ECX) |
{ |
$mov eax, 18 |
$mov ebx, 9 |
$int 0x40 |
} |
inline fastcall ExitProcess() |
{ |
$mov eax,-1; |
$int 0x40 |
} |
//------------------------------------------------------------------------------ |
//eax = ÿçûê ñèñòåìû (1=eng, 2=fi, 3=ger, 4=rus) |
inline fastcall int GetSystemLanguage() |
{ |
EAX = 26; |
EBX = 5; |
$int 0x40 |
} |
inline fastcall GetSkinHeight() |
{ |
$push ebx |
$mov eax,48 |
$mov ebx,4 |
$int 0x40 |
$pop ebx |
} |
inline fastcall void SetSystemSkin( ECX) |
{ |
EAX = 48; |
EBX = 8; |
$int 0x40 |
} |
inline fastcall int GetScreenWidth() |
{ |
$mov eax, 14 |
$int 0x40 |
$shr eax, 16 |
} |
inline fastcall int GetScreenHeight() |
{ |
$mov eax, 14 |
$int 0x40 |
$and eax,0x0000FFFF |
} |
inline fastcall dword LoadLibrary( ECX) |
{ |
$mov eax, 68 |
$mov ebx, 19 |
$int 0x40 |
} |
inline fastcall int TestBit( EAX, CL) |
{ |
$shr eax,cl |
$and eax,1 |
} |
inline fastcall int PlaySpeaker( ESI) |
{ |
$mov eax, 55 |
$mov ebx, 55 |
$int 0x40 |
} |
inline fastcall void debug( EDX) |
{ |
$push ebx |
$push ecx |
$mov eax, 63 |
$mov ebx, 1 |
next_char: |
$mov ecx, DSDWORD[edx] |
$or cl, cl |
$jz done |
$int 0x40 |
$inc edx |
$jmp next_char |
done: |
$mov cl, 13 |
$int 0x40 |
$mov cl, 10 |
$int 0x40 |
$pop ecx |
$pop ebx |
} |
//------------------------------------------------------------------------------ |
void DefineAndDrawWindow(dword x,y, sizeX,sizeY, byte WindowType,dword WindowAreaColor, EDI, ESI) |
{ |
EAX = 12; // function 12:tell os about windowdraw |
EBX = 1; |
$int 0x40 |
EAX = 0; |
EBX = x << 16 + sizeX; |
ECX = y << 16 + sizeY; |
EDX = WindowType << 24 | WindowAreaColor; |
$int 0x40 |
EAX = 12; // function 12:tell os about windowdraw |
EBX = 2; |
$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) |
{ |
$mov eax, 67 |
$int 0x40 |
} |
inline fastcall void DrawTitle( ECX) |
{ |
EAX = 71; |
EBX = 1; |
$int 0x40; |
} |
void WriteText(dword x,y,byte fontType, dword color, EDX, ESI) |
{ |
EAX = 4; |
EBX = x<<16+y; |
ECX = fontType<<24+color; |
$int 0x40; |
} |
void WriteNumber(dword x,y,byte fontType, dword color, count, ECX) |
{ |
EAX = 47; |
EBX = count<<16; |
EDX = x<<16+y; |
ESI = fontType<<24+color; |
$int 0x40; |
} |
void CopyScreen(dword EBX, x, y, sizeX, sizeY) |
{ |
EAX = 36; |
ECX = sizeX << 16 + sizeY; |
EDX = x << 16 + y; |
$int 0x40; |
} |
dword GetPixelColor(dword x, x_size, y) |
{ |
$mov eax, 35 |
EBX= y*x_size+x; |
$int 0x40 |
} |
void PutImage(dword EBX,w,h,x,y) |
{ |
EAX = 7; |
ECX = w<<16+h; |
EDX = x<<16+y; |
$int 0x40 |
} |
void _PutImage(dword x,y, w,h, EBX) |
{ |
EAX = 7; |
ECX = w<<16+h; |
EDX = x<<16+y; |
$int 0x40 |
} |
void PutPaletteImage(dword EBX,w,h,x,y,ESI,EDI) |
{ |
EAX = 65; |
ECX = w<<16+h; |
EDX = x<<16+y; |
EBP = 0; |
$int 0x40 |
} |
inline fastcall void PutPixel( EBX,ECX,EDX) |
{ |
EAX=1; |
$int 0x40 |
} |
void DrawBar(dword x,y,w,h,EDX) |
{ |
EAX = 13; |
EBX = x<<16+w; |
ECX = y<<16+h; |
$int 0x40 |
} |
void DefineButton(dword x,y,w,h,EDX,ESI) |
{ |
EAX = 8; |
EBX = x<<16+w; |
ECX = y<<16+h; |
$int 0x40 |
} |
inline fastcall void DeleteButton( EDX) |
{ |
EAX = 8; |
EDX += BT_DEL; |
$int 0x40; |
} |
/programs/cmm/lib/libimg_lib.h |
---|
0,0 → 1,104 |
//Asper |
//library |
dword libimg = #alibimg; |
char alibimg[21] = "/sys/lib/libimg.obj\0"; |
dword libimg_init = #alibimg_init; |
dword img_is_img = #aimg_is_img; |
dword img_to_rgb2 = #aimg_to_rgb2; |
dword img_decode = #aimg_decode; |
dword img_destroy = #aimg_destroy; |
dword img_draw = #aimg_draw; |
//dword img_flip = #aimg_flip; |
//dword img_rotate = #aimg_rotate; |
dword am1__ = 0x0; |
dword bm1__ = 0x0; |
//import libimg , \ |
char alibimg_init[9] = "lib_init\0"; |
char aimg_is_img[11] = "img_is_img\0"; |
char aimg_to_rgb2[12] = "img_to_rgb2\0"; |
char aimg_decode[11] = "img_decode\0"; |
char aimg_destroy[12] = "img_destroy\0"; |
char aimg_draw[9] = "img_draw\0"; |
//char aimg_flip[9] = "img_flip\0"; |
//char aimg_rotate[11] = "img_rotate\0 "; |
dword load_image(dword filename) |
{ |
//align 4 |
dword img_data=0; |
dword img_data_len=0; |
dword fh=0; |
dword image=0; |
byte tmp_buf[40]; |
$and img_data, 0 |
//$mov eax, filename |
//$push eax |
//invoke file.open, eax, O_READ |
file_open stdcall (filename, O_READ); |
$or eax, eax |
$jnz loc05 |
$stc |
return 0; |
@loc05: |
$mov fh, eax |
//invoke file.size |
file_size stdcall (filename); |
$mov img_data_len, ebx |
//stdcall mem.Alloc, ebx |
mem_Alloc(EBX); |
$test eax, eax |
$jz error_close |
$mov img_data, eax |
//invoke file.read, [fh], eax, [img_data_len] |
file_read stdcall (fh, EAX, img_data_len); |
$cmp eax, -1 |
$jz error_close |
$cmp eax, img_data_len |
$jnz error_close |
//invoke file.close, [fh] |
file_close stdcall (fh); |
$inc eax |
$jz error_ |
//; img.decode checks for img.is_img |
//; //invoke img.is_img, [img_data], [img_data_len] |
//; $or eax, eax |
//; $jz exit |
//invoke img.decode, [img_data], [img_data_len], 0 |
EAX=img_data; |
img_decode stdcall (EAX, img_data_len,0); |
$or eax, eax |
$jz error_ |
$cmp image, 0 |
$pushf |
$mov image, eax |
//call init_frame |
$popf |
//call update_image_sizes |
mem_Free(img_data);//free_img_data(img_data); |
$clc |
return image; |
@error_free: |
//invoke img.destroy, [image] |
img_destroy stdcall (image); |
$jmp error_ |
@error_pop: |
$pop eax |
$jmp error_ |
@error_close: |
//invoke file.close, [fh] |
file_close stdcall (fh); |
@error_: |
mem_Free(img_data); |
$stc |
return 0; |
} |
/programs/cmm/lib/libio_lib.h |
---|
0,0 → 1,36 |
//Asper |
//library |
dword libio = #alibio; |
char alibio[21] = "/sys/lib/libio.obj\0"; //"libio.obj\0"; |
dword libio_init = #alibio_init; |
dword file_size = #afile_size; |
dword file_open = #afile_open; |
dword file_read = #afile_read; |
dword file_close = #afile_close; |
dword am2__ = 0x0; |
dword bm2__ = 0x0; |
//import libio , \ |
char alibio_init[9] = "lib_init\0"; |
char afile_size[11] = "file_size\0"; |
char afile_open[12] = "file_open\0"; |
char afile_read[11] = "file_read\0"; |
char afile_close[12] = "file_close\0"; |
//align 4 |
//dword fh=0; |
#define O_BINARY 0 |
#define O_READ 1 |
#define O_WRITE 2 |
#define O_CREATE 4 |
#define O_SHARE 8 |
#define O_TEXT 16 |
#define SEEK_SET 0 |
#define SEEK_CUR 1 |
#define SEEK_END 2 |
/programs/cmm/lib/mem.h |
---|
0,0 → 1,203 |
//mem.Init |
dword mem_Init() |
{ |
$push ebx |
$mov eax, 68 |
$mov ebx, 11 |
$int 0x40 |
$pop ebx |
return EAX; |
} |
//mem.Alloc |
dword mem_Alloc(dword size) |
{ |
$push ebx |
$push ecx |
$mov eax, 68 |
$mov ebx, 12 |
$mov ecx, size |
$int 0x40 |
$pop ecx |
$pop ebx |
return EAX; |
} |
//mem.ReAlloc |
stdcall dword mem_ReAlloc(dword mptr, size) |
{ |
$push ebx |
$push ecx |
$push edx |
$mov eax, 68 |
$mov ebx, 20 |
$mov ecx, size |
$mov edx, mptr |
$int 0x40 |
$pop edx |
$pop ecx |
$pop ebx |
return EAX; |
} |
//mem.Free |
void mem_Free(dword mptr) |
{ |
$push eax |
$push ebx |
$push ecx |
$mov eax, 68 |
$mov ebx, 13 |
$mov ecx, mptr |
$test ecx, ecx |
$jz end0 |
$int 0x40 |
@end0: |
$pop ecx |
$pop ebx |
$pop eax |
} |
//stdcall dword ?? |
inline fastcall mem_Move( EDI, ESI, ECX) |
{ |
asm { |
MOV EAX, ECX |
CMP EDI, ESI |
JG L1 |
JE L2 |
SAR ECX, 2 |
JS L2 |
REP MOVSD |
MOV ECX, EAX |
AND ECX, 3 |
REP MOVSB |
JMP SHORT L2 |
L1: LEA ESI, DSDWORD[ ESI+ECX-4] |
LEA EDI, DSDWORD[ EDI+ECX-4] |
SAR ECX, 2 |
JS L2 |
STD |
REP MOVSD |
MOV ECX, EAX |
AND ECX, 3 |
ADD ESI, 3 |
ADD EDI, 3 |
REP MOVSB |
CLD |
L2: |
} |
} |
/*:void fastcall memsetz( EDI, ECX) |
{ |
asm { |
XOR EAX, EAX |
MOV EDX, ECX |
SHR ECX, 2 |
REP STOSD |
MOV ECX, EDX |
AND ECX, 3 |
REP STOSB |
} |
} |
:void fastcall memset( EDI, ECX, AL) |
{ |
asm { |
MOV AH, AL |
MOVZX EDX, AX |
SHL EAX, 16 |
OR EAX, EDX |
MOV EDX, ECX |
SHR ECX, 2 |
REP STOSD |
MOV ECX, EDX |
AND ECX, 3 |
REP STOSB |
} |
} |
:void fastcall memcpy( EDI, ESI, ECX) |
{ |
asm { |
MOV EDX, ECX |
SHR ECX, 2 |
REP MOVSD |
MOV ECX, EDX |
AND ECX, 3 |
REP MOVSB |
} |
} |
:void fastcall memsetd( EDI, ECX, EAX) |
{ |
asm { |
REP STOSD |
} |
} |
:void fastcall memcpyd( EDI, ESI, ECX) |
{ |
asm { |
REP MOVSD |
} |
} |
:void fastcall memmov( EDI, ESI, ECX) |
{ |
asm { |
MOV EAX, ECX |
CMP EDI, ESI |
JG L1 |
JE L2 |
SAR ECX, 2 |
JS L2 |
REP MOVSD |
MOV ECX, EAX |
AND ECX, 3 |
REP MOVSB |
JMP SHORT L2 |
L1: LEA ESI, DSDWORD[ ESI+ECX-4] |
LEA EDI, DSDWORD[ EDI+ECX-4] |
SAR ECX, 2 |
JS L2 |
STD |
REP MOVSD |
MOV ECX, EAX |
AND ECX, 3 |
ADD ESI, 3 |
ADD EDI, 3 |
REP MOVSB |
CLD |
L2: |
} |
} |
:long fastcall memcmp( ESI, EDI, ECX) |
{ |
asm { |
MOV EAX, ECX |
SHR ECX, 2 |
REPE CMPSD |
MOV ECX, EAX |
AND ECX, 3 |
REPE CMPSB |
XOR EAX, EAX |
XOR ECX, ECX |
MOV AL, DSBYTE[ ESI-1] |
MOV CL, DSBYTE[ EDI-1] |
SUB EAX, ECX |
} |
}*/ |
/*#define memzset memsetz |
#define memset0 memsetz |
#define mem0set memsetz |
#define memset32 memsetd |
#define memcpy32 memcpyd*/ |
/programs/cmm/lib/memory.h |
---|
0,0 → 1,66 |
#code32 TRUE |
inline fastcall dword malloc(dword ECX){ |
dword size, heap; |
#speed |
size = ECX; |
EAX = 68; |
EBX = 11; |
$int 0x40; |
heap = EAX; |
IF (size<=heap) |
{ |
EAX = 68; |
EBX = 12; |
ECX = size; |
$int 0x40; |
} |
ELSE EAX=-1; |
#codesize |
} |
inline fastcall dword free(dword ECX){ |
#speed |
EAX = 68; |
EBX = 13; |
$int 0x40; |
#codesize |
} |
inline fastcall dword realloc(dword ECX, EDX){ |
#speed |
EAX = 68; |
EBX = 20; |
$int 0x40; |
#codesize |
} |
inline fastcall memmov( EDI, ESI, ECX) |
{ |
asm { |
MOV EAX, ECX |
CMP EDI, ESI |
JG L1 |
JE L2 |
SAR ECX, 2 |
JS L2 |
REP MOVSD |
MOV ECX, EAX |
AND ECX, 3 |
REP MOVSB |
JMP SHORT L2 |
L1: LEA ESI, DSDWORD[ ESI+ECX-4] |
LEA EDI, DSDWORD[ EDI+ECX-4] |
SAR ECX, 2 |
JS L2 |
STD |
REP MOVSD |
MOV ECX, EAX |
AND ECX, 3 |
ADD ESI, 3 |
ADD EDI, 3 |
REP MOVSB |
CLD |
L2: |
} |
} |
/programs/cmm/lib/random.h |
---|
0,0 → 1,55 |
/******************************************************************************* |
MenuetOS MineSweeper |
Copyright (C) 2003 Ivan Poddubny |
This program is free software; you can redistribute it and/or modify |
it under the terms of the GNU General Public License as published by |
the Free Software Foundation; either version 2 of the License, or |
(at your option) any later version. |
This program is distributed in the hope that it will be useful, |
but WITHOUT ANY WARRANTY; without even the implied warranty of |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
GNU General Public License for more details. |
You should have received a copy of the GNU General Public License |
along with this program; if not, write to the Free Software |
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
*******************************************************************************/ |
dword generator; // random number generator - äëÿ ãåíåðàöèè ñëó÷àéíûõ ÷èñåë |
inline fastcall int random( ECX) |
// get pseudo-random number - ïîëó÷èòü ïñåâäîñëó÷àéíîå ÷èñëî |
{ |
$push ebx |
$rdtsc // eax & edx |
$xor eax,edx |
$not eax |
EBX = generator; |
$ror ebx,3 |
$xor ebx,0xdeadbeef |
EBX += EAX; |
generator = EBX; |
EAX += EBX; |
EAX = EAX % ECX; |
$pop ebx |
} |
inline fastcall randomize() |
// initialize random number generator - èíèöèàëèçèðîâàòü ãåíåðàòîð ñëó÷àéíûõ ÷èñåë |
{ |
asm |
{ |
mov eax,3 |
int 0x40 |
ror eax,16 |
} |
generator = EAX; |
} |
/programs/cmm/lib/scroll_lib.h |
---|
0,0 → 1,95 |
//lev |
//:dword boxlib = #abox_lib; |
:char abox_lib[]="/sys/lib/box_lib.obj"; |
:char aboxlib_init[] = "lib_init"; |
:char aScrollbar_v_draw = "scrollbar_v_draw"; |
:char aScrollbar_v_mouse = "scrollbar_v_mouse"; |
:char aScrollbar_h_draw = "scrollbar_h_draw"; |
:char aScrollbar_h_mouse = "scrollbar_h_mouse"; |
:char aVersion_scrollbar = "version_scrollbar"; |
dword boxlib_init = #aboxlib_init; |
dword scrollbar_v_draw = #aScrollbar_v_draw; |
dword scrollbar_v_mouse = #aScrollbar_v_mouse; |
dword scrollbar_h_draw = #aScrollbar_h_draw; |
dword scrollbar_h_mouse = #aScrollbar_h_mouse; |
:dword version_scrollbar = #aVersion_scrollbar; |
dword sc_am__ = 0x0; |
dword sc_bm__ = 0x0; |
struct scroll_bar |
{ |
//scroll_bar: |
word size_x,// equ [edi] |
start_x,// equ [edi+2] |
size_y,// equ [edi+4] |
start_y;// equ [edi+6] |
dword btn_height, // equ [edi+8] |
type,// equ [edi+12] |
max_area,// equ [edi+16] |
cur_area,// equ [edi+20] |
position,// equ [edi+24] |
bckg_col,// equ [edi+28] |
frnt_col,// equ [edi+32] |
line_col,// equ [edi+36] |
redraw;// equ [edi+40] |
word delta,// equ [edi+44] |
delta2,// equ [edi+46] |
r_size_x,// equ [edi+48] |
r_start_x,// equ [edi+50] |
r_size_y,// equ [edi+52] |
r_start_y;// equ [edi+54] |
dword m_pos,// equ [edi+56] |
m_pos_2,// equ [edi+60] |
m_keys,// equ [edi+64] |
run_size,// equ [edi+68] |
position2,// equ [edi+72] |
work_size,// equ [edi+76] |
all_redraw,// equ [edi+80] |
ar_offset;// equ [edi+84] |
}; |
/*scroll_bar scroll1 = { |
18,//word size_x, |
200, //start_x, |
398, //size_y, |
44,//start_y; |
18,//dword btn_height, |
0,//type, |
115,//max_area, (100+cur_area) |
15,//cur_area, |
0,//position, |
0xeeeeee,//bckg_col, |
0xD2CED0,//frnt_col, |
0x555555,//line_col, |
0,//redraw; |
0,//word delta, |
0,//delta2, |
0,//r_size_x, |
0,//r_start_x, |
0,//r_size_y, |
0,//r_start_y; |
0,//dword m_pos, |
0,//m_pos_2, |
0,//m_keys, |
0,//run_size, |
0,//position2, |
0,//work_size, |
1,//all_redraw, |
1//ar_offset; |
};*/ |
//btn_height - ¢ëá®â ¡®ª®¢ëå ª®¯®ª («¥¢ ï ¨ ¯à ¢ ï ¤«ï £®à¨§. ¨ ¢¥àåïï ¨ ¨¦ïï ¤«ï ¢¥àâ.) |
//type - type - 0-1-2, ®áâ «ìë¥ ¢ë£«ï¤ïâ ª ª 0. |
//max_area - ®¡« áâì ¬ ªá¨¬ «ì ï, ªâã «ì® ª®£¤ ¥ ¢« §¨â ¢ ®â®¡à ¦ ¥¬ãî ®¡« áâì, â.¥. á«ãç © ªâ¨¢®á⨠ª®¬¯®¥â (¢¥áì ¬ ªá¨¬ «ìë© à §¬¥à ¤®ªã¬¥â ) |
//cur_area - à §¬¥à ¡¥£ãª //®¡« áâì ®â®¡à ¦ ¥¬ ï (ª ª ï ç áâì ¤®ªã¬¥â ¢« §¨â ¢ íªà ) |
//position - ¯®§¨æ¨ï ¡¥£ãª ¨§¬¥ï¥¬ ï ®â 0 ¤® § 票ï (max_area-cur_area) |
//bckg_col - 梥⠢ãâ२©, ¯à¨¬¥ï¥âáï ¤«ï ®¡« á⥩ ¬¥¦¤ã ¡¥£ãª®¬ ¨ ª®ª ¬¨ |
//frnt_col - 梥â àã¦ë©, ¯à¨¬¥ï¥âáï ¤«ï ®¡« á⥩ ®â«¨çëå ®â ¯à¨¬¥ï¥¬ëå ¢ bckg_col |
//line_col - 梥⠫¨¨© ¨ áâ५®ª ª®¯ª å |
//redraw - ¨¤¨ª â®à ¥®¡å®¤¨¬®á⨠¯¥à¥à¨á®¢ª¨ ã¯à ¢«ï¥¬®© ®¡« á⨠ãç¨âë¢ ï ¨§¬¥¥¨¥ position ¨ cur_area |
//delta2 - ¨¤¨ª â®à § å¢ â 䮪ãá áªà®««¡ ஬ (㤥ঠ¨¥ ¡¥£ãª ) |
//all_redraw - ä« £ ãáâ ¢«¨¢ ¥¬ë© ¢ 1 ¤«ï ¯¥à¥à¨á®¢ª¨ ¢á¥£® ª®¬¯®¥â , ¥á«¨ ¯®áâ ¢¨âì 0, â® ¯¥à¥à¨á®¢ª ¯à®¨á室¨â ⮫쪮 ¤«ï ®¡« á⨠¡¥£ãª . ¢¥¤¥® ¤«ï ãáª®à¥¨ï ®âà¨á®¢ª¨, ¯®áª®«ìªã ¥ ¢® ¢á¥å á«ãç ïå âॡã¥âáï ¯à¨ã¤¨â¥ì® ®âà¨á®¢ë¢ âì ¢á¥ ç á⨠ª®¬¯®¥â . ®£¤ ¢ë§ë¢ ¥âáï ¯® ᮡëâ¨î ¬ëè¨ ¢á¥£¤ ®âà¨á®¢ë¢ ¥âáï á ¬¨¬ ª®¬¯®¥â®¬ á® § 票¥¬ 0. |
//ar_offset - ¢¥«¨ç¨ á¬¥é¥¨ï ¯à¨ ®¤®ªà ⮬ ¦ ⨨ ¡®ª®¢®© ª®¯ª¨. |
/programs/cmm/lib/strings.h |
---|
0,0 → 1,336 |
//------------------------------------------------------------------------------ |
// strcmp( ESI, EDI) |
// strlen( EDI) |
// strcpy( EDI, ESI) |
// strcat( EDI, ESI) |
// strchr( ESI,BL) |
// strrchr( ESI,BL) |
// strstr( EBX, EDX) |
// itoa( ESI) |
// atoi( EAX) |
// strupr( ESI) |
// strlwr( ESI) ----- âîçìîæíî íå ïîääåðæèâàåò êèðèëëèöó |
// strttl( EDX) |
// strtok( ESI) |
//------------------------------------------------------------------------------ |
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 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 signed int strcmpi( ESI,EDI) |
uses EBX |
{ |
do{ |
$lodsb |
IF(AL>='a')&&(AL<='z')AL-=0x20; |
BL=DSBYTE[(E)DI]; |
IF(BL>='a')&&(BL<='z')BL-=0x20; |
AL-=BL; |
IF(!ZEROFLAG)BREAK; |
(E)DI++; |
}while(BL!=0); |
} |
inline char STRNCMPI((E)SI,(E)DI,(E)CX) |
{ |
(E)AX=0; |
LOOPNZ((E)CX){ |
$lodsb |
IF(AL>='a')&&(AL<='z')AL-=0x20; |
AH=DSBYTE[EDI]; |
IF(AH>='a')&&(AH<='z')AH-=0x20; |
EDI++; |
IF(AL==0)||(AH==0)||(AL!=AH)BREAK; |
} |
AL=AL-AH; |
}*/ |
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 |
} |
} |
dword itoa( ESI) |
{ |
unsigned char buffer[11]; |
EDI = #buffer; |
ECX = 10; |
if (ESI < 0) |
{ |
$mov al, '-' |
$stosb |
$neg esi |
} |
$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 al, '\0' |
$stosb |
return #buffer; |
} |
inline fastcall dword atoi( EDI) |
{ |
ESI=EDI; |
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 strchr( ESI,BL) |
{ |
int jj=0; |
do{ |
jj++; |
$lodsb |
IF(AL==BL) return jj; |
} while(AL!=0); |
return 0; |
} |
inline fastcall signed int strrchr( ESI,BL) |
{ |
int jj=0, last=0; |
do{ |
jj++; |
$lodsb |
IF(AL==BL) last=jj; |
} while(AL!=0); |
return last; |
} |
inline fastcall strupr( ESI) |
{ |
do{ |
AL=DSBYTE[ESI]; |
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++; |
}while(AL!=0); |
} |
inline fastcall strlwr( ESI) |
{ |
do{ |
$LODSB |
IF(AL>='A')&&(AL<='Z'){ |
AL+=0x20; |
DSBYTE[ESI-1]=AL; |
CONTINUE; |
} |
}while(AL!=0); |
} |
inline fastcall strttl( 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 dword 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: |
} |
} |
/* strtok( LPSTR dest, src, divs); |
src - óêàçàòåëü íà èñõîäíóþ ñòðîêó èëè ðåçóëüòàò ïðåäûäóùåãî âûçîâà |
dest - óêàçàòåëü íà áóôåð, êóäà áóäåò ñêîïèðîâàíî ñëîâî |
divs - óêàçàòåëü íà ñòðîêó, ñîäåðæàùóþ ñèìâîëû-ðàçäåëèòåëè |
Âîçâðàùàåò: 0, åñëè ñëîâ áîëüøå íåò |
íå 0, åñëè ñëîâî ñêîïèðîâàíî â dest (ïåðåäàéòå ýòî çíà÷åíèå |
â êà÷åñòâå src äëÿ ïîñëåäóþùåãî ïîèñêà) */ |
inline fastcall dword strtok( EDX, ESI, EBX) |
{ |
asm { |
XOR ECX, ECX |
MOV EDI, EBX |
XOR EAX, EAX |
DEC ECX |
REPNE SCASB |
XOR ECX, 0FFFFFFFFH |
DEC ECX |
PUSH ECX |
L1: LODSB |
OR AL, AL |
JZ L4 |
MOV EDI, EBX |
MOV ECX, SSDWORD[ ESP] |
REPNE SCASB |
JZ L1 |
DEC ESI |
L2: LODSB |
MOV EDI, EBX |
MOV ECX, SSDWORD[ ESP] |
REPNE SCASB |
JZ L3 |
MOV DSBYTE[ EDX], AL |
INC EDX |
JMP SHORT L2 |
L3: MOV EAX, ESI |
L4: POP ECX |
} DSBYTE[ EDX] = 0; |
} |
#define strncpy strcpyn |
#define strnmov strmovn |
#define stricmp strcmpi |
#define strcmpn strncmp |
#define strncmpi strcmpni |
#define stricmpn strcmpni |
#define strnicmp strcmpni |
#define strincmp strcmpni |
#define strcmpin strcmpni |
/programs/cmm/lib/truetype.h |
---|
0,0 → 1,29 |
//ýòî âñòàâèòü ïîñëå çàãðóçêè îñíîâíûõ áèáëèîòåê |
char fontinfo[28]; |
dword libtruetype = #att; |
char att[] = "/sys/lib/truetype.obj"; //"truetype.obj\0"; |
dword truetype = #att_truetype; |
dword get_length = #att_get_length; |
dword get_width = #att_get_width; |
dword text_out = #att_text_out; |
dword init_font = #att_init_font; |
dword am3__ = 0x0; |
dword bm3__ = 0x0; |
//import libimg , \ |
char att_truetype[] = "truetype"; |
char att_get_length[] = "get_length"; |
char att_get_width[] = "get_width"; |
char att_text_out[] = "text_out"; |
char att_init_font[] = "init_font"; |
//load_dll2(libtruetype, #truetype,0); |
//à ýòî - â ìîìåíò îòðèñîâêè îêíà |
//text_out stdcall (#text, -1, 40, 0xFF0000, 100, 100); |
/programs/cmm/lib/. |
---|
Property changes: |
Added: tsvn:logminsize |
+5 |
\ No newline at end of property |